繁体   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