Java 数组中的第一个元素丢失了?

Java 数组中的第一个元素丢失了?,java,Java,是的,这是一项作业。。。 我有两个数组;一个是学生姓名,一个是分数。我已经要求用户输入学生的数量来初始化这两个元素的大小,然后循环输入过程来填充元素。 但最奇怪的事情发生了,这是以前从未发生过的。当代码运行时,student数组似乎缩短了一个元素(在4个条目之后,程序跳转到下一个输入循环),但更奇怪的是,截断似乎位于数组的前面,因为scores循环从一个空白开始,其中一个名称应该是,但允许5个输入 import java.util.Scanner; public class E

是的,这是一项作业。。。 我有两个数组;一个是学生姓名,一个是分数。我已经要求用户输入学生的数量来初始化这两个元素的大小,然后循环输入过程来填充元素。 但最奇怪的事情发生了,这是以前从未发生过的。当代码运行时,student数组似乎缩短了一个元素(在4个条目之后,程序跳转到下一个输入循环),但更奇怪的是,截断似乎位于数组的前面,因为scores循环从一个空白开始,其中一个名称应该是,但允许5个输入

    import java.util.Scanner;

    public class Ex6_17SortStudents {
    public static void main(String[] args) {           
            Scanner input = new Scanner(System.in);

    int numOfStu;
      String[] students;
      double[] scores;

    System.out.println("Enter the number of students being recorded: ");
    numOfStu = input.nextInt();

    students = new String[numOfStu];

    System.out.println("Enter students' names: ");
    for (int i = 0; i < students.length; i++)
        students[i] = input.nextLine();


    scores = new double[numOfStu];
    for (int i = 0; i < students.length; i++) {
        System.out.print("Enter score for " + students[i] + ": ");
        scores[i] = input.nextDouble();
            }
         }
     }
import java.util.Scanner;
公开课Ex617学生{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
内努莫夫斯都;
字符串[]学生;
双[]分;
System.out.println(“输入记录的学生人数:”);
numOfStu=input.nextInt();
学生=新字符串[numostu];
System.out.println(“输入学生姓名:”);
for(int i=0;i
知道为什么会这样吗?
最终会有一种,但那是一团乱麻,我想我能处理。 抱歉,如果发布的格式错误-第一次发布;尽我最大的努力


谢谢

使用学生[i]=input.next()

刚检查过,现在可以用了

nextLine()使扫描仪前进到当前行,并返回跳过的输入,因此您几乎跳过了一行。当它第一次进入循环时,您会丢失一个i值,即i现在为1,但您的扫描仪不会记录用户输入。第二次,当我1岁时,它接受输入,以此类推

新代码:

public static void main(String[] args) {           
    Scanner input = new Scanner(System.in);
    int numOfStu;
    String[] students;
    double[] scores;

    System.out.println("Enter the number of students being recorded: ");
    numOfStu = input.nextInt();
    students = new String[numOfStu];
    scores = new double[numOfStu];

    System.out.println("Enter students' names: ");
    for (int i = 0; i < students.length; i++) {
           students[i] = input.next();
    }
    for (int i = 0; i < students.length; i++) {
          System.out.print("Enter score for " + students[i] + ": ");
          scores[i] = input.nextDouble();
    }
 }
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
内努莫夫斯都;
字符串[]学生;
双[]分;
System.out.println(“输入记录的学生人数:”);
numOfStu=input.nextInt();
学生=新字符串[numostu];
分数=新的双倍[numOfStu];
System.out.println(“输入学生姓名:”);
for(int i=0;i
此调试输出应为您的问题提供线索:

System.out.println("Enter students' names: ");
for (int i = 0; i < students.length; i++)  {
   System.out.print("Name index " + i + ": ");
   students[i] = input.nextLine();
}
System.out.println(“输入学生姓名:”);
for(int i=0;i

to正是您需要的答案。

两个警告:始终使用大括号,并且
System.out
仅在换行时刷新,因此您的“输入分数…”可能不会刷新。你应该做
System.out.flush()
。@Davidermann我想我忘了提到我是一个2.5个月大的程序员,所以我非常感谢你的帮助,所有的flush可能都是希腊语。@ashape读一读:你在2.5个月大的时候编程的事实……太神奇了。谈论一个神童!:)哦,我不知道!谢谢我看你把下一个孩子单独留下了。那么,可以安全地假设下一行是唯一一个这样做的行(到目前为止,在新的编程中)?@ashape next是用于字符串的,也就是说,您希望用户传递字符串,而nextDouble则是,如果您期望一个双精度。我想您在做OP的家庭作业时获得了否决票。