一旦程序在Java中执行,我如何让for循环停止运行并继续下一个metid



代码首先让用户输入一个班级的学生人数。然后系统将允许用户添加这些学生的姓名。之后,用户可以为这些学生中的每一个分配科目的分数和学分。一旦输入了每个学生的分数和学时,系统就应该计算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;
}
}

以下是我从一开始运行系统时的输出:

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条件,因为数组从一开始就有数据,直到用户输入的学生数量。因此,条件如下:

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

如果你想停止循环,那么你可以将一些条件变量设置为true,并根据其状态中断循环。类似于:

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对象。不需要每次从用户那里获得输入时都创建一个新的Scanner
  • 在需要变量时声明它们
  • 您可以使用result来声明您的names数组。然后可以使用for循环来获取名称
  • 不需要变量s1。将方法nextLine返回的值直接分配给names数组
  • 在声明其他数组(包括markscreditsgpa(时,也可以使用result。事实上,您可以使用任何表达式来为数组的任何维度返回int结果
  • 不需要变量nameCountcnt
  • 所有计算都需要在嵌套的for循环中完成
  • 您需要为每个学生重置totalCredits

样本运行的输出:

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

最新更新