题目要求:
设计一个类Student,并在Main类中生成Student类对象进行测试
1.对于Student类,设计私有属性name和age,并为每一个成员变量name和age设计其setXXX()和getXXX()方法,并对于setAge方法,如果age被赋值为<=6,则age值为7,其他为参数值。
2.对于Student类,设计无参构造方法,在构造方法中为age赋值为7,name赋值为“无名" 并添加语句System.out.println("无参构造方法");
3.设计方法public void display(),方法中显示该学生的姓名和年龄,显示格式为name:无名,age:8
Main类的main方法中,创建1个学生对象,然后调用display方法显示学生信息,接着通过键盘输入1个学生的姓名和年龄,调用display方法去显示学生信息。
输入格式:
在一行内输入学生的姓名和年龄
输出格式:
对每一组输入,输出学生的姓名和年龄。
输入样例:
在这里给出一组输入。例如:
tom 6
jerry 8
输出样例:
在这里给出相应的输出。例如:
无参构造方法
name:无名,age:7
name:tom,age:7
无参构造方法
name:无名,age:7
name:jerry,age:8
错误答案:
// 定义Student类
class Student {
private String name; // 学生姓名
private int age; // 学生年龄
// 无参构造方法
public Student() {
this.name = "无名";
this.age = 7;
System.out.println("无参构造方法");
}
// name的setter方法
public void setName(String name) {
this.name = name;
}
// name的getter方法
public String getName() {
return name;
}
// age的setter方法
public void setAge(int age) {
if (age <= 6) {
this.age = 7;
} else {
this.age = age;
}
}
// age的getter方法
public int getAge() {
return age;
}
// 显示学生信息的方法
public void display() {
System.out.println("name:" + name + ",age:" + age);
}
}
// Main测试类
public class Main {
public static void main(String[] args) {
Student student1 = new Student(); // 创建学生对象
student1.display(); // 显示学生信息
java.util.Scanner scanner = new java.util.Scanner(System.in);
while (scanner.hasNextLine()) {
String[] input = scanner.nextLine().split(" ");
String name = input[0];
int age = Integer.parseInt(input[1]);
student1.setName(name);
student1.setAge(age);
student1.display(); // 显示学生信息
}
scanner.close();
}
}
错误显示:
解析:非零显示意思是在返回时就遇见了bug,可能是有什么判断有问题,我们这里的判断只有循环的判断,于是我们改成了这样:
import java.util.Scanner;
// 定义Student类
class Student {
private String name; // 学生姓名
private int age; // 学生年龄
// 无参构造方法
public Student() {
this.name = "无名";
this.age = 7;
System.out.println("无参构造方法");
}
// name的setter方法
public void setName(String name) {
this.name = name;
}
// name的getter方法
public String getName() {
return name;
}
// age的setter方法
public void setAge(int age) {
if (age <= 6) {
this.age = 7;
} else {
this.age = age;
}
}
// age的getter方法
public int getAge() {
return age;
}
// 显示学生信息的方法
public void display() {
System.out.println("name:" + name + ",age:" + age);
}
}
// Main测试类
public class Main {
public static void main(String[] args) {
Student student1 = new Student(); // 创建学生对象
student1.display(); // 显示学生信息
java.util.Scanner scanner = new java.util.Scanner(System.in);
scanner.hasNextLine();
String[] input = scanner.nextLine().split(" ");
String name = input[0];
int age = Integer.parseInt(input[1]);
student1.setName(name);
student1.setAge(age);
student1.display(); // 显示学生信息
}
}
结果还是报同样的错误。
既然这样,那有可能是我们的输入判断有问题,这里我们输入是用的第二类输入,就是在遇见了换行符才停止录入,然后我们直接录入一行字符串,然后再解析字符串的各个部分,这里是用空格来分隔,不过如果出现多个空格,像名字里有空格怎么办?就会显示错误
我们可以用一个输入试试:
jerry yiio 8
结果真的报错了:
所以更改一下输入。
正确答案:
import java.util.Scanner;
class Student{
private String name;
private int age;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
if(age<=6) {this.age=7;}
else this.age=age;
}
Student(){
age=7;
name="无名";
System.out.println("无参构造方法");
}
public void display(){
System.out.println("name:"+name+",age:"+age);
}
}
public class Main{
public static void main(String args[]){
Student s1=new Student();
s1.display();
Scanner sc=new Scanner(System.in);
String name=sc.next();
int age=sc.nextInt();
s1.setName(name);
s1.setAge(age);
s1.display();
}
}