选择题:
2-1关于被私有访问控制符private修饰的成员变量,以下说法正确的是( ) (3分)
- 可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类
- 可以被两种类访问和引用:该类本身、该类的所有子类
- 只能被该类自身所访问和修改
- 只能被同一个包中的类访问
2-2jmu-java学习笔记01-对JVM来说,可执行文件案的扩展名正确的是( )。(3分)
- java
- class
- dll
- pyc
解析:jvm就是解释执行.clss文件的。
2-3有一段java 应用程序,它的主类名是a1,那么保存它的源文件名可以是( ). (3分)
- a1.java
- a1.class
- a1
- 都对
2-4下列关于Java字符串的描叙中错误的是()。 (3分)
- 字符串是对象
- 在字符串可以在并发环境下被修改时,应该使用StringBuffer类
- String对象初始化后,其内容可以修改
- String类提供了许多用来操作字符串的方法:取子串,求字符串长度等
2-5
以下选项中没有语法错误的是( 3) 。 (3分)
-
while (int i<7) { i++; System.out.println(“i is “+i); }
-
int j=3; while(j) { System.out.println(“ j is “+j); }
-
int j=0; for(int k=0; j + k !=10; j++,k++) { System.out.println(“ j is “+ j + “k is”+ k); }
-
int j=0;
do{
System.out.println( “j is “+j++);
if (j == 3) {
continue loop;
}
}while (j<10);
函数题:
sdust-Java-可实现多种排序的Book类 (20 分)
设计Book类,要求:1)Book类的成员属性包括:书名name(String类型)、出版日期publishDate(Date类型)、定价price(double型);2)为Book对象提供按出版日期、价格排序的两种方式,且能够满足测试程序代码中的输入输出要求(注意代码注释中的说明)。其中,类BookComparatorByPrice的排序功能是:将一组Book对象按照价格升序排序,如果价格相同,则按照书名字母顺序排列;类BookComparatorByPubDate的排序功能是:将一组Book对象按照出版日期降序排序。
裁判测试程序样例:
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Book[] books = new Book[4];
//1. 从键盘接收用户输入的4本书的名称(仅有英文字符构成)、出版日期(格式:1998-10-09)、价格,生成Book对象,构造包含4本书的数组
for(int i=0;i<4;i++){
String name = scan.next();
String date_str = scan.next();
Date date = null;
//将键盘录入的日期字符串转换为Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
date = sdf.parse(date_str);
} catch (ParseException e) {
System.out.println("日期格式有误");;
}
double price = Double.parseDouble(scan.next());
Book book = new Book(name, date, price);
books[i] = book;
}
//2.将books按照出版日期降序排序;然后输出books
Arrays.sort(books, new BookComparatorByPubDate());
for(Book book:books){
System.out.println(book);
}
//3.将books按照价格升序排序,如果价格相同,则按照书名字母顺序排列。然后输出books
Arrays.sort(books, new BookComparatorByPrice());
for(Book book:books){
System.out.println(book);
}
scan.close();
}
}
/* 请在这里填写答案 */
输入样例:
Java
2011-08-01
29
Python
2014-01-01
48
C
2004-09-08
17.5
DataBase
2012-09-17
17.5
输出样例:
书名:Python,定价:48.0
书名:DataBase,定价:17.5
书名:Java,定价:29.0
书名:C,定价:17.5
书名:C,定价:17.5
书名:DataBase,定价:17.5
书名:Java,定价:29.0
书名:Python,定价:48.0
AC代码:
import java.util.Date;
import java.util.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
//import javax.print.attribute.standard.RequestingUserName;
class Book {
private String name;
private Date publishDate;
private double price;
public String toString() {
return ("书名:" + this.name + ",定价:" + this.price);
}
public Book(String name, Date date, double price) {
this.name = name;
this.publishDate = date;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getPublishDate() {
return publishDate;
}
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
class BookComparatorByPrice implements Comparator<Book> {
public int compare(Book o1, Book o2) {
if(o1.getPrice() > o2.getPrice()) {
return 1;
} else if(o1.getPrice() < o2.getPrice()) {
return -1;
} else if(o1.getPrice() == o2.getPrice()){
return o1.getName().compareTo(o2.getName());
}
return 0;
}
}
class BookComparatorByPubDate implements Comparator<Book> {
public int compare(Book o1, Book o2) {
return -o1.getPublishDate().compareTo(o2.getPublishDate());
}
}
6-2 人口统计 (20 分)
本题运行时要求键盘输入10个人员的信息(每一个人信息包括:姓名,性别,年龄,民族),要求同学实现一个函数,统计民族是“汉族”的人数。
函数接口定义:
public static int numofHan(String data[])
其中 data[]
是传入的参数。 data[]
中的每一个元素都是一个完整的人员信息字符串,该字符串由“姓名,性别,年龄,民族”,各项之间用英文半角的逗号分隔。函数须返回 值是汉族的人数。
裁判测试程序样例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final int HUMANNUM=10;
String persons[]=new String[HUMANNUM];
Scanner in=new Scanner(System.in);
for(int i=0;i<persons.length;i++)
persons[i]=in.nextLine();
int result=numofHan(persons);
System.out.println(result);
}
/*在此处给出函数numofHan()*/
}
输入样例:
Tom_1,男,19,汉族
Tom_2,女,18,汉族
Tom_3,男,20,满族
Tom_4,男,18,汉族
Tom_5,男,19,汉族人
Tom_6,女,17,汉族
Tom_7,男,19,蒙古族
汉族朋友_1,男,18,汉族
Tom_8,male,19,老外
Tom_9,female,20,汉族
输出样例:
7
AC代码:
public static int numofHan(String data[]) {
int ans = 0;
for(String temp : data) {
String[] reStrings = temp.split(",");
if(reStrings[reStrings.length - 1].contains("汉族")) {
ans++;
}
}
return ans;
}
6-3 设计一个矩形类Rectangle (10 分)
设计一个名为Rectangle的类表示矩形。这个类包括: 两个名为width和height的double型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1. 一个无参构造方法。 一个为width和height指定值的矩形构造方法。 一个名为getArea()的方法返回这个矩形的面积。 一个名为getPerimeter()的方法返回这个矩形的周长。
类名为:
Rectangle
裁判测试程序样例:
import java.util.Scanner;
/* 你的代码将被嵌入到这里 */
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double w = input.nextDouble();
double h = input.nextDouble();
Rectangle myRectangle = new Rectangle(w, h);
System.out.println(myRectangle.getArea());
System.out.println(myRectangle.getPerimeter());
input.close();
}
}
输入样例:
3.14 2.78
输出样例:
8.7292
11.84
AC代码:
class Rectangle {
private double width;
private double length;
public Rectangle(double width, double length) {
this.width = width;
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getArea() {
return this.getWidth() * this.getLength();
}
public double getPerimeter() {
return 2 * (this.getWidth() + this.getLength());
}
}
编程题:
7-1 sdust-Java-字符串集合求并集 (20 分)
从键盘接收N个英文字符串(其中不同的字符串数量大于10),从头开始取5个不同的字符串放入一个集合S1,然后接着取5个不同的字符串放入另一个集合S2,按照字母顺序输出S1和S2的并集中的每个字符串(字符串区分大小写)
输入格式:
一行以空格分开的英文字符串(不同的字符串数量大于10)。
输出格式:
按照字母顺序(先比较字符串首字母,首字母相同的比较字符串第二个字母,以此类推)输出的S1和S2并集的字符串。
输入样例:
android python java javaee javase database java jsp servlet java algorithm junit
输出样例:
algorithm
android
database
java
javaee
javase
jsp
python
servlet
AC代码:
import java.rmi.dgc.Lease;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
/* 你的代码将被嵌入到这里 */
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
TreeSet<String> set1 = new TreeSet<String>();
//Set<String> set2 = new HashSet<String>();
TreeSet<String> set2 = new TreeSet<String>();
String string = input.nextLine();
String[] sstrings = string.split(" ");
int i = 0;
for(; i < sstrings.length; i++) {
if(set1.contains(sstrings[i])) {
continue;
}
set1.add(sstrings[i]);
if(set1.size() == 5) {
i++;
break;
}
}
for(; i < sstrings.length; i++) {
if(set2.contains(sstrings[i])) {
continue;
}
set2.add(sstrings[i]);
if(set2.size() == 5) {
break;
}
}
String[] s1 = new String[5];
String[] s2 = new String[5];
Iterator<String> iterator = set1.iterator();
Iterator<String> iterator2 = set2.iterator();
// for(i = 0; i < s1.length; i++)
// System.out.println(s1[i]);
//
// for(j = 0; j < s2.length; j++)
// System.out.println();
int cnt = 0;
while(iterator.hasNext()) {
s1[cnt++] = iterator.next();
}
cnt = 0;
while(iterator2.hasNext()) {
s2[cnt++] = iterator2.next();
}
int j = 0, k = 0;
while(j < 5 && k < 5) {
if(s1[j].compareTo(s2[k]) > 0) {
System.out.println(s2[k]);
k++;
} else if(s1[j].compareTo(s2[k]) < 0) {
System.out.println(s1[j]);
j++;
} else if(s1[j].compareTo(s2[k]) == 0){
System.out.println(s1[j]);
j++;
k++;
}
}
while(j < 5) {
System.out.println(s1[j]);
j++;
}
while(k < 5) {
System.out.println(s2[k]);
k++;
}
input.close();
}
}
7-2 超市贴花 (15 分)
某家超市有一种促销手段,购买金额超过一定阈值就随机给一个贴花。贴花有不同种类的,种类以编号表示,编号是一个1到100之间的数字。当收集到连续编号的三张贴花时,就可以换一个小礼物。
小明经常去某家超市购物,积攒了不少贴花,你帮他看看,能换多少小礼物。
输入格式:
首先是一个正整数N(1<N<100),表示小明手上的贴花的数量。 然后是N个正整数Pi(1<=Pi<=100),每个数字表示一张贴花的编号。
输出格式:
输出一个数字,表示小明可以换的小礼物的数量。如果不能换小礼物,就输出0。
输入样例:
6
3 2 4 6 6 4
输出样例:
1
AC代码:
import java.rmi.dgc.Lease;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
/* 你的代码将被嵌入到这里 */
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] a = new int[105];
int ans = 0;
int n = input.nextInt();
for(int k = 0; k < n; k++) {
int x = input.nextInt();
a[x]++;
for(int i = 1; i <= 98; i++)
{
int res = Math.min(a[i], Math.min(a[i + 1], a[i + 2]));
a[i] -= res;
a[i + 1] -= res;
a[i + 2] -= res;
ans += res;
}
}
System.out.println(ans);
input.close();
}
}