录入学生分数

import java.util.Scanner;
class Student{
    private String studentNumber;
    private String studentName;
    //将分数初始化为-1,避免为0时产生的歧义
    private int markForMaths=-1;
    private int markForEnglish=-1;
    private int markForScience=-1;
    private int people;

    public void Student(String studentNumber,String studentName){
        this.studentNumber=studentNumber;
        this.studentName=studentName; 
    }
    public String getNumber(){
        return studentNumber;
    }
    public String getName(){
        return studentName;
    }
    public void enterMarks(int markForMaths,int markForEnglish,int markForScience){
        this.markForMaths=markForMaths;
        this.markForEnglish=markForEnglish;
        this.markForScience=markForScience;
    }
    public int getMathsMark(){
        return markForMaths;
    }
    public int getEnglishMark(){
        return markForEnglish;
    }
    public int getScienceMark(){
        return markForScience;
    }
    public void setPoeple(int people){
        this.people=people;
    }
    public double calculateAverageMark(){
        return (markForMaths+markForEnglish+markForScience)/people;
    }
}
public class TestStudent extends Student{
	public static void main(String[] args){
        //动态初始化,由系统分配默认值
        String[] arr1 =new String[100];//studentNumber  
        String[] arr2 =new String[100];//studentName
        int[] arr3 =new int[100];//maths
        int[] arr4 =new int[100];//english
        int[] arr5 =new int[100];//science

        Scanner sc = new Scanner(System.in);
        System.out.println("要录入成绩的学生人数为(不超过100人):");
        int people = sc.nextInt();
        Student stu = new Student();
        stu.setPoeple(people);
        for(int q=1;q<=people;q++){
            //数据覆盖
            System.out.println("请输入第"+q+"个学生的编号");
            String number = sc.next();
            arr1[q]=number;
            System.out.println("请输入第"+q+"个学生的姓名");
            String name = sc.next();
            arr2[q]=name;
            System.out.println("请输入第"+q+"个学生的数学成绩");
            int maths = sc.nextInt();
            arr3[q]=maths;
            System.out.println("请输入第"+q+"个学生的英语成绩");
            int english = sc.nextInt();
            arr4[q]=english;
            System.out.println("请输入第"+q+"个学生的科学成绩");
            int science = sc.nextInt();
            arr5[q]=science;
            }
        for(int q=1;q<=people;q++){
            //数组遍历,取出数据
            stu.Student(arr1[q],arr2[q]);
            stu.enterMarks(arr3[q], arr4[q], arr5[q]);
            System.out.println("第"+q+"个学生的编号为:"+stu.getNumber());
            System.out.println("第"+q+"个学生的姓名为:"+stu.getName());
            System.out.println("第"+q+"个学生的平均成绩为:"+stu.calculateAverageMark());
        }
	}
}

 

 

nextLine()未成功读取数据分析

1.案例

 

从图中可以看出,控制台直接跳过了第二次sc.nextLine()的输入。

2.原因分析 

  1. nextLine()方法是读取一整行,以一个回车符作为结束标记停止扫描。
  2. next() / nextInt()方法是,读取到第一个结束符【空格、回车、Tab键】作为结束标记停止扫描。
  3. next() / nextInt() 他们不会取走结束符号,把他们留在缓冲区;而nextLine()方法取走当前扫描行第一个非结束符之后、回车符之前的整行内容作为字符串进行返回,也就是可能会取走空格等,遇到回车结束【并不会取走回车】
  4. 所以最开始的代码中,第二个nextLine()方法开始扫描的时候,它会优先读到残留在缓冲区的回车符,进而直接结束扫描,返回,自然我就没办法输入我的数据了。

3.解决方案


必要的知识:nextLine()不能放在in.nextInt()代码段后面,否则nextLine()会读入"\n"字符,但"\n"并不会成为返回的字符。

方案一:如果没必要读取空格的话,就不使用nextLine()方法,使用next()方法读取一个连续不间断的字符串。

 

方案二:有必要读取空格的话,使用nextLine()方法接收你想输入的字符串之前,额外执行一次nextLine()方法把残留的回车符拿掉,这样再执行nextLine()方法就可以正常地输入并接收自己想要输入的数据了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DoorBreaker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值