一个题目引发的思考

请定义一个学生类(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();
		}
	}
}​

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值