7-1 各类字符数 (20 分)
从键盘输入一个字符串,程序输出该字符串中的大写英文字母数,小写英文字母数以及非英文字母数
输入格式:
字符串
输出格式:
大写英文字母数 小写英文字母数 非英文字母数
输入样例:
在这里给出一组输入。例如:
Hello My Dear Friend, I Miss You Very Much!
结尾无空行
输出样例:
在这里给出相应的输出。例如:
9
24
10
结尾无空行
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
int lowerCaseCount = 0;
int upperCaseCount = 0;
int unCaseCount = 0;
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c >= 'a' && c <= 'z') {
lowerCaseCount++;
}else if(c >= 'A' && c <= 'Z') {
upperCaseCount++;
}else {
unCaseCount++;
}
}
System.out.println(upperCaseCount);
System.out.println(lowerCaseCount);
System.out.println(unCaseCount);
}
}
7-2 编程题:判断闰年 (10 分)
根据输入的正整数y所代表的年份,计算输出该年份是否为闰年 闰年的判断标准:
能够被4整除且不能被100整除的年份
或者能够被400整除的年份
输入格式:
输入n取值范围是 【1..3000】
输出格式:
是闰年,输出 yes
非闰年,输出 no
输入样例:
在这里给出一组输入。例如:
100
结尾无空行
输出样例:
在这里给出相应的输出。例如:
no
结尾无空行
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = input.nextInt();
if(year>=1&&year<=3000){
if(year%400==0||year%4==0&&year%100!=0){
System.out.println("yes");
}
else{
System.out.println("no");
}
}
}
}
7-3 编程题:统计符合条件元素的个数 (8 分)
统计1...n的闭区间中,能够被3整除元素的奇数和偶数的个数
输入格式:
输入值n的范围是 【1..1000】
输出格式:
奇数个数,偶数个数
输入样例:
5
结尾无空行
输出样例:
1,0
结尾无空行
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int count=0;
int sum=0;
int number=0;
for(int i=1;i<=n;i++) {
if (i%3==0) {
sum=sum+1;
}
if (i%3==0&&i%2==0) {
count=count+1;
}
}
System.out.println((sum-count)+","+count);
}
}
7-4 字母图形 (15 分)
问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式:
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。数据规模与约定 1 <= n, m <= 26。
输出格式:
输出n行,每个m个字符,为你的图形。
输入样例:
在这里给出一组输入。例如:
5 7
结尾无空行
输出样例:
在这里给出相应的输出。例如:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
结尾无空行
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
char ch[][]=new char[50][50];
{
int i=0;
while (i<n) {
for(int j=0;j<m;j++) {
ch[i][j+i]= (char)('A'+j);
}
i++;
}
}
{
int i=0;
while (i<n-1) {
int j=1;
while (j<n) {
ch[j+i][i]=(char)('A'+j);
j++;
}
i++;
}
}
for(int i=0;i<n;i++)
{
int j=0;
while (j<m) {
System.out.print(ch[i][j]);
j++;
}
System.out.println();
}
}
}
7-5 分解质因数 (20 分)
求出区间[a,b]中所有整数的质因数分解。
输入格式:
输入两个整数a,b。数据规模和约定 2<=a<=b<=10000
输出格式:
每行输出一个数的分解,形如k=a1a2a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
输入样例:
在这里给出一组输入。例如:
3 10
结尾无空行
输出样例:
在这里给出相应的输出。例如:
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
结尾无空行
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer a = sc.nextInt();
Integer b = sc.nextInt();
for (int i = a; i <= b; i++) {
if (i >= 3) {
String m = "";
int k = 2;
int j = i;
while (j != k) {
if (j % k == 0) {
m = m + k + "*";
j = j / k;
}
else if (j % k != 0) {
k++;
}
}
m = m + k;
System.out.println(i + "=" + m);
} else {
System.out.println(i + "=" + i);
}
}
}
}
7-6 统计最大数出现次数 (20 分)
编写程序读取一系列整数,找出它们的最大数,然后计算该数的出现次数,假定输入以0结束。
输入格式:
在一行中输入待统计的整型数,各个数可以以一个或多个空格或回车分隔,以0结束。
输出格式:
以两行输出: 第一行格式:The largest number is 最大数 第二行格式:The occurrence count of the largest number is 出现次数
输入样例:
在这里给出一组输入。例如:
3 5 2 5 5 5 0
结尾无空行
输出样例:
在这里给出相应的输出。例如:
The largest number is 5
The occurrence count of the largest number is 4
结尾无空行
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int a=input.nextInt();
int max=a;
int count=1;
int i=1;
while(a!=0)
{
if(max<a)
{
max=a;
count=1;
}
else if(max==a)
{
if(i==1)
count=1;
else
count++;
}
a=input.nextInt();
i++;
}
System.out.println("The largest number is "+max);
System.out.println("The occurrence count of the largest number is "+count);
}
}
7-7 通过键盘输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 (10 分)
统计一行字符串中的英文字母个数、空格个数、数字个数、其他字符个数
输入格式:
通过键盘输入一行字符(任意字符)
输出格式:
统计一行字符串中的中英文字母个数、空格个数、数字个数、其他字符个数
输入样例:
rwrwewre2345asdJSJQI%^&(& *&sdf YY( 2342-k'
结尾无空行
输出样例:
字母个数:22
数字个数:8
空格个数:5
其他字符个数:10
结尾无空行
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int digital = 0;
int character = 0;
int other = 0;
int blank = 0;
char[] ch = null;
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
ch = s.toCharArray();
for(int i=0; i<ch.length; i++) {
if(ch[i] >= '0' && ch[i] <= '9') {
digital ++;
} else if((ch[i] >= 'a' && ch[i] <= 'z') || ch[i] > 'A' && ch[i] <= 'Z') {
character ++;
} else if(ch[i] == ' ') {
blank ++;
} else {
other ++;
}
}
System.out.println("字母个数:" +character);
System.out.println("数字个数:" +digital);
System.out.println("空格个数:" +blank);
System.out.println("其他字符个数:" +other );
}
}
7-8 sdust-Java-字符串集合求并集 (10 分)
从键盘接收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
结尾无空行
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String str;
int n1 = 0, n2 = 0;
String[] ans = new String[10];
String[] bns = new String[10];
while(cin.hasNext()){
str = cin.next();
if(n1 < 5){
int flag = 1;
for(int i=0; i<n1; i++){
if(str.compareTo(ans[i]) == 0) {
flag = 0;
break;
}
}
if(flag == 1) {
ans[n1++] = str;
}
} else if(n2 < 5) {
int flag = 1;
for(int i=0; i<n2; i++){
if(str.compareTo(bns[i]) == 0) {
flag = 0;
break;
}
}
if(flag == 1) {
bns[n2++] = str;
}
}
}
String[] cns = new String[15];
for(int i=0; i<n1; i++){
cns[i] = ans[i];
}
int counts = 5;
for(int i=0; i<n2; i++){
int flag = 1;
for(int j=0; j<n1; j++){
if(bns[i].compareTo(ans[j]) == 0) {
flag = 0;
break;
}
}
if(flag == 1) cns[counts++] = bns[i];
}
for(int i=0; i<counts-1; i++){
for(int j=i+1; j<counts; j++){
if(cns[i].compareTo(cns[j]) > 0){
String s = cns[i];
cns[i] = cns[j];
cns[j] = s;
}
}
}
for(int i=0; i<counts; i++){
System.out.println(cns[i]);
}
}
}
7-9 sdust-Java-学生成绩读取与排序 (10 分)
1)从键盘录入多行学生成绩的信息,每行表示一个学生的一门课的成绩,最后一行以“exit”结束。每行文本的格式为:学号,姓名,课程名,成绩。程序能够读取学生及其成绩,将具有相同学号的学生及其成绩读取到一个Student(学生类)类对象的列表(List)stuList中; 2)程序在读取完学生及其成绩的数据后,能够将stuList中的学生按照平均成绩降序排列(如果平均成绩相同,学号数字小的排在前面), 并输出排序后的学生学号、姓名和成绩。
输入格式:
多行表示的学生成绩,每一行是一个学生的姓名、学号、课程名、成绩(整数)。不同行可以是同一名学生(学号相同的为同一名学生)不同课程的成绩。
输出格式:
按照学生平均成绩降序排序(平均成绩相同的学号小的在前面)的学生排名(具体输出格式参照样例)。
输入样例:
小明,2001,Java,88
小刚,2002,Java,78
小丁,2003,Java,56
小宏,2004,Java,85
小明,2001,Python,84
小刚,2002,Python,98
小丁,2003,JavaWeb,66
小宏,2004,Algorithm,87
exit
结尾无空行
输出样例:
No1:2002,小刚
No2:2001,小明
No3:2004,小宏
No4:2003,小丁
结尾无空行
import java.util.*;
class Student implements Comparable<Student>{
private String name,id;
private int subject=1;
private int score;
private double sum=0;
Student(){}
Student(String name,String id,int score){
this.name=name;
this.id=id;
this.score=score;
}
public String getid(){
return this.id;
}
public void subjectadd() {
this.subject++;
}
public void scoreadd(int score){
this.score=this.score+score;
}
public String getname() {
return this.name;
}
public void sum() {
this.sum=this.score/this.subject;
}
public int compareTo(Student o1){
Student one = (Student) o1;
if(this.sum-one.sum!=0)
return (int)(one.sum-this.sum);
else
return this.id.compareTo(one.id);
}
}
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
List<Student> list =new ArrayList<Student>();
int i,flag=0;
String k;
String[] and =new String[5];
while(sc.hasNext())
{
k=sc.next();
and=k.split(",");
if(k.compareTo("exit")==0)
break;
for(i=0;i<list.size();i++)
{
if(list.get(i).getid().compareTo(and[1])==0)
{
flag=1;
break;
}
}
if(flag==1)
{
list.get(i).subjectadd();
list.get(i).scoreadd(Integer.parseInt(and[3]));
}
else
{
list.add(new Student(and[0],and[1],Integer.parseInt(and[3])));
}
flag=0;
}
for(i=0;i<list.size();i++)
list.get(i).sum();
Collections.sort(list);
for(i=0;i<list.size();i++)
{
System.out.println("No"+(i+1)+":"+list.get(i).getid()+","+list.get(i).getname());
}
}
}
7-10 jmu-Java-03面向对象基础-04-形状-继承 (15 分)
前言
前面题目形状中我们看到,为了输出所有形状的周长与面积,需要建立多个数组进行多次循环。这次试验使用继承与多态来改进我们的设计。
本题描述
1.定义抽象类Shape
属性:不可变静态常量double PI
,值为3.14
,
抽象方法:public double getPerimeter()
,public double getArea()
2.Rectangle与Circle类均继承自Shape类。
Rectangle类(属性:int width,length)、Circle类(属性:int radius)。
带参构造方法为Rectangle(int width,int length)
,Circle(int radius)
。toString
方法(Eclipse自动生成)
3.编写double sumAllArea
方法计算并返回传入的形状数组中所有对象的面积和与double sumAllPerimeter
方法计算并返回传入的形状数组中所有对象的周长和。
4.main方法
4.1 输入整型值n,然后建立n个不同的形状。如果输入rect,则依次输入宽、长。如果输入cir,则输入半径。
4.2 然后输出所有的形状的周长之和,面积之和。并将所有的形状信息以样例的格式输出。 提示:使用Arrays.toString
。
4.3 最后输出每个形状的类型与父类型.使用类似shape.getClass()
//获得类型, shape.getClass().getSuperclass()
//获得父类型;
注意:处理输入的时候使用混合使用nextInt
与nextLine
需注意行尾回车换行问题。
思考
- 你觉得sumAllArea和sumAllPerimeter方法放在哪个类中更合适?
- 是否应该声明为static?
输入样例:
4
rect
3 1
rect
1 5
cir
1
cir
2
输出样例:
38.84
23.700000000000003
[Rectangle [width=3, length=1], Rectangle [width=1, length=5], Circle [radius=1], Circle [radius=2]]
class Rectangle,class Shape
class Rectangle,class Shape
class Circle,class Shape
class Circle,class Shape
import java.util.Scanner;
abstract class Shape {
double PI = 3.14;
public abstract double getPerimeter();
public abstract double getArea();
}
class Rectangle extends Shape {
int wide, len;
Rectangle(int a, int b) {
wide = a;
len = b;
}
@Override
public double getPerimeter() {
return 2 * (wide + len);
}
@Override
public double getArea() {
return wide * len;
}
public String toString(){
return "[width=" + wide + ", length=" + len + "]";
}
}
class Circle extends Shape {
int radius;
Circle(int _radius) {
radius = _radius;
}
@Override
public double getPerimeter() {
return radius * 2 * PI;
}
@Override
public double getArea() {
return radius * radius * PI;
}
public String toString(){
return "[radius=" + radius + "]";
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.nextLine();
Shape A[] = new Shape[n];
int k = 0, j = 0;
double sumAllArea = 0, sumAllPerimeter = 0;
for (int i = 0; i < n; i++) {
String S = in.next();
if (S.equals("rect")) {
int wide = in.nextInt(), len = in.nextInt();
in.nextLine();
A[i] = new Rectangle(wide, len);
} else if (S.equals("cir")) {
int radius = in.nextInt();
in.nextLine();
A[i] = new Circle(radius);
}
sumAllArea += A[i].getArea();
sumAllPerimeter += A[i].getPerimeter();
}
System.out.println(sumAllPerimeter);
System.out.println(sumAllArea);
System.out.print("[");
for (int i = 0; i < n; i++) {
if(i != 0)
System.out.print(", ");
if (A[i] instanceof Rectangle) {
System.out.print("Rectangle ");
System.out.print(A[i].toString());
}
else {
System.out.print("Circle ");
System.out.print(A[i].toString());
}
}
System.out.println("]");
for(int i = 0;i < n;i++) {
if(A[i] instanceof Rectangle) {
System.out.println("class Rectangle,class Shape");
}else {
System.out.println("class Circle,class Shape");
}
}
in.close();
}
}
7-11 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (15 分)
定义Person抽象类,Student类、Company类,Employee类。
Person类的属性:String name, int age, boolean gender
Person类的方法:
public Person(String name, int age, boolean gender);
public String toString(); //返回"name-age-gender"格式的字符串
public boolean equals(Object obj);//比较name、age、gender,都相同返回true,否则返回false
Student类继承自Person
,属性:String stuNo, String clazz
Student类的方法:
//建议使用super复用Person类的相关有参构造函数
public Student(String name, int age, boolean gender, String stuNo, String clazz);
public String toString(); //返回 “Student:person的toString-stuNo-clazz”格式的字符串
public boolean equals(Object obj);//首先调用父类的equals方法,如果返回true,则继续比较stuNo与clazz。
Company类属性:String name
Company类方法:
public Company(String name);
public String toString(); //直接返回name
public boolean equals(Object obj);//name相同返回true
Employee类继承自Person
,属性:Company company, double salary
Employee类方法:
//建议使用super复用Person类的相关有参构造函数
public Employee(String name, int age, boolean gender, double salary, Company company);
public String toString(); //返回"Employee:person的toString-company-salary"格式的字符串
public boolean equals(Object obj);//首先调用父类的equals方法,如果返回true。再比较company与salary。
//比较salary属性时,使用DecimalFormat df = new DecimalFormat("#.#");保留1位小数
编写equals方法重要说明:
- 对Employee的company属性的比较。要考虑传入为
null
的情况。如果company不为null且传入为null,返回false - 对所有String字符类型比较时,也要考虑
null
情况。
提示
- 排序可使用Collections.sort
- equals方法要考虑周全
main方法说明
- 创建若干Student对象、Employee对象。
输入s
,然后依次输入name age gender stuNo clazz
创建Student对象。
输入e
,然后依次输入name age gender salary company
创建Employee对象。
然后将创建好的对象放入List<Person> personList
。输入其他字符,则结束创建。
创建说明: 对于String类型,如果为null
则不创建对象,而赋值为null
。对于company属性,如果为null则赋值为null
,否则创建相应的Company对象。
-
对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用
Comparable<Person>
或Comparator<Person>
-
接受输入,如果输入为
exit
则return
退出程序,否则继续下面步骤。 -
将personList中的元素按照类型分别放到stuList与empList。注意:不要将两个内容相同的对象放入列表(是否相同是根据equals返回结果进行判定)。
-
输出字符串
stuList
,然后输出stuList中的每个对象。 -
输出字符串
empList
,然后输出empList中的每个对象。
1-3
为一个测试点 4-6
为一个测试点
输入样例:
s zhang 23 false 001 net15
e wang 18 true 3000.51 IBM
s zhang 23 false 001 net15
e bo 25 true 5000.51 IBM
e bo 25 true 5000.52 IBM
e bo 18 true 5000.54 IBM
e tan 25 true 5000.56 IBM
e tan 25 true 5000.51 IBM
s wang 17 false 002 null
s wang 17 false 002 null
e hua 16 false 1000 null
s wang 17 false 002 net16
e hua 16 false 1000 null
e hua 18 false 1234 MicroSoft
!
continue
输出样例:
Employee:bo-18-true-IBM-5000.54
Employee:bo-25-true-IBM-5000.51
Employee:bo-25-true-IBM-5000.52
Employee:hua-16-false-null-1000.0
Employee:hua-16-false-null-1000.0
Employee:hua-18-false-MicroSoft-1234.0
Employee:tan-25-true-IBM-5000.56
Employee:tan-25-true-IBM-5000.51
Student:wang-17-false-002-null
Student:wang-17-false-002-null
Student:wang-17-false-002-net16
Employee:wang-18-true-IBM-3000.51
Student:zhang-23-false-001-net15
Student:zhang-23-false-001-net15
stuList
Student:wang-17-false-002-null
Student:wang-17-false-002-net16
Student:zhang-23-false-001-net15
empList
Employee:bo-18-true-IBM-5000.54
Employee:bo-25-true-IBM-5000.51
Employee:hua-16-false-null-1000.0
Employee:hua-18-false-MicroSoft-1234.0
Employee:tan-25-true-IBM-5000.56
Employee:tan-25-true-IBM-5000.51
Employee:wang-18-true-IBM-3000.51
import java.text.DecimalFormat;
import java.util.*;
abstract class Person{
private String name, c;
private int age;
private boolean gender;
public String getName() {
return name;
}
public String getC() {
return c;
}
public int getAge() {
return age;
}
public boolean isGender() {
return gender;
}
public Person(String c, String name, int age, boolean gender) {
this.c = c;
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public String toString() {
return name + "-" + age + "-" + gender;
}
@Override
public boolean equals(Object obj) {
Person per = (Person) obj;
if(per.name == null || this.name == null) {
return false;
}
return (per.name.compareTo(this.name) == 0 && per.age == this.age && per.gender == this.gender );
}
}
class Student extends Person{
private String stuNo;
private String clazz;
public Student(String c, String name, int age, boolean gender, String stuNo, String clazz) {
super(c, name, age, gender);
this.stuNo = stuNo;
this.clazz = clazz;
}
@Override
public String toString(){
return super.toString() + "-" + stuNo + "-" + clazz;
}
@Override
public boolean equals(Object obj) {
Student per = (Student)obj;
if(super.equals(obj)) {
if(per.stuNo == null || per.clazz == null || this.stuNo == null || this.clazz == null) {
return false;
}
return (per.stuNo.compareTo(this.stuNo) == 0 && per.clazz.compareTo(this.clazz) == 0);
}
return false;
}
}
class Company{
private String name;
public Company(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
@Override
public 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{
private Company company;
private double salary;
public Employee(String c, String name, int age, boolean gender, double salary, Company company) {
super(c, name, age, gender);
this.salary = salary;
this.company = company;
}
@Override
public String toString() {
return super.toString() + "-" + company.toString() + "-" + salary;
}
@Override
public boolean equals(Object obj) {
if(super.equals(obj)) {
Employee per = (Employee)obj;
if(this.company.toString() == null || per.company.toString() == null) {
return false;
}
String newpersalary = new DecimalFormat("#.#").format(per.salary);
String newthissalary = new DecimalFormat("#.#").format(this.salary);
return (per.company.toString().compareTo(this.company.toString()) == 0 && newpersalary.compareTo(newthissalary) == 0);
}
return false;
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String c, name, stuNo, clazz, companyname, str;
int age;
boolean gender;
double salary;
ArrayList<Person> personList = new ArrayList<Person>();
ArrayList<Student> studentList = new ArrayList<Student>();
ArrayList<Employee> employeeList = new ArrayList<Employee>();
while(true) {
c = input.next();
if(c.compareTo("s") == 0) {
name = input.next();
age = input.nextInt();
gender = input.nextBoolean();
stuNo = input.next();
clazz = input.next();
Student student = new Student(c, name, age, gender, stuNo, clazz);
personList.add(student);
}
else if(c.compareTo("e") == 0) {
name = input.next();
age = input.nextInt();
gender = input.nextBoolean();
salary = input.nextDouble();
companyname = input.next();
Company company = new Company(companyname);
Employee employee = new Employee(c, name, age, gender, salary, company);
personList.add(employee);
}
else {
personList.sort(Comparator.comparing(Person::getName).thenComparingInt(Person::getAge));
for(int i = 0; i < personList.size(); ++i) {
if(personList.get(i).getC().compareTo("s") == 0) {
System.out.println("Student:" + personList.get(i).toString());
int flag = 0;
for(int j = 0; j < studentList.size(); ++j) {
if(studentList.get(j).equals(personList.get(i))) {
flag = 1;
break;
}
}
if(flag == 0) {
studentList.add((Student)personList.get(i));
}
}
else if(personList.get(i).getC().compareTo("e") == 0){
System.out.println("Employee:" + personList.get(i).toString());
int flag = 0;
for(int j = 0; j < employeeList.size(); ++j) {
if(employeeList.get(j).equals(personList.get(i))) {
flag = 1;
break;
}
}
if(flag == 0) {
employeeList.add((Employee)personList.get(i));
}
}
}
str = input.next();
if(str.compareTo("exit") == 0 || str.compareTo("return") == 0) {
return;
}
System.out.println("stuList");
for(int i = 0; i < studentList.size(); ++i) {
System.out.println("Student:" + studentList.get(i).toString());
}
System.out.println("empList");
for(int i = 0; i < employeeList.size(); ++i) {
System.out.println("Employee:" + employeeList.get(i).toString());
}
}
}
}
}
7-12 程序改错题2 (5 分)
程序改错题。以下代码存在错误,请修改后提交。
public class Main { public static void main(String[] args) { Animal animal = new Dog(); animal.shout(); animal.run(); } } class Animal { void shout() { System.out.println("animal shout!"); } } class Dog extends Animal { void shout() { super.shout(); System.out.println("wangwang……"); } void run() { System.out.println("Dog is running"); } }
输入格式:
输出格式:
输入样例:
无
结尾无空行
输出样例:
animal shout!
wangwang……
Dog is running
结尾无空行
public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
animal.shout();
((Dog) animal).run();
}
}
class Animal {
void shout() {
System.out.println("animal shout!");
}
}
class Dog extends Animal {
@Override
void shout() {
super.shout();
System.out.println("wangwang……");
}
void run() {
System.out.println("Dog is running");
}
}
7-13 程序填空题3 (5 分)
参照输出样例补全以下程序,使程序输出结果与输出样例一致。
public class Main { public static void main(String[] args) { Son son = new Son(); son.method(); } } class Parent { Parent() { System.out.println("Parent's Constructor without parameter"); } Parent(boolean b) { System.out.println("Parent's Constructor with a boolean parameter"); } public void method() { System.out.println("Parent's method()"); } } class Son extends Parent { //补全本类定义 }
输入格式:
无
输出格式:
无
输入样例:
结尾无空行
输出样例:
Parent's Constructor with a boolean parameter
Son's Constructor without parameter
Son's method()
Parent's method()
结尾无空行
public class Main {
public static void main(String[] args) {
Son son = new Son();
son.method();
}
}
class Parent {
Parent() {
System.out.println("Parent's Constructor without parameter");
}
Parent(boolean b) {
System.out.println("Parent's Constructor with a boolean parameter");
}
public void method() {
System.out.println("Parent's method()");
}
}
class Son extends Parent {
private static boolean b;
Son()
{
super(b);
System.out.println("Son's Constructor without parameter");
}
public void method() {
System.out.println("Son's method()");
System.out.println("Parent's method()");
}
}
7-14 设计一个Shape及其子类Oval (20 分)
编写一个完整的Java Application 程序。包含类Shape、类Oval、类ShapeTest,具体要求如下:
(1)编写一个抽象类Shape表示形状对象,包含以下成员
①属性:
PI:double型常数,值为3.1415926;
②方法:
- double area(), 抽象方法;
- double perimeter(),抽象方法;
(2)编写一个Shape类的子类Oval,表示椭圆对象,包含以下成员
①属性: - a:私有,double型,长轴半径;
- b:私有,double型,短轴半径;
②方法: - Oval(double a,double b), 构造方法,用参数设置椭圆的长轴半径和短轴半径
- Oval(),构造方法,将椭圆的长轴半径和短轴半径都初始化为0。
- double area(),重写Shape类中的area方法,返回椭圆的面积( )
- double perimeter(),重写Shape类中的perimeter方法,返回椭圆的周长( )
- public String toString( ),将把当前椭圆对象的转换成字符串形式,例如长轴半径为10.0,短轴半径为5,返回字符串"Oval(a:10.0,b:5.0)"。
(3)编写公共类Main,实现如下功能 - 输入长轴半径和短轴半径,并创建一个椭圆对象;
- 分别用area和perimeter方法,求出以上椭圆的面积和宽度并输出,输出过程中要求使用到toString方法,输出格式如下:
输入格式:
输入长轴半径和短轴半径
输出格式:
输出椭圆的面积和周长。
输入样例:
8 6
输出样例:
在这里给出相应的输出。例如:
The area of Oval(a:8.0,b:6.0) is 150.79644480000002
The perimeterof Oval(a:8.0,b:6.0) is 44.42882862370954
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double m = sc.nextDouble();
double n = sc.nextDouble();
Oval oval = new Oval(m, n);
System.out.println("The area of " + oval + " is " + oval.area());
System.out.println("The perimeterof " + oval + " is " + oval.perimeter());
}
}
abstract class Shape {
protected static final double PI = 3.1415926;
abstract double area();
abstract double perimeter();
}
class Oval extends Shape {
private double a;
private double b;
public Oval(double a, double b) {
this.a = a;
this.b = b;
}
public Oval() {
a = 0;
b = 0;
}
@Override
public double area() {
return PI * a * b;
}
@Override
public double perimeter() {
return 2 * PI * Math.sqrt((a * a + b * b) / 2);
}
@Override
public String toString() {
return "Oval(a:" + a + ",b:" + b + ")";
}
}
7-15 USB接口的定义 (10 分)
定义一个USB接口,并通过Mouse和U盘类实现它,具体要求是:
1.接口名字为USB,里面包括两个抽象方法:
void work();描述可以工作
void stop(); 描述停止工作
2.完成类Mouse,实现接口USB,实现两个方法:
work方法输出“我点点点”;
stop方法输出 “我不能点了”;
3.完成类UPan,实现接口USB,实现两个方法:
work方法输出“我存存存”;
stop方法输出 “我走了”;
4测试类Main中,main方法中
定义接口变量usb1 ,存放鼠标对象,然后调用work和stop方法
定义接口数组usbs,包含两个元素,第0个元素存放一个Upan对象,第1个元素存放Mouse对象,循环数组,对每一个元素都调用work和stop方法。
输入格式:
输出格式:
输出方法调用的结果
输入样例:
在这里给出一组输入。例如:
结尾无空行
输出样例:
在这里给出相应的输出。例如:
我点点点
我不能点了
我存存存
我走了
我点点点
我不能点了
结尾无空行
public class Main {
public static void main(String[] args) {
Mouse usb1=new Mouse();
usb1.work();
usb1.stop();
USB usbs[]=new USB[2];
usbs[0]=new UPan();
usbs[0].work();
usbs[0].stop();
usbs[1]=new Mouse();
usbs[1].work();
usbs[1].stop();
}
}
interface USB{
void work();
void stop();
}
class Mouse implements USB{
public void work(){
System.out.println("我点点点");
}
public void stop(){
System.out.println("我不能点了");
}
}
class UPan implements USB{
public void work(){
System.out.println("我存存存");
}
public void stop(){
System.out.println("我走了");
}
}
7-16 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对象,并直接打印该对象。
输入样例:
3
a 11 false
b 12 true
c 10 false
输出样例:
Person [name=c, age=10, gender=false, id=0]
Person [name=b, age=12, gender=true, id=0]
Person [name=a, age=11, gender=false, id=0]
This is constructor
null,0,false,0
Person [name=null, age=0, gender=false, id=0]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
Person[] p=new Person[n];
for (int i = 0; i < n; i++) {
String a = sc.next();
int b= sc.nextInt();
boolean c = sc.nextBoolean();
p[i]=new Person(a,b,c);
}
for (int i = n-1; i >=0 ; i--) {
System.out.println(p[i].toString());
}
Person p1=new Person();
System.out.println(p1.toString());
}
}
class Person {
private String name;
private int age;
private boolean gender;
private int id;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public boolean isGender() {
return gender;
}
public int getId() {
return id;
}
public Person(){
System.out.println("This is constructor");
System.out.println(name+","+age+","+gender+","+id);
}
public Person(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public String toString(){
return "Person [name="+name+", age="+age+", gender="+gender+", id="+id+"]";
}
}
7-17 定义商品类,封装成员变量,输出对象 (10 分)
定义一个商品类。创建对象并按指定格式输出它。 商品类要求:
(1)成员变量:商品编号(String) 、商品名称(String)、商品单价(double)
(2)成员变量封装,定义为私有属性,并为每个成员变量定义getXXXX,setXXXX方法
(3)定义构造方法,要求带三个参数,参数值用于给成员变量赋值。
(4)重写toString()方法,将对象转换为字符串,格式:商品编号,商品名称,商品单价
测试类要求:
按指定的格式 输入商品信息,调用构造方法生成对象,并输出它。
例:输入:WJ002 记事本 5.5
输出:WJ002,记事本,5.5
输入商品的信息,每个属性值之间用1个空格分隔。 输出 格式,商品的每个属性值之间用逗号分隔。
输入样例:
WJ002 记事本 5.5
结尾无空行
输出样例:
WJ002,记事本,5.5
结尾无空行
import java.util.Scanner;
class stuff{
private String number;
private String name;
private double price;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
stuff(String number, String name,double price ) {
this.name = name;
this.number = number;
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String number = sc.next();
String name = sc.next();
double price = sc.nextDouble();
stuff a = new stuff(number, name, price);
System.out.print(a.getNumber()+","+a.getName()+","+a.getPrice());
}
}
7-18 定义类与创建对象 (10 分)
定义一个类Person,定义name和age属性,定义有参的构造方法对name和age进行初始化。在测试类中创建该类的2个对象,姓名、年龄分别为lili、19和lucy、20,在屏幕打印出2个对象的姓名和年龄。
输入格式:
本题目无输入
输出格式:
在一行中输出一个人的姓名和年龄
输入样例:
在这里给出一组输入。例如:
结尾无空行
输出样例:
在这里给出相应的输出。例如:
this person is lili,her age is 19
this person is lucy,her age is 20
结尾无空行
class Person{
String name;
int age;
Person(String n,int a){
name = n;
age=a;
}
}
public class Main{
public static void main(String args[]){
Person p1 = new Person("lili",19);
Person p2 = new Person("lucy",20);
System.out.println("this person is " +p1.name+ ",her age is " +p1.age);
System.out.println("this person is " +p2.name+ ",her age is " +p2.age);
}
}
7-19 jmu-Java-06异常-02-使用异常机制处理异常输入 (5 分)
使用异常处理输入机制,让程序变得更健壮。
main方法:
- 输入n,创建大小为n的int数组。
- 输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
- 使用
Arrays.toString
输出数组中的内容。
输入样例:
5
1
2
a
b
4
5
3
输出样例:
java.lang.NumberFormatException: For input string: "a"
java.lang.NumberFormatException: For input string: "b"
[1, 2, 4, 5, 3]
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n=scan.nextInt();
int a[]=new int[n];
int count=0;
while(count<n) {
try {
String temp=scan.next();
int i=Integer.parseInt(temp);
a[count++]=i;
}catch(Exception e) {
System.out.println(e);
}
}
System.out.println(Arrays.toString(a));
scan.close();
}
}
7-20 好玩的图形 (20 分)
给定图形接口定义如下: interface Shape{
float getArea();//求面积
float getPerimeter();//求周长
}
请实现以上接口,定义圆形类(用数字1表示)、矩形类(用数字2表示)。
从键盘输入图形类别(1代表圆,2代表矩形)和相应的参数,计算并输出相应图形的面积和周长,结果保留小数点后2位数据。
输入格式:
输入数据包含多行,第一行一个整数n,表示接下来共有n个图形对象需要生成。
每个图形数据占2行,第一行为数字1或2,表示图形类别,第二行为生成图形的参数。
输出格式:
每个图形对应的面积和周长。
输入样例:
2
1
1.0
2
1.0 2.0
结尾无空行
输出样例:
3.14 6.28
2.00 6.00
结尾无空行
import java.util.*;
interface Shape {
public float getArea();
public float getPerimeter();
}
class Circle implements Shape {
float radius;
public Circle(float radius) {
this.radius = radius;
}
public float getArea() {
float ans = (float) (Math.PI * radius * radius);
return (float) ans;
}
public float getPerimeter() {
float ans = (float) (2 * Math.PI * radius);
return (float) ans;
}
}
class Rectangle implements Shape {
float length, width;
public Rectangle(float length, float width) {
this.length = length;
this.width = width;
}
public float getArea() {
float ans = length * width;
return (float) ans;
}
public float getPerimeter() {
float ans = 2 * (length + width);
return (float) ans;
}
}
public class Main {
static public void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = 0; i < n; i++) {
int flag = input.nextInt();
if (flag == 1) {
float radius = input.nextFloat();
Circle c = new Circle(radius);
String ans1 = String.format("%.2f", c.getArea());
String ans2 = String.format("%.2f", c.getPerimeter());
System.out.println(ans1 + " " + ans2);
}
else {
float length = input.nextFloat();
float width = input.nextFloat();
Rectangle m = new Rectangle(length, width);
String ans1 = String.format("%.2f", m.getArea());
String ans2 = String.format("%.2f", m.getPerimeter());
System.out.println(ans1 + " " + ans2);
}
}
input.close();
}
}