PTA练习 Java模拟题 编程题

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.RectangleCircle类均继承自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() //获得父类型;

注意:处理输入的时候使用混合使用nextIntnextLine需注意行尾回车换行问题。

思考

  1. 你觉得sumAllArea和sumAllPerimeter方法放在哪个类中更合适?
  2. 是否应该声明为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方法重要说明:

  1. 对Employee的company属性的比较。要考虑传入为null的情况。如果company不为null且传入为null,返回false
  2. 对所有String字符类型比较时,也要考虑null情况。

提示

  1. 排序可使用Collections.sort
  2. equals方法要考虑周全

main方法说明

  1. 创建若干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对象。

  1. 对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用Comparable<Person>Comparator<Person>

  2. 接受输入,如果输入为exitreturn退出程序,否则继续下面步骤。

  3. 将personList中的元素按照类型分别放到stuList与empList。注意:不要将两个内容相同的对象放入列表(是否相同是根据equals返回结果进行判定)。

  4. 输出字符串stuList,然后输出stuList中的每个对象。

  5. 输出字符串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;
②方法:

  1. double area(), 抽象方法;
  2. double perimeter(),抽象方法;
    (2)编写一个Shape类的子类Oval,表示椭圆对象,包含以下成员
    ①属性:
  3. a:私有,double型,长轴半径;
  4. b:私有,double型,短轴半径;
    ②方法:
  5. Oval(double a,double b), 构造方法,用参数设置椭圆的长轴半径和短轴半径
  6. Oval(),构造方法,将椭圆的长轴半径和短轴半径都初始化为0。
  7. double area(),重写Shape类中的area方法,返回椭圆的面积( )
  8. double perimeter(),重写Shape类中的perimeter方法,返回椭圆的周长( )
  9. public String toString( ),将把当前椭圆对象的转换成字符串形式,例如长轴半径为10.0,短轴半径为5,返回字符串"Oval(a:10.0,b:5.0)"。
    (3)编写公共类Main,实现如下功能
  10. 输入长轴半径和短轴半径,并创建一个椭圆对象;
  11. 分别用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 nameint ageboolean genderint 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方法:

  1. 输入n,创建大小为n的int数组。
  2. 输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
  3. 使用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();
	}
}

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值