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

时间:2014-04-02 23:25:48

标签: java

是的,这是一项任务...... 我有2个阵列;一个用于学生姓名,另一个用于分数。我已经要求用户输入学生数量以初始化两者的大小,然后循环输入过程以填充元素。 但最奇怪的事情发生在以前没有发生过。当代码运行时,学生数组似乎被一个元素缩短(在4个条目之后程序跳转到下一个输入循环),但更奇怪的是截断似乎是在数组的前面,因为得分循环以空白开头,其中名称应为但允许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();
            }
         }
     }

为什么会发生这种情况的任何想法? 最终有一种,但我认为我有一个混乱。 对不起,如果帖子的格式错误 - 第一次发布;尽我所能。

感谢

2 个答案:

答案 0 :(得分:0)

此调试输出应该为您提供问题的线索:

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

this answer this question 正是您需要的答案。

答案 1 :(得分:-1)

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

刚检查过,现在就可以了。

nextLine()使您的扫描程序超过当前行并返回跳过的输入 - 因此您几乎跳过了一行。它第一次进入循环时,你会丢失一个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();
    }
 }