Java扫描程序跳过迭代

时间:2016-08-02 16:57:42

标签: java java.util.scanner

我在一个问题上已经被困了一段时间,而且程序没有做我认为它应该做的事情。

当我运行程序并且它到达要求您输入课程名称的部分时,程序会跳过第一次迭代,或者其他取决于输入的课程数量。它只允许在最后一次迭代时输入。对于以下for循环,程序跳过它们而不允许输入。

我的问题是, for循环不正确,还是没有正确输入信息到其下标的String数组?

    import java.util.Scanner;           //Needed for Scanner class
    public class StudentRecords
    {
    public static void main(String[] args)
    {
    int courses;
    int students;
    int[] course = new int[5];
    int[] student = new int[5];
    double GPA = 0;
    String[] courseNumber = new String[5];
    double[] creditHours = new double[5];
    String[] letterGrade = new String[5];

    //Scanner object for user input
    Scanner kb = new Scanner(System.in);

    System.out.println("This program will help you determine the GPA \n"
                        + "for each student entered.");
    System.out.println("");

    System.out.println("How many student's GPA are you going to calculate?");
    System.out.print("Enter amount of students (Maximum of 5 students): ");
    students = kb.nextInt();
    student = new int[students];

    System.out.println("");

    for(int index = 0 ; index < student.length; index++)
    {
        System.out.print("Student " + (index + 1) + " information: ");
        System.out.println("");

        System.out.print("How many courses did student " +
                            (index + 1)  + " take? ");
        courses = kb.nextInt();
        course = new int[courses];

        for(int i = 0; i < course.length; i++)
        {
            System.out.println("What is the name of course #" + (i + 1));
            courseNumber[i] = kb.nextLine();
        }

        for(int i = 0; i < course.length; i++)
        {
            System.out.println("How many credit hours is " + courseNumber[i]);
            creditHours[i] = kb.nextDouble();
        }

        for(int i = 0; i < course.length; i++)
        {
            System.out.println("What is the final letter grade for " + courseNumber[i]);
            letterGrade[i] = kb.nextLine();
        }

        for( i = 0; i < student.lenght<
    }
    }
 }

P.S。这是我正在研究的问题:

  

使用以下输入编写程序,所有输入都存储在其中   数组(大小为5)。首先,学生在那个学期上学了多少门课程   (不能大于5)。在ARRAYS中为每位学生存储,   课程编号/名称(例如ICT 435),学分(1-4)和   字母等级(A-F)。确定学期的GPA。

2 个答案:

答案 0 :(得分:1)

nextLine() Scanner方法可能有点奇怪。我开始的Java课程提到,在检索数字(例如nextDouble())的方法之后,在行的末尾有一个新的行字符。下次使用nextLine()时,它会将新行字符作为输入读取,而不是让您有机会输入任何内容。

如果你在循环前放nextLine()询问课程名称,

kb.nextLine(); // <-- here
for(int i = 0; i < course.length; i++)
{
    System.out.println("What is the name of course #" + (i + 1));
    courseNumber[i] = kb.nextLine();
}

它将通过该新行。任何后续nextLine()次调用实际上都会让您提供输入。也就是说,您也需要在字母等级循环之前执行此操作,

kb.nextLine(); // <-- here
for(int i = 0; i < course.length; i++)
{
    System.out.println("What is the final letter grade for " + courseNumber[i]);
    letterGrade[i] = kb.nextLine();
}

因为你在这个循环之前也要求数字。

这对我有用。希望它有所帮助!

答案 1 :(得分:0)

尝试使用:

courseNumber[i] = kb.next();

letterGrade[i] = kb.next();
扫描字符串时,在for循环中

。 而不是

courseNumber[i] = kb.nextLine();

letterGrade[i] = kb.nextLine();

有关详细信息,请参阅this link