请定义一个学生类(Student),包含学号、姓名、年龄(7-60岁)三个私有成员。从键盘输入学生的成员值后生成对象,并按要求输出相应的结果。
输入格式:
第一行一个整数k,代表后面要生成的学生人数。 从第二行开始的连续k行,每行3个数据,分别表示一个学生的学号、姓名和年龄。
输出格式:
输出每个学生的基本情况。如果数据不符合要求则输出"bad"
输入样例:
3
20174042001 zhangsan 20
20174042030 lisi 2
20174042050 wangwu 17
输出样例:
zhangsan 20174042001 20
bad
wangwu 20174042050 17
第一次的代码:
import java.util.*;
class Student
{
public String name;
String xuehao;
private int age;
public Student(String b,String a,int c)
{
xuehao=b;
name=a;
age=c;
}
public int reage()
{
return age;
}
void shou()
{
if(age>=7&&age<=60)
System.out.println(name+" "+xuehao+" "+age);
else
System.out.println("bad");
}
}
public class 实例对象的问题
{
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++)
{
Student s=new Student(sc.nextLine(),sc.nextLine(),sc.nextInt());
s.shou();
}
}
}
运行结果总是出现异常,一直想不明白,后查阅异常的意思才知道是输入的问题。
题目样例中是字符串和整数一行输入的,然而
nextLine()的输入是到输入回车键才停止接收,回车符也会被读入。
next():不读空格和回车,读取的时候会留下空格及其后面的数据,且遇到空格和回车会停止读取。
nextInt():不接收回车符,且只读本行数字。
所以,当nextInt()和nextLine()一起时,不注意会有
int n=sc.nextInt();
String s=sc.nextLine();
想输入:
186
hjkh
输出:
186
这是为什么呢,是因为nextInt()不会读回车,而nextLine()读到的第一个字符就是nextInt()剩下的回车,所以就会停止读后面的数据,解决方法:写一个nextLine接收回车
int n=sc.nextInt();
sc.nextLine();
String p=sc.nextLine();
输出:
186
hjkh
该题改正代码:
import java.util.*;
class Student
{
public String name;
String xuehao;
private int age;
public Student(String b,String a,int c)
{
xuehao=b;
name=a;
age=c;
}
public int reage()
{
return age;
}
void shou()
{
if(age>=7&&age<=60)
System.out.println(name+" "+xuehao+" "+age);
else
System.out.println("bad");
}
}
public class 实例对象的问题
{
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++)
{
Student s=new Student(sc.next(),sc.next(),sc.nextInt());
s.shou();
}
}
}