## 时间有限,脑力不足
## 只给出代码部分(附带注释)
码云 https://gitee.com/SoridoD/codes
7-5:
import java.util.Scanner; class Person{ private String name; //题目要求private private int age; private boolean gender; private int id; Person(){ System.out.println("This is constructor"); System.out.printf("%s,%d,%b,%d\n",name,age,gender,id); //布尔型 %b } public Person(String a,int b,boolean c){ name=a; age=b; gender=c; } public String toString(){ //覆盖toString,要用String类型 返回,否则报错 String className=this.getClass().getName(); //获取此对象类名 return (className+" [name="+name+", age="+age+", gender="+gender+", id="+id+"]"); } //以下是 setter,getter部分 实际题中没用到 public void setname(String name){ this.name=name; } public String getname(){ return name; } public void setage(int age){ this.age=age; } public int getage(){ return age; } public void setgender(boolean gender){ this.gender=gender; } public boolean getgender(){ return gender; } public void setid(int id){ this.id=id; } public int getid(){ return id; } } public class Main{ public static void main(String[] args){ Scanner read=new Scanner(System.in); int n=read.nextInt(); //对象数量 int i; //用于循环 Person[] personS; //对象数组声明 (题中要求逆序,所以要保存数据) personS=new Person[n]; //对象数组初始化 /* nextInt()控制台输入后自带/n nextLine()获取控制台/n前的输入 */ read.nextLine(); // 获取前面nextInt的/n。如果没有此行,会导致for第一次循环中的read.nextLine被跳过 for (i=0;i<n;i++){ String readLine=read.nextLine(); //获取控制台的一行输入,赋值给字符串readLine String data[]=readLine.split(" "); //将字符串readLine以空格为分隔,赋值给字符串组data personS[i]=new Person(data[0],Integer.valueOf(data[1]),Boolean.parseBoolean(data[2])); //创建对象 } for (i=n-1;i>=0;i--){ //逆序输出 System.out.println(personS[i].toString()); } Person personNone=new Person(); //无参构造 System.out.println(personNone.toString()); } }
7-6:
import java.util.Scanner; import java.util.Arrays; //用于排序 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int[] grade = new int[5]; //声明数组 for(int i=0; i<grade.length; i++){ grade[i] = in.nextInt(); } RR rr = new RT(grade); double dd = rr.mark(); System.out.printf("%.2f",dd); } } abstract class RR{ int[] grade; public RR(int[] grade){ this.grade = grade; } public abstract double mark(); } class RT extends RR{ RT(int[] grade){ super(grade); //调用父类有参构造函数 } public double mark(){ Arrays.sort(grade); //将数组 升序排序 return (double)(grade[1]+grade[2]+grade[3])/3; //求平均值 } }
7-7:
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 { Son() { super(true); //调用父类有参构造 ()内true或false都可以 System.out.println("Son's Constructor without parameter"); } public void method() { System.out.println("Son's method()"); super.method(); } }
7-8:
import java.util.Scanner; class Point{ double x; //x坐标 double y; //y坐标 Point(double x,double y){ this.x=x; this.y=y; } public double distance(Point a){ //和另一个点的距离 //math.abs 绝对值,sqrt 根号,pow 幂 return Math.abs(Math.sqrt(Math.pow((this.x-a.x),2)+Math.pow((this.y-a.y),2))); } } public class Main{ public static void main(String[] args){ Scanner read=new Scanner(System.in); //题目只输入两个点,所以未用for循环 String readLine=read.nextLine(); //获取控制台一行 赋值给字符串readLine String[] data=readLine.split(" "); //将字符串readLine以空格为分隔 赋值给字符串组data Point pointA=new Point(Integer.valueOf(data[0]),Integer.valueOf(data[1])); //创建对象 点A readLine=read.nextLine(); data=readLine.split(" "); //之前有声明 所以不用String Point pointB=new Point(Integer.valueOf(data[0]),Integer.valueOf(data[1])); //创建对象 点B System.out.printf("%.2f",pointA.distance(pointB)); //保留两位输出 } }