簡體   English   中英

一旦在 Java 中執行了程序,如何讓 for 循環停止運行並繼續執行下一個方法?

[英]How can I get the for loop to stop to stop running and proceed to the next methid once the program has been executed in Java?

該代碼首先讓用戶輸入 class 中的學生人數。然后系統將允許用戶添加這些學生的姓名。 之后,用戶可以為每個學生的科目分配分數和學分。 一旦為每個學生輸入了分數和學分,系統就會計算 GPA。 然而,系統繼續運行循環,它不執行和顯示 GPA。 為什么這個循環不執行,我能得到幫助嗎:

public class testing1 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int result;
        String[] names = new String[100];
        System.out.println("Enter number of students (Must be between 1-50)");
        result = in .nextInt();
        System.out.println("Thank you, Please enter the names for the " + result + " Students");
        int nameCount = 0;
        while (nameCount < result) {
            System.out.println("Enter First Name: ");
            String s1 = in .next();
            System.out.println("The students name is" + " " + s1);
            System.out.println();
            names[nameCount] = s1;
            nameCount++;
        }
        double[][] marks = new double[100][2];
        int[][] credits = new int[100][2];
        double[] gpa = new double[100];
        String[] subjects = {"Math", "Science",};
        int cnt = 0;
        Scanner s1 = new Scanner(System.in);
        gpa[cnt] = 0;
        int totalCredits = 0;
        for (int i = 0; i < names.length; i++) {
            for(int j = 0; j < subjects.length; j++) {
                System.out.println();
                System.out.println();
                System.out.println("Please enter " + names[i] +"'s mark in "  + subjects[j] + ": ");
                marks[cnt][i] = s1.nextDouble();
                System.out.println("Please enter " + names[i] +"'s Credit hours for "+ subjects[j] + ": ");
                credits[cnt][i] = s1.nextInt();
                totalCredits += credits[cnt][i];
                gpa[cnt] += marks[cnt][i] * credits[cnt][i];
            }
            cnt++;
        }
        gpa[cnt] /= totalCredits;
        System.out.printf("GPA of :" + names[cnt] + " is %.2f.", gpa[cnt]);
        return;
    }
}

下面是我從頭開始運行系統時的output:

Enter number of students (Must be between 1-50)
2
Thank you, Please enter the names for the 2 Students
Enter First Name: 
Alan
The students name is Alan

Enter First Name: 
Bob
The students name is Bob



Please enter Alan's mark in Math: 
12
Please enter Alan's Credit hours for Math: 
12


Please enter Alan's mark in Science: 
12
Please enter Alan's Credit hours for Science: 
12


Please enter Bob's mark in Math: 
12
Please enter Bob's Credit hours for Math: 
12


Please enter Bob's mark in Science: 
12
Please enter Bob's Credit hours for Science: 
12


Please enter null's mark in Math: 
12
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2
    at testing1.testing1.main(testing1.java:59)

由於問題的更新已更改

在第一個循環中,您將遍歷整個名稱數組。 您還需要一個i < nameCount nameCount 條件,因為 arrays 具有從開始到與用戶輸入的學生一樣多的數據。 因此,條件如下:

//other code
for (int i = 0; i < names.length && i < nameCount; i++) {
    //other code
}

如果你想停止循環,那么你可以將一些條件變量設置為 true 並根據其 state 中斷循環。類似於:

for (...) {
    //sentences
    if (someCondition)
        break;
}

代碼后的注釋。

import java.util.Scanner;

public class Testing2 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter number of students (between 1-50): ");
        int result = in.nextInt();
        in.nextLine();
        String[] names = new String[result];
        System.out.println("Thank you, please enter the names for the " + result + " students.");
        for (int i = 0; i < result; i++) {
            System.out.printf("Enter student %d first name: ", (i + 1));
            names[i] = in.nextLine();
        }
        double[] gpa = new double[result];
        String[] subjects = {"Math", "Science",};
        double[][] marks = new double[result][subjects.length];
        int[][] credits = new int[result][subjects.length];
        for (int i = 0; i < result; i++) {
            int totalCredits = 0;
            for(int j = 0; j < subjects.length; j++) {
                System.out.printf("Please enter %s's mark in %s: ", names[i], subjects[j]);
                marks[i][j] = in.nextDouble();
                System.out.printf("Please enter %s's credit hours for %s: ", names[i], subjects[j]);
                credits[i][j] = in.nextInt();
                totalCredits += credits[i][j];
                gpa[i] += marks[i][j] * credits[i][j];
            }
            gpa[i] /= totalCredits;
            System.out.printf("GPA of %s is %.2f%n", names[i], gpa[i]);
        }
    }
}
  • 您只需要一個Scanner object。無需在每次要從用戶那里獲取輸入時都創建一個新的Scanner
  • 在需要時聲明變量。
  • 您可以使用result來聲明您的names數組。 然后您可以使用for循環來獲取名稱。
  • 不需要變量s1 將方法nextLine返回的值直接分配給names數組。
  • 您也可以在聲明其他arrays時使用result ,包括markscreditsgpa 事實上,您可以使用為數組的任何維度返回int結果的任何表達式。
  • 不需要變量nameCountcnt
  • 所有計算都需要在嵌套for循環中完成。
  • 您需要為每個學生重置totalCredits

樣本運行中的 Output:

Enter number of students (between 1-50): 2
Thank you, please enter the names for the 2 students.
Enter student 1 first name: George
Enter student 2 first name: Edson
Please enter George's mark in Math: 2.0
Please enter George's credit hours for Math: 3
Please enter George's mark in Science: 4.0
Please enter George's credit hours for Science: 2
GPA of George is 2.80
Please enter Edson's mark in Math: 2.67
Please enter Edson's credit hours for Math: 3
Please enter Edson's mark in Science: 1.33
Please enter Edson's credit hours for Science: 4
GPA of Edson is 1.90

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM