## 时间有限,脑力不足
## 只给出代码部分(附带注释)
码云 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)); //保留两位输出
}
}