有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么当我跳出内部if时会打印两次消息?

我的代码有点问题。编译和运行效果很好,但是,当我试图打破内部循环时

System.out.println("Type which category you want to add to.");
System.out.println("Homework, Classwork, Labs, Test, Quizzes, Midterm, Final");

上面的代码在终端上打印了两次,而我只希望它打印一次

我有一种感觉,这是一个简单的错误,我的括号对齐的方式,但我很难想出如何做到这一点。任何帮助都将不胜感激

import java.util.Scanner;

public class GetGrade {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        final int MAX = 15;

        int[] homework = new int[MAX];
        int[] classwork = new int[MAX];
        int[] lab = new int[MAX];
        int[] test = new int[MAX];
        int[] quizzes = new int[MAX];
        int[] midterm = new int[MAX];
        int[] fin = new int[MAX];
        int hwCount, clCount, labCount, testCount, quizCount, midCount, finCount;
        double hwTotal, clTotal, labTotal, testTotal, quizTotal, midTotal, finTotal;
        double grade = 0;

        String selection = "";

        System.out.println();
        System.out.println("Welcome to GetGrade!");
        System.out.println();

        while (true) {

            System.out.println("Type which category you want to add to.");
            System.out.println("Homework, Classwork, Labs, Test, Quizzes, Midterm, Final");
            selection = input.nextLine();

            if (selection.equals("homework")) {

                System.out.print("What percentange of your grade is homework? > ");
                double hwPercent = input.nextDouble();
                System.out.println("Now begin typing your grades. When you are finished, type -1.");

                for (int i = 0; i < homework.length; i++) {
                    homework[i] = input.nextInt();
                    hwTotal = homework[i] * hwPercent;
                    grade += hwTotal;
                    if (homework[i] == -1) break;
                }
            }
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

    让代码正常工作的简单方法是更改

    selection = input.nextLine();
    

    selection = input.next();
    

    next()只读取字符串值(这是您在代码中实际执行的操作),而不是彼得建议的newline字符

    因此,当您读取newline字符时,while的额外迭代不会发生