厦理Java期末训练题【附带每题答案,非标准但可通过PTA】
7-1 古埃及探秘-金字塔
金字塔是继99乘法表决之后的一个经典图形排列题
要求用户可以自主控制塔身的层数, 完成如下金字体样式;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int a = sca.nextInt();for(int i = 1; i<= a ; i++){for(int j = 1;j<=a-i;j++){System.out.print(" ");}for(int k = 1 ; k<=2*i-1;k++){System.out.print("*");}System.out.println();}
}
}
7-2 jmu-Java-01入门-第一个PAT上Java程序
本题目要求读入若干对整数a和b,然后输出它们的和。
输入格式:
在一行中给出一对整数a和b。 以下输入样例只有两对,实际测试数据可能有多对值。
输出格式:
对每一组输入,如果a的绝对值>1000,输出|a|>1000,否则输出a+b的值。
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);while(true){int a = sca.nextInt();int b = sca.nextInt();if(Math.abs(a)>1000){System.out.println("|a|>1000");}else{System.out.println(a+b);}}
}
}
3 jmu-Java-01入门-取数字 (2分)
本题目要求读入若干个代表整数的字符串,然后将其转化为整数。
如果该数>=10000且<=20000,则依次输出其对应的二进制字符串、八进制字符串、十六进制字符串。
否则将字符串中的每个数字抽取出来,然后将所有数字加总求和。
提示:参考jdk文档的Integer,
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int a = 0 ;while(sca.hasNext()){int sum = 0 ,num=0;String s = sca.nextLine();a=Integer.parseInt(s);if(a>=10000 && a<=20000){System.out.print(Integer.toBinaryString(a)+","+Integer.toOctalString(a)+","+Integer.toHexString(a));}else{char [] str = s.toCharArray();if(a<0){for(int i=0;i<str.length;i++){if (s.charAt(i)=='-'){continue;}System.out.print(str[i]+" ");sum+=str[i]-'0';}System.out.print(sum);}else{for(int j=0;j<str.length;j++){System.out.print(str[j]+" ");sum+=str[j]-'0';}System.out.print(sum);}}System.out.println();}
}
}
7-4 jmu-Java-01入门-取数字浮点数 (2分)
本题目要求读入若干以回车结束的字符串表示的整数或者浮点数,然后将每个数中的所有数字全部加总求和。
输入格式:
每行一个整数或者浮点数。保证在浮点数范围内。
输出格式:
整数或者浮点数中的数字之和。题目保证和在整型范围内。
import java.util.Scanner;
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sca = new Scanner(System.in);while(true){String s =sca.nextLine();char [] ch =s.toCharArray();int sum = 0 ;for(int i = 0 ; i<ch.length;i++){if(ch[i]=='-' || ch[i]=='.'){}else{int temp = Integer.parseInt(String.valueOf(ch[i]));sum += temp;}}System.out.println(sum);}}
}
-5 jmu-Java-01入门-开根号 (20分)
使用逐步逼近法对给定数值x求开根号。
逐步逼近法说明:从0开始逐步累加步长值。
步长=0.0001,epsilon(误差)=0.0001
循环继续的条件:
平方值<x 且 |x-平方值| > epsilon
###说明与参考
- 数值输出保留6位小数,使用System.out.printf("%.6f\n")
- 求平方,参考Math.pow函数。
- 输入值<0时,返回Double.NaN
输入格式:
任意数值
输出格式:
对每一组输入,在一行中输出其开根号。保留6位小数
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);double long1=0.0001;double epsilon = 0.0001;double i;double x;while(sca.hasNext()){x=sca.nextDouble();if(x<0){System.out.println("NaN");}else{for(i=0;(i*i <x) && (Math.abs(x-i*i) > epsilon);i+=long1){}System.out.printf("%.6f",i);System.out.println();}}}
}
7-6 校园竞赛-十位评委 (10分)
题目要求:
我们学院经常组织各项技能比赛,例如电脑文化节中Flash作品比赛,台下有10位评委来评判参赛者的作品,评委打分:0-100分的整数,参赛者最终得分是去掉一个最高分,去掉一个最低分,所剩分数的平均分。
要求设计一个软件,可以连续输入10位评委的成绩,并且可以无限次计算参赛者的成绩(提示,不退出即可继续输入下一批成绩)
输入格式:
90 100 80 70 65 86 77 89 91 73
输出格式:
100 65 82
import java.util.Scanner;
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sca = new Scanner(System.in);while(true){int[] score = new int[10];for(int i=0;i<score.length;i++){score[i] = sca.nextInt();}int min=score[0],max = score[0];for(int i = 1;i<score.length;i++){if(score[i]>max){max=score[i];}if(score[i]<min){min=score[i];}}System.out.println(max+" "+min);for(int i=1;i<score.length;i++){if(score[i]==max){score[i]=0;}if(score[i]==min){score[i]=0;}}int sum=0;for(int a:score){sum+=a;}System.out.println(sum/8);}}
}
7-2 jmu-Java-02基本语法-01-综合小测验 (10分)
运行程序后可以输入4个选项,分别为:fib,sort,search,getBirthDate
**fib:**根据输入n,打印斐波那契数列。比如输入:3,输出:1 1 2
sort:**输入一串数字,然后进行排序并输出,注意数组元素输出的格式为使用[ ]包括。提示:**可直接使用函数Arrays相关方法处理输出。
search:**如果找到返回所找到的位置,如果没找到,返回-1。提示:**可以先对数组排序,然后使用Arrays相关函数进行查找。
getBirthDate:输入n个身份证,然后把输入的n个身份号的年月日抽取出来,按年-月-日格式输出。
当输入不是这几个字符串(fib,sort,search,getBirthDate)的时候,显示exit并退出程序。
注意:在处理输入的时候,尽量全部使用Scanner的**nextLine()**方法接收输入,不要将nextLine()与其它next方法混用,否则可能会出现行尾回车换行未处理影响下次输入的情况。
参考:jdk文档的Arrays,String
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Scanner;
public class Main {public static int count=0;public static void fib(int n){int a=1;int b=1;if (n==1){System.out.println("1");return;}else if (n==2){System.out.println("1 1");return;}else if (n==0){return;} else {System.out.print("1 1 ");}int tem;for (int i=2;i<n-1;i++){tem=a+b;System.out.print(tem+" ");a=b;b=tem;}System.out.println(a+b);return;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int a[]=new int[1];while (true){String str=sc.nextLine();if (str.equals("fib")){count=0;int b=Integer.valueOf(sc.nextLine());fib(b);}else if (str.equals("sort")){String s[]=sc.nextLine().split(" ");a=new int[s.length];for (int i=0;i<s.length;i++){a[i]=Integer.valueOf(s[i]);}Arrays.sort(a);System.out.println(Arrays.toString(a));}else if (str.equals("search")){int b=Integer.valueOf(sc.nextLine());int flag=0;for (int i =0;i<a.length;i++){if (a[i]==b){flag=1;System.out.println(i);break;}}if (flag==0){System.out.println(-1);}}else if (str.equals("getBirthDate")){int time=Integer.valueOf(sc.nextLine());for (int i=0;i<time;i++){String bir=sc.nextLine();String bem=bir.substring(6,14);System.out.println(bir.substring(6,10)+"-"+bir.substring(10,12)+"-"+bir.substring(12,14));}}else {System.out.println("exit");}}}
}
7-8 jmu-Java-02基本语法-02-StringBuilder (10分)
输入3个整数n、begin、end。 首先,使用如下代码:
for(int i=0;i<n;i++)
将从0到n-1的数字拼接为字符串str。如,n=12,则拼接出来的字符串为01234567891011
最后截取字符串str从begin到end(包括begin,但不包括end)之间的字符串,并输出。
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca= new Scanner(System.in);while(sca.hasNext()){int n ;int begin;int end;n=sca.nextInt();begin =sca.nextInt();end = sca.nextInt();StringBuilder str = new StringBuilder("");for(int i = 0 ; i<n;i++){str.append(i);}System.out.println(str.subSequence(begin, end));}}
}
7-4 jmu-Java-02基本语法-03-身份证排序 (10分)
输入n,然后连续输入n个身份证号。
然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。
输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
输入sort2,将所有身份证按照里面的年月日升序输出。
注意:处理输入的时候,全部使用Scanner的**nextLine()**方法,以免出错。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
public class Main {public static void main(String[] args) throws ParseException {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.nextLine();String[] str = new String[n];List list = new ArrayList();for (int i = 0; i < str.length; i++) {str[i] = sc.nextLine();list.add(str[i].substring(6, 14));}Sort sort = new Sort();while (sc.hasNext("sort[12]")) {switch (sc.nextLine()) {case "sort1":Date[] dates = sort.sortShort(list, n);for (int i = 0; i < n; i++) {System.out.println(String.format("%tF", dates[i]));}break;case "sort2":sort.sortShort(list, n);sort.sortShort(str);break;}}sc.close();System.out.println("exit");}
}
class Sort {Date[] date;SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");Date[] sortShort(List list, int n) throws ParseException {date = new Date[n];for (int i = 0; i < n; i++) {date[i] = sdf.parse(list.get(i).toString());}for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - 1 - i; j++) {if (date[j].getTime() > date[j + 1].getTime()) {Date a = date[j + 1];date[j + 1] = date[j];date[j] = a;}}}return date;}void sortShort(String[] s) {for (int i = 0; i < s.length; i++) {for (int j = 0; j < s.length; j++) {if (s[j].substring(6, 14).equals(sdf.format(date[i]))) {System.out.println(s[j]);}}}}
}
7-10 jmu-Java-03面向对象基础-01-构造函数与toString (3分)
定义一个有关人的Person类,内含属性:
String name、int age、boolean gender、int id,所有的变量必须为私有(private)。 注意:属性顺序请严格按照上述顺序依次出现。
###1.编写无参构造函数:
打印"This is constructor"。
将name,age,gender,id按照name,age,gender,id格式输出
###2.编写有参构造函数 依次对name,age,gender赋值。
###3.覆盖toString函数: 按照格式:类名 [name=, age=, gender=, id=]输出。建议使用Eclipse自动生成.
###4.对每个属性生成setter/getter方法
###5.main方法中
首先从屏幕读取n,代表要创建的对象个数。
然后输入n行name age gender , 调用上面2编写的有参构造函数新建对象。
然后将刚才创建的所有对象逆序输出。
接下来使用无参构造函数新建一个Person对象,并直接打印该对象。
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int n = sca.nextInt();Person[] per = new Person[n];for(int i = 0 ; i < per.length ; i++){String name = sca.next();int age = sca.nextInt();boolean gender = sca.nextBoolean();per[i]=new Person(name,age,gender);}for(int j = per.length-1;j>=0;j--){System.out.println(per[j].toString());}Person person = new Person();}
}
class Person{private String name;private int age;private boolean gender;private int id;public Person() {System.out.println("This is constructor");System.out.println(name+","+age+","+gender+","+id);System.out.println("Person [name=" + name + ", age=" + age + ", gender=" + gender + ", id=" + id + "]");}public Person(String name, int age, boolean gender) {super();this.name = name;this.age = age;this.gender = gender;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", id=" + id + "]";}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean isGender() {return gender;}public void setGender(boolean gender) {this.gender = gender;}public int getId() {return id;}public void setId(int id) {this.id = id;}
}
7-11 jmu-Java-03面向对象基础-02-构造函数与初始化块 (5分)
##1.定义一个Person类 属性:name(String)、gender(boolean)、age(int)、id(int) ,所有的变量必须为私有(private)。
无参构造函数:Person(), 功能:打印This is constructor 。
有参构造函数:Person(name, gender, age) ,功能:给属性赋值。
建议:使用Eclipse自动生成toString方法
##2.定义类的初始化块 为Person类加入初始化块,在初始化块中对id属性赋值,并且要保证每次的值比上次创建的对象的值+1。然后在下一行打印This is initialization block, id is … 其中…是id的值。
提示:可为Person类定义一个static属性来记录所创建的对象个数。
##3.编写静态初始化块 打印This is static initialization block
##4.编写main方法
首先输入n,代表要创建的对象数量。
然后从控制台分别读取n行的name, gender, age, 并调用有参构造函数Person(name, age, gender)新建对象 。
将创建好的n个对象逆序输出(即输出toString()方法)。
使用无参构造函数新建一个Person对象,然后直接打印该对象。
##思考 初始化类与对象有几种方法,构造函数、初始化块、静态初始化块。这三种方法执行的先后顺序是什么?各执行几次。
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int n = sca.nextInt();Person [] per = new Person[n];for(int i=0;i<per.length;i++){String name = sca.next();int age = sca.nextInt();boolean gender = sca.nextBoolean();per[i]= new Person (name,age,gender);}for(int j = per.length-1;j>=0;j--){System.out.println(per[j].toString());}Person per1 = new Person();}
}
class Person
{private String name;private boolean gender ;private int age;private int id;static int num=0;static{System.out.println("This is static initialization block");}{id = num;num++;System.out.println("This is initialization block, id is "+id);}public Person(){System.out.println("This is constructor");System.out.println(name+","+age+","+gender+","+id);System.out.println("Person [name="+name+", age="+age+", gender="+gender+", id="+id+"]");}public Person(String name, int age,boolean gender) {super();this.name = name;this.gender = gender;this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", id=" + id + "]";}
}
7-12 jmu-Java-03面向对象基础-03-形状 (3分)
- 定义长方形类与圆形类Circle 长方形类-类名:Rectangle,private属性:int width,length
圆形类-类名:Circle,private属性:int radius
编写构造函数:
带参构造函数:Rectangle(width, length),Circle(radius)
编写方法:
public int getPerimeter(),求周长。
public int getArea(),求面积。
toString方法,使用Eclipse自动生成。
注意:
计算圆形的面积与周长,使用Math.PI。
求周长和面积时,应先计算出其值(带小数位),然后强制转换为int再返回。
##2. main方法
输入2行长与宽,创建两个Rectangle对象放入相应的数组。
输入2行半径,创建两个Circle对象放入相应的数组。
输出1:上面2个数组中的所有对象的周长加总。
输出2:上面2个数组中的所有对象的面积加总。
最后需使用Arrays.deepToString分别输出上面建立的Rectangle数组与Circle数组
思考:如果初次做该题会发现代码冗余严重。使用继承、多态思想可以大幅简化上述代码。
import java.util.Arrays;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int width;int length;int radius;Rectangle [] rec = new Rectangle[2];Circle [] cir = new Circle[2];for(int i = 0;i<2;i++){width =sca.nextInt();length = sca.nextInt();rec[i] = new Rectangle(width,length);}for(int i = 0;i<2;i++){radius = sca.nextInt();cir[i] = new Circle(radius);}int PerimeterSum = 0;int AreaSum = 0;for(int i = 0;i<2;i++){PerimeterSum += rec[i].getPerimeter()+cir[i].getPerimeter();AreaSum += rec[i].getArea() + cir[i].getArea();}System.out.println(PerimeterSum);System.out.println(AreaSum);System.out.println(Arrays.deepToString(rec));System.out.println(Arrays.deepToString(cir));}
}
class Rectangle
{private int width;private int length;public Rectangle(int width, int length) {super();this.width = width;this.length = length;}public int getPerimeter(){return 2*(width+length);}public int getArea(){return width*length;}@Overridepublic String toString() {return "Rectangle [width=" + width + ", length=" + length + "]";}
}
class Circle
{private int radius;public Circle(int radius) {super();this.radius = radius;}public int getPerimeter(){return (int)(2*(Math.PI)*radius);}public int getArea(){return (int)(Math.PI*radius*radius);}@Overridepublic String toString() {return "Circle [radius=" + radius + "]";}
}
7-13 jmu-Java-03面向对象基础-05-覆盖 (3分)
Java每个对象都继承自Object,都有equals、toString等方法。
现在需要定义PersonOverride类并覆盖其toString与equals方法。
###1. 新建PersonOverride类
a. 属性:String name、int age、boolean gender,所有的变量必须为私有(private)。
b. 有参构造函数,参数为name, age, gender
c. 无参构造函数,使用this(name, age,gender)调用有参构造函数。参数值分别为"default",1,true
d.toString()方法返回格式为:name-age-gender
e. equals方法需比较name、age、gender,这三者内容都相同,才返回true.
###2. main方法 2.1 输入n1,使用无参构造函数创建n1个对象,放入数组persons1。
2.2 输入n2,然后指定name age gender。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在,如果不存在,才将该对象放入数组persons2。
2.3 输出persons1数组中的所有对象
2.4 输出persons2数组中的所有对象
2.5 输出persons2中实际包含的对象的数量
2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));输出PersonOverride的所有构造函数。
提示:使用ArrayList代替数组大幅复简化代码,请尝试重构你的代码。
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Arrays;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int n1 = sca.nextInt();PersonOverride[] person1 = new PersonOverride[n1];for(int i = 0 ; i<n1;i++){person1[i] = new PersonOverride();System.out.println(person1[i].toString());}int n2= sca.nextInt();ArrayList<PersonOverride> person2 = new ArrayList<PersonOverride>();for(int i = 0 ; i < n2 ; i++){PersonOverride a = new PersonOverride(sca.next(),sca.nextInt(),sca.nextBoolean());if(!person2.contains(a)){person2.add(a);System.out.println(a.toString());}}System.out.println(person2.size());System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));}
}
class PersonOverride{private String name;private int age;private boolean gender;public PersonOverride() {name="default";age =1;gender = true;}public PersonOverride(String name, int age, boolean gender) {super();this.name = name;this.age = age;this.gender = gender;}@Overridepublic String toString() {return name+"-"+age+"-"+gender;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;PersonOverride other = (PersonOverride) obj;if (age != other.age)return false;if (gender != other.gender)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}
}
7-5 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (15分)
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
class Person{ private String name = null;private int age = 0;private boolean gender = false; public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean isGender() {return gender;}public void setGender(boolean gender) {this.gender = gender;}public Person(String n, int a, boolean g) { this.name = n;this.age = a;this.gender = g;}@Overridepublic String toString() {return name+"-"+age+"-"+gender ;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (age != other.age)return false;if (gender != other.gender)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}
}
class Student extends Person{String stuNo; String clazz;public Student(String n, int a, boolean g,String stuNo, String clazz) {super(n, a, g);this.stuNo=stuNo;this.clazz=clazz;// TODO Auto-generated constructor stub}@Overridepublic String toString() {return super.toString()+"-"+stuNo+"-"+clazz ;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (!super.equals(obj))return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;if (clazz == null) {if (other.clazz != null)return false;} else if (!clazz.equals(other.clazz))return false;if (stuNo == null) {if (other.stuNo != null)return false;} else if (!stuNo.equals(other.stuNo))return false;return true;}}class Company{String name;public Company(String name) {this.name = name;}@Overridepublic String toString() {return name;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Company other = (Company) obj;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}class Employee extends Person{int age; boolean gender; double salary; Company company;public Employee(String n, int age, boolean gender, double salary, Company company) {super(n, age, gender);this.age = age;this.gender = gender;this.salary = salary;this.company = company;}@Overridepublic String toString() {return super.toString()+"-"+company+"-"+salary;}DecimalFormat df = new DecimalFormat("#.#");@Overridepublic boolean equals(Object obj) {if(super.equals(obj)==true) {Employee other = (Employee)obj;if(this.company.toString()==null||other.company.toString()==null) {return false;}String df1 = new DecimalFormat("#.#").format(this.salary);String df2 = new DecimalFormat("#.#").format(other.salary);if(this.company.toString().compareTo(other.company.toString())==0&&df1.compareTo(df2)==0) {return true;}}return false;}}public class Main{public static void main(String[] args) {String name;int age;boolean gender;String stuNo;String clazz;double salary; String company;Scanner sc=new Scanner(System.in);List<Person> personList=new ArrayList <>();ArrayList<Student> students = new ArrayList<Student>();ArrayList<Employee> employees = new ArrayList<Employee>();while(true) {String c =sc.next();if(c.compareTo("s")==0) {name=sc.next();age=sc.nextInt();gender=sc.nextBoolean();stuNo=sc.next();clazz=sc.next();Person stu=new Student(name ,age ,gender ,stuNo ,clazz);personList.add(stu);}else if(c.compareTo("e")==0) {name=sc.next();age=sc.nextInt();gender=sc.nextBoolean();salary = sc.nextDouble();company = sc.next();Company company2 = new Company(company);Person emp=new Employee(name, age, gender, salary, company2);personList.add(emp);}else {personList.sort(Comparator.comparing(Person::getName).thenComparing(Person::getAge)); for (int i=0;i<personList.size();i++) {if (personList.get(i) instanceof Student) {System.out.println("Student:"+personList.get(i).toString());int flag = 0;for(int j=0;j<students.size();j++) {if(students.get(j).equals(personList.get(i))) {flag=1;break;}}if(flag == 0) {students.add((Student) personList.get(i));}}else {System.out.println("Employee:"+personList.get(i).toString());int flag = 0;for(int j=0;j<employees.size();j++) {if(employees.get(j).equals(personList.get(i))) {flag = 1;break;}}if(flag == 0) {employees.add((Employee)personList.get(i));}}}String tempString = sc.next();if(tempString.compareTo("exit")==0||tempString.compareTo("return")==0) {return;}System.out.println("stuList");for(int i=0;i<students.size();i++) {System.out.println("Student:"+students.get(i).toString());}System.out.println("empList");for(int i=0;i<employees.size();i++) {System.out.println("Employee:"+employees.get(i).toString());}}}}}
7-15 消失的车 (10分)
飞驰而过的车,它的车牌是由一个四位数构成的,只有3个路人看到它
甲说:它的前两位是一样的
乙说:它的后两位是一样的,但是和它的前两位不一样
丙说:它是一个数的平方
请你根据路人甲乙丙的叙述,写一个程序,算出该车牌号
public class Main{public static void main(String[] args) {int r1,r2,r3,r4,r5;for(int i=1000;i<=9999;i++){r1 = i/1000;r2 = i/100%10;r3 = i/10%10;r4 = i%10; r5 = (int)Math.sqrt(i);if(r2!=r3 && r1==r2 && r3==r4 && r5==Math.sqrt(i) ){System.out.println("车牌号码是"+i);break;} }}}
7-16 判断回文 (10分)
输入一个以回车符为结束标志的字符串(少于80个字符),判断该字符串是否为回文。 回文就是字符串中心对称,如“abcba”、“abccba”是回文,“abcdba”不是回文。
输入格式:
输入一个以回车符为结束标志的字符串(少于80个字符)
输出格式:
为回文,输出yes; 非回文,输出no,注意输出的结果后面有回车符
import java.util.Scanner;
public class Main{public static void main(String[] args) {Scanner sca = new Scanner(System.in);String str1 = sca.nextLine();String str2 = new StringBuilder(str1).reverse().toString();if(str1.equals(str2)){System.out.println("yes");}else{System.out.println("no");}}}
7-17 我是升旗手 (10分)
一年一度的升旗手选拔又要到了,学校要求每个班级选出一位同学做升旗手的候选人。因 为升旗手对身高有严格的要求,所以班主任决定选班级里个子最高的同学(如果两位同学 一样高,则选任意一位)。你能很快地给老师答案么?
输入格式:
输入包括两行。 第一行:包括一个整数n,表示班级里共有n位同学。 第二行:包含n个三位数,表示每一位同学的身高。
输出格式:
输出身高最高的同学的身高。
import java.util.Scanner;
public class Main{public static void main(String[] args) {Scanner sca = new Scanner(System.in);int n = sca.nextInt();int max=0;for(int i = 0;i<n;i++){int j = sca.nextInt();if(j>max){max = j;}}System.out.println(max);}}
7-18 jmu-Java-04面向对象进阶-01-接口-Comparable (5分)
编写实现Comparable接口的PersonSortable类,使其按name以及age排序
#1.编写PersonSortable类 属性:private name(String)、private age(int)
有参构造函数:参数为name,age
toString函数:返回格式为:name-age
实现Comparable接口:实现先对name升序排序,如果name相同则对age进行升序排序
#2.main方法中
首先输入n
输入n行name age,并创建n个对象放入数组
对数组进行排序后输出。
最后一行使用System.out.println(Arrays.toString(PersonSortable.class.getInterfaces()));输出PersonSortable所实现的所有接口
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int n = sca.nextInt();List<PersonSortable> lists = new ArrayList<PersonSortable>();for(int i = 0;i<n;i++){String s = sca.next();int j = sca.nextInt();PersonSortable personSortable=new PersonSortable(s, j);lists.add(personSortable);}Collections.sort(lists);for(PersonSortable personSortable : lists){System.out.println(personSortable.toString());}System.out.println(Arrays.toString(PersonSortable.class.getInterfaces()));}
}
class PersonSortable implements Comparable<PersonSortable>
{private String name;private int age;public PersonSortable(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return name + "-" + age ;}@Overridepublic int compareTo(PersonSortable o) {int i = this.name.compareTo(o.name);if(i==0){i=this.age-o.age;}return i;}
}
7-19 jmu-Java-04面向对象进阶–02-接口-Comparator (5分)
Arrays.sort可以对所有实现Comparable的对象进行排序。但如果有多种排序需求,如有时候需对name进行降序排序,有时候只需要对年龄进行排序。使用Comparable无法满足这样的需求。可以编写不同的Comparator来满足多样的排序需求。
#1.编写PersonSortable2类 属性:private name(String)、private age(int)
有参构造函数:参数为name,age
toString方法:返回格式name-age
#2 编写Comparator类
编写NameComparator类,实现对name进行升序排序
编写AgeComparator类,对age进行升序排序
#3.main方法中
输入n
输入n行name age,并创建n个对象放入数组
对数组按照name进行升序排序后输出。
在3的基础上对数组按照age进行升序排序后输出。
最后最后两行使用如下代码输出NameComparator与AgeComparator所实现的所有接口。
System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int n = sca.nextInt();List<PersonSortable2> lists=new ArrayList<PersonSortable2>();for (int i = 0 ; i< n ; i ++){String name = sca.next();int age = sca.nextInt();PersonSortable2 personSortable2 = new PersonSortable2(name, age);lists.add(personSortable2);}Collections.sort(lists,new NameComparator());System.out.println("NameComparator:sort");for(PersonSortable2 personSortable2 : lists){System.out.println(personSortable2.toString());}Collections.sort(lists,new AgeComparator());System.out.println("AgeComparator:sort");for(PersonSortable2 personSortable2 : lists){System.out.println(personSortable2.toString());}System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));}
}
class PersonSortable2
{private String name;private int age;public PersonSortable2(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return name + "-" + age ;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
class NameComparator implements Comparator<PersonSortable2>
{@Overridepublic int compare(PersonSortable2 o1, PersonSortable2 o2) {int i = o1.getName().compareTo(o2.getName());return i;}
}
class AgeComparator implements Comparator<PersonSortable2>
{@Overridepublic int compare(PersonSortable2 o1, PersonSortable2 o2) {int i = o1.getAge()-o2.getAge();return i;}
}
7-3 jmu-Java-06异常-01-常见异常 (5分)
自己编码以产生常见异常。
###main方法:
事先定义好一个大小为5的数组。
根据屏幕输入产生相应异常
提示:可以使用System.out.println(e)打印异常对象的信息,其中e为捕获到的异常对象。
**输入说明: **
arr 代表产生访问数组是产生的异常。然后输入下标,如果抛出ArrayIndexOutOfBoundsException异常则显示,如果不抛出异常则不显示。
null,产生NullPointerException
cast,尝试将String对象强制转化为Integer对象,产生ClassCastException。
num,然后输入字符,转化为Integer,如果抛出NumberFormatException异常则显示。
其他,结束程序。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int [] arr = new int[5];while(true){String str = sca.next();if(str.equals("arr")){try{int i = arr[sca.nextInt()];}catch(Exception e){System.out.println(e);}}else if (str.equals("null")){String str2 = null;try{str2.equals(str);}catch(Exception e){System.out.println(e);}}else if(str.equals("cast")){Object obj = "a";try{Integer integer =(Integer)obj;}catch(Exception e){System.out.println(e);}}else if (str.equals("num")){String c = sca.next();try{Integer integer = Integer.valueOf(c);}catch(Exception e){System.out.println(e);}}else {break;}}}
}
7-21 jmu-Java-06异常-02-使用异常机制处理异常输入 (5分)
使用异常处理输入机制,让程序变得更健壮。
###main方法:
输入n,创建大小为n的int数组。
输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
使用Arrays.toString输出数组中的内容。
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner input=new Scanner(System.in);int n=input.nextInt();int[] arr=new int[n];for (int i = 0; i < n; ) {try {arr[i] = Integer.valueOf(input.next());i++;} catch (Exception e) {// TODO: handle exceptionSystem.out.println(e);}}System.out.println(Arrays.toString(arr));}
}
7-22 jmu-Java-06异常-03-throw与throws (10分)
前言
C语言中一般通过返回错误代码来表示一个函数执行是否有误。然而有的时候错误返回值可能与正常值相混淆。
Java中使用异常来表示程序运行中发生的错误。本实验的主要目的为了演示使用异常机制替代错误返回值。
import java.util.Scanner;
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sca = new Scanner(System.in);int n = sca.nextInt();double [] arr = new double[n];for(int i = 0 ;i<n;i++){arr[i]=sca.nextInt();}while(true){int begin,end;int m =0;ArrayUtils a[] =new ArrayUtils[100];a[m++]=new ArrayUtils();try{begin = Integer.parseInt(sca.next());end = Integer.parseInt(sca.next());}catch(NumberFormatException e){break;}try{System.out.println(a[m].findMax(arr, begin, end));}catch(IllegalArgumentException e){System.out.println(e.toString());}}try {System.out.println(ArrayUtils.class.getDeclaredMethod("findMax", double[].class,int.class,int.class));} catch (Exception e1) {} }
}
class ArrayUtils
{public static double findMax(double[] arr,int begin, int end) throws IllegalArgumentException{if(begin>=end) {throw new IllegalArgumentException("begin:"+begin+" >= end:"+end);}else if(begin<0){throw new IllegalArgumentException("begin:"+begin+" < 0");}else if(end>arr.length){throw new IllegalArgumentException("end:"+end+" > arr.length");}double max =0.0;for(int i = begin;i<=end-1 ;i++){if(arr[i]>max){max = arr[i];}}return max;}
}
7-23 jmu-Java-06异常-04-自定义异常(综合) (15分)
定义IllegalScoreException异常类,代表分数相加后超出合理范围的异常。该异常是checked exception,即希望该异常一定要被捕获处理。
定义IllegalNameException异常类,代表名字设置不合理的异常。该异常是unchecked exception
定义Student类。
属性:
private String name;
private int score;
方法:
toString //自动生成
setter/getter //自动生成
改造setName //如果姓名首字母为数字则抛出IllegalNameException
public int addScore(int score) //如果加分后分数<0 或>100,则抛出IllegalScoreException,加分不成功。
###main方法:
输入new则新建学生对象。然后输入一行学生数据,格式为姓名 年龄,接着调用setName,addScore。否则跳出循环。
setName不成功则抛出异常,并打印异常信息,然后继续下一行的处理。
addScore不成功则抛出异常,并打印异常信息,然后继续下一行的处理。如果2、3都成功,则打印学生信息(toString)
如果在解析学生数据行的时候发生其他异常,则打印异常信息,然后继续下一行的处理。
Scanner也是一种资源,希望程序中不管有没有抛出异常,都要关闭。关闭后,使用System.out.println(“scanner closed”)打印关闭信息
注意:使用System.out.println(e);打印异常信息,e为所产生的异常。
import java.util.Scanner;
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sca = new Scanner(System.in);while(true){String str = sca.nextLine();if(str.equals("new")){String s = sca.nextLine();String [] s1 = s.split(" ");if(s1.length == 2){String name = s1[0];int score = Integer.valueOf(s1[1]);Student student = new Student();student.setName(name);student.setScore(score);if(student.getFlag()==0){System.out.println(student);}}else{System.out.println("java.util.NoSuchElementException");}}else{break;}}sca.close();System.out.println("scanner closed");}
}
class IllegalScoreException extends Exception{public IllegalScoreException(){}public IllegalScoreException(String message){super(message);}public IllegalScoreException(String message,Throwable cause){super(message,cause);}public IllegalScoreException(Throwable cause){super(cause);}
}
class IllegalNameException extends Exception{public IllegalNameException() {}public IllegalNameException(String message) {super(message);}public IllegalNameException(String message, Throwable cause) {super(message, cause);}public IllegalNameException(Throwable cause) {super(cause);}
}
class Student
{private String name;private int score;private int flag=0;@Overridepublic String toString() {return "Student [name=" + name + ", score=" + score + "]";}public String getName() {return name;}public void setName(String name) {char c=name.charAt(0);if (c>='0'&&c<='9'){try {flag=1;throw new IllegalNameException();} catch (IllegalNameException e) {System.out.println("IllegalNameException: the first char of name must not be digit, name="+name);}return;}this.name = name;}public int getScore() {return score;}public void setScore(int score) {if (flag==1){return;}if (score<0||score>100){try {flag=1;throw new IllegalScoreException();} catch (IllegalScoreException e) {System.out.println("IllegalScoreException: score out of range, score="+score);}}this.score = score;}public int addScore(int score) {return 0;}public int getFlag() {return flag;}public void setFlag(int flag) {this.flag = flag;}
}
**
仅供参考,欢迎评论
**
厦理Java期末训练题【附带每题答案,非标准但可通过PTA】相关推荐
- php java 私钥 转换格式,php公钥私钥 3 ---非标准格式转换为标准格式
PHP RSA 报错 openssl_sign(): supplied key param cannot be coerced into a private key 私钥 private functi ...
- java期末考试复习题_java期末考试复习题库 试题题库.doc
java期末考试复习题库 试题题库 1 Java中对数据库查询结果集进行操作的对象是() ( A:Connection对象 B:Statement对象 C:DriverManager对象 D:Resu ...
- java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...
一.根据题意,填写出空格中的内容 Java平台包括三个技术方向,其中J2ME代表____________.J2SE代表___________.J2EE代表____________.2.面向对象的四大概 ...
- java期末判断题题库_(java期末考试选择题题库.doc
(java期末考试选择题题库 1.分析以下程序: 1)public class x{ 2)public static void main(String[]args){ 3)String ol=new ...
- java期末考试B卷题及答案,《JAVA程序设计》期末试题B卷
<JAVA程序设计>期末试题B卷 班级:_________________ 学号:_________________ 姓名:_________________任课教师:__________ ...
- 大一java期末考试模拟题,java期末考试模拟试题-final
java期末考试模拟试题-final <JAVA 语言程序设计>期末考试模拟试题 1 一.选择题( 每小题 1 分,共 10 分,注:选择答案可能不止一个正确) 1.编译 Java App ...
- java期末一般考什么内容_java期末考的大题都在这
<java期末考的大题都在这>由会员分享,可在线阅读,更多相关<java期末考的大题都在这(14页珍藏版)>请在人人文库网上搜索. 1.1按要求编写一个Java应用程序:(1) ...
- JAVA习题大全之java期末考试复习预测题一
JAVA习题大全 目录 JAVA习题大全 java期末考试复习预测题A java期末考试复习预测题B java期末考试复习预测题C java期末考试复习预测题D java期末考试复习预测题E java ...
- 福州大学java期末试卷,Java Web认证题.doc
Java Web认证题.doc 福州大学工程技术学院福州大学工程技术学院 04 级级 Web 应用程序设计应用程序设计Java 扬帆把舵,奋勇拼搏,看我扬帆把舵,奋勇拼搏,看我Java,英姿焕爽,英姿 ...
最新文章
- (Mark)操作系统原理
- 牛客16662 津津的储蓄计划
- torch tensor去掉1维_南昌清污机新价格表1_海腾水工
- 怎么把pdf转换为html,如何将PDF转换成HTML网页格式呢?
- Python库大全,建议收藏留用!
- 幅相曲线matlab,matlab开环幅相曲线
- 后端根据百度地图真实路径距离_百度地图开放平台介绍--路线规划
- 记录如何深度拷贝一个属性存在循环引用的对象
- 《绝地求生》外挂源代码被公布,或迎神仙大战时代?
- python smooth函数_利用Python程序完成ABAQUS中的一些重复性操作
- v​n​c​服​务​​安​装​与配置
- NBA30只球队2020年各队数据分析
- 为啥yum源repolist为0?自己经常出错和常用的解决办法
- 1.1版走迷宫小游戏(C++)
- 经典例题:编写一个程序,从键盘输入一串字符,统计这串字符中英文字母、数字、其他字符号的字符数。
- 本地生活O2O行业已经逐渐渗透到日常生活中
- Fiddler原理+雷电模拟器进行APP抓包
- c#获取公网的ip,本机ip 以及当前城市以及运营商
- Anaconda安装教程(超详细)
- C语言软件分层的方法,单片机程序分层设计思想
热门文章
- python学习 day49之CSS网页布局
- 摄像头视频推流python_python中用FFmpeg向rtmp服务器推流,实现摄像头直播
- .vdat文件怎么打开
- 【论文笔记】EMBEDDING ENTITIES AND RELATIONS FOR LEARN-ING AND INFERENCE IN KNOWLEDGE BASES
- CentOS 6.5下安装Confluence 5.4
- c++win32项目 如何显示后再删除一个绘图_iMATLAB 绘图扩展函数系列 | 让你绘图更自由(进阶专辑开篇)!...
- 统计100以内能被7整除的自然数c语言,编写程序,计算1到100中既能被3整除又能被7整除的所有数,并计算这些数的个数...
- Java日志框架 -- 日志框架介绍、日志门面技术、JUL日志(JUL架构、JUL入门示例、JUL日志级别、JUL日志的配置文件)
- 递归实现对多层嵌套的对象数组依照某属性进行排序
- android动画送礼物,Android开发仿映客送礼物效果