(求几何形状的面积之和)编写一个方法,求数组中所有几何形状对象的面积之和。方法签名如下:
public static double sumArea(shape[] a)
编写测试程序,继承抽象类shape得到圆形类Circle和矩形类Rectangle。
abstract class shape {// 抽象类
/ 抽象方法 求面积 /
public abstract double getArea();
/ 抽象方法 求周长 /
public abstract double getPerimeter();
}
创建四个对象(两个圆和两个矩形)的数组,然后使用sumArea方法求出它们的总面积。(保留4位小数)
输入格式:
输入 1.1 (第1个圆形的半径) 1.8 (第2个圆形的半径) 2.3 3.8 (第1个矩形的宽和高) 5.9 16.8 (第2个矩形的宽和高)
输出格式:
The total area is 121.8401 (总面积,保留4位小数)
输入样例:
2.18
3.16
2.9 5.76
4.8 9.23
输出样例:
The total area is 107.3088
源代码
1 import java.util.Scanner;
2
3 abstract class shape {
4 public abstract double getArea();
5
6 public abstract double getPerimeter();
7 }
8
9 class Circle extends shape {
10 private double r;
11
12 public Circle(double r) {
13 this.r = r;
14 }
15
16 @Override
17 public double getArea() {
18 return Math.PI * r * r;
19 }
20
21 @Override
22 public double getPerimeter() {
23 return 2 * r * Math.PI;
24 }
25
26 }
27
28 class Rectangle extends shape {
29 private double side;
30 private double side1;
31
32 public Rectangle(double side, double side1) {
33 this.side = side;
34 this.side1 = side1;
35 }
36
37 @Override
38 public double getArea() {
39 return side * side1;
40 }
41
42 @Override
43 public double getPerimeter() {
44 return (side + side1) * 2;
45 }
46
47 }
48
49 public class Main {
50 public static double sumArea(shape[] a) {
51 double sum = 0;
52 for (int i = 0; i < a.length; i++) {
53 sum += a[i].getArea();
54 }
55 return sum;
56 }
57
58 public static void main(String[] args) {
59 Scanner in = new Scanner(System.in);
60 shape[] a = new shape[4];
61 double r = in.nextDouble();
62 a[0] = new Circle(r);
63 r = in.nextDouble();
64 a[1] = new Circle(r);
65
66 double w = in.nextDouble();
67 double h = in.nextDouble();
68 a[2] = new Rectangle(w, h);
69 w = in.nextDouble();
70 h = in.nextDouble();
71 a[3] = new Rectangle(w, h);
72
73 in.close();
74 System.out.println(String.format("The total area is " + "%.4f", sumArea(a)));
75
76 }
77 }
5-2 数字格式异常 (10分)
(NumberFormatException数字格式异常)编写一个程序,提示用户读取两个整数,然后显示他们的和。程序应该在输入不正确时提示用户再次输入数字。
输入格式:
i 9 (第1次输入) l 8 (第2次输入) 5 6 (第3次输入)
输出格式:
Incorrect input and re-enter two integers: (第1次输出提示) Incorrect input and re-enter two integers: (第2次输出提示) Sum is 11 (输出结果)
输入样例:
i 9
l 8
5 6
输出样例:
Incorrect input and re-enter two integers:
Incorrect input and re-enter two integers:
Sum is 11
源代码:
1 import java.util.InputMismatchException;
2 import java.util.Scanner;
3 import java.text.DecimalFormat;
4
5 public class Main {
6 public static void main(String[] args) {
7 Scanner in =new Scanner(System.in);
8 int m,n;
9 while(true){
10 try{
11 m=in.nextInt();
12 n=in.nextInt();
13 System.out.println("Sum is "+(m+n));
14 break;
15
16 }catch(InputMismatchException e){
17 System.out.println("Incorrect input and re-enter two integers:");
18 in.nextLine();
19 continue;
20 }
21 }
22 }
23 }
5-3 查找成绩并折算后输出 (10分)
文件:期中考试成绩.txt中有若干学生的姓名和数学期中考试成绩。 Smith 67 Anderson 75 Lewis 83 Cook 58 David 96 请你编写一个简单的查询成绩程序,当从键盘输入一个姓名时查找到他的数学期中考试分数并按照21%折算后输出。如果没找到则显示Not found. 由于目前的OJ系统暂时不能支持用户读入文件,我们编写程序从键盘输入文件中的姓名和成绩,当输入的名字为noname时,表示结束。noname后面有一个名字,需要查找其成绩。
输入格式:
Smith 67
Anderson 75
Lewis 83
Cook 58
David 96
noname (表示结束)
Bill
输出格式:
Not found.
输入样例:
Smith 67
Anderson 75
Lewis 83
Cook 58
David 96
noname
Lewis
输出样例:
17.43
源代码:
1 import java.util.HashMap;
2 import java.util.Map;
3 import java.util.Scanner;
4
5 public class Main4 {
6
7 public static void main(String[] args) {
8 Map<String,String> phone = new HashMap<String,String>();
9 Scanner in = new Scanner(System.in);
10 while(true) {
11 String name = in.next();
12 if(name.equals("noname")) {
13 break;
14 }
15 String phoneNumber = in.next();
16 phone.put(name, phoneNumber);
17 }
18 String s = in.next();
19 if(!phone.containsKey(s)) {
20 System.out.println("Not Found。");
21 }
22 else{
23 System.out.println(phone.get(s));
24 }
25 in.close();
26 }
27 }
5-4 找素数 (10分)
请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数。
输入格式:
第一个整数为m,第二个整数为n;中间使用空格隔开。例如:
103 3
输出格式:
从小到大输出找到的等于或大于m的n个素数,每个一行。例如:
103
107
109
输入样例:
9223372036854775839 2
输出样例:
9223372036854775907
9223372036854775931
源代码:
1 import java.math.BigInteger;
2 import java.util.Scanner;
3 public class Main {
4 public static void main(String[] args){
5 Scanner in = new Scanner(System.in);
6 BigInteger m;
7 int n;
8
9 m=in.nextBigInteger();
10 n=in.nextInt();
11 int cnt=0;
12 while (cnt<n){
13 if (m.isProbablePrime(100)){
14 System.out.println(m);
15 cnt++;
16 }
17 m=m.nextProbablePrime();
18 }
19 in.close();
20 }
21 }
5-5 计算正五边形的面积和周长 (10分)
从下列的抽象类shape类扩展出一个正五边形(regular pentagon)类RPentagon,这个类将正五边形的边长作为私有成员,类中包含初始化这个值的构造方法。
public abstract class shape {// 抽象类
/ 抽象方法 求面积 / public abstract double getArea();
/ 抽象方法 求周长 / public abstract double getPerimeter(); }
请编程从键盘输入正五边形的边长值,创建一个正五边形对象,然后输出正五边形的面积和正五边形的周长。计算正五边形的面积公式为: S=5a^2/(4tan(36度))其中a为边长。 或者:S=(1/4)a^2√(25+10√5) 输出结果保留4位小数。
输入格式:
输入正五边形的边长。例如:
5
输出格式:
输出正五边形的面积和周长。第一行输出面积,第二行输出周长。例如: 43.0119
25
输入样例:
16.8
输出样例:
485.5875
84
源代码:
1 import java.util.Scanner;
2 abstract class Shape{
3 abstract double getArea();
4 abstract double getPerimeter();
5 }
6 class RPentagon extends Shape{
7 private double a;
8 public RPentagon(double a){
9 this.a = a;
10 }
11 public double getArea(){
12 return 0.25*a*a*Math.sqrt(25+10*Math.sqrt(5));
13 }
14 public double getPerimeter() {
15 return 5*a;
16 }
17
18 }
19 public class Main {
20
21 public static void main(String[] args) {
22 Scanner in = new Scanner(System.in);
23 double b=in.nextDouble();
24 RPentagon r= new RPentagon(b);
25 System.out.println(String.format("%.4f",r.getArea()));
26 System.out.println((int)r.getPerimeter());
27 }
28
29 }