《Java程序设计实验》软件18-1,3 期中测试题

选择题:

2-1关于被私有访问控制符private修饰的成员变量,以下说法正确的是( ) (3分)

  1. 可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类
  2. 可以被两种类访问和引用:该类本身、该类的所有子类
  3. 只能被该类自身所访问和修改
  4. 只能被同一个包中的类访问

2-2jmu-java学习笔记01-对JVM来说,可执行文件案的扩展名正确的是( )。(3分)

  1. java
  2. class
  3. dll
  4. pyc

解析:jvm就是解释执行.clss文件的。

2-3有一段java 应用程序,它的主类名是a1,那么保存它的源文件名可以是( ). (3分)

  1. a1.java
  2. a1.class
  3. a1
  4. 都对

2-4下列关于Java字符串的描叙中错误的是()。 (3分)

  1. 字符串是对象
  2. 在字符串可以在并发环境下被修改时,应该使用StringBuffer类
  3. String对象初始化后,其内容可以修改
  4. String类提供了许多用来操作字符串的方法:取子串,求字符串长度等

2-5

以下选项中没有语法错误的是( 3) 。 (3分)

  1. while (int  i<7) { 
        i++; 
        System.out.println(“i is “+i);  
    } 
    
  2. int  j=3; while(j) {   
        System.out.println(“ j  is “+j); 
    } 
    
  3. int  j=0; 
    for(int  k=0; j + k !=10; j++,k++) {     
         System.out.println(“ j  is “+ j + “k  is”+ k); 
    } 
    
  4. 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 分)

扫描二维码关注公众号,回复: 8896948 查看本文章

本题运行时要求键盘输入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();
  }
}
发布了76 篇原创文章 · 获赞 18 · 访问量 2763

猜你喜欢

转载自blog.csdn.net/qq_43446165/article/details/103380355