gpt4 book ai didi

java - 我的 while 循环第二次显示两个打印时遇到问题

转载 作者:行者123 更新时间:2023-12-01 14:48:18 27 4
gpt4 key购买 nike

这就是我所拥有的:

import java.util.*;
import java.text.*;

public class Proj4 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String again = "y";
final int MAX_STUDENTS = 100;
final int MIN_EXAM = 0;
final int MAX_EXAM = 50;
final int MIN_FINAL = 0;
final int MAX_FINAL = 100;

String[] names = new String[MAX_STUDENTS];
int[] exams = new int[MAX_STUDENTS * 4];
int student = 1;

DecimalFormat df = new DecimalFormat("#0.0");

do {
System.out.print("Please enter the name of student " + student
+ ": ");
String line;
line = s.nextLine().toUpperCase();
names = line.split(" ");
for (int i = 0; i < 4; i++) {
if (i == 3) {
System.out.print("Please enter score for Final Exam: ");
exams[i] = s.nextInt();
}

else {
System.out.print("Please enter score for Exam " + (i + 1)
+ ": ");
exams[i] = s.nextInt();
if (student == 1) {
if ((exams[0] < MIN_EXAM || exams[0] > MAX_EXAM)
|| (exams[1] < MIN_EXAM || exams[1] > MAX_EXAM)
|| (exams[2] < MIN_EXAM || exams[2] > MAX_EXAM)) {
System.out.println("Invalid enter 0-50 only...");
System.out.print("Please re-enter score: ");
exams[i] = s.nextInt();
} else if (exams[3] < MIN_FINAL || exams[3] > MAX_FINAL) {
System.out.println("Invalid enter 0-100 only...");
System.out.print("Please re-enter score: ");
exams[i] = s.nextInt();
}
} else if (student == 2) {
if ((exams[0] < MIN_EXAM || exams[0] > MAX_EXAM)
|| (exams[1] < MIN_EXAM || exams[1] > MAX_EXAM)
|| (exams[2] < MIN_EXAM || exams[2] > MAX_EXAM)) {
System.out.println("Invalid enter 0-50 only...");
System.out.print("Please re-enter score: ");
exams[i + 4] = s.nextInt();
} else if (exams[3] < MIN_FINAL || exams[3] > MAX_FINAL) {
System.out.println("Invalid enter 0-100 only...");
System.out.print("Please re-enter score: ");
exams[i + 4] = s.nextInt();
}
}
}
}
System.out.print("do you wish to enter another? (y or n) ");
again = s.next();
if (again.equalsIgnoreCase("y"))
student++;
} while (again.equalsIgnoreCase("y"));

System.out.println("***Class Results***");
System.out
.println(names[1]
+ ","
+ names[0]
+ " "
+ "Exam Percentage: "
+ ((float) (exams[0] + exams[1] + exams[2] + exams[3]) / (MAX_EXAM * 3 + MAX_FINAL))
* 100 + "%");
if (student == 2)
;
System.out
.println(names[3]
+ ","
+ names[2]
+ " "
+ "Exam Percentage: "
+ ((float) (exams[4] + exams[5] + exams[6] + exams[7]) / (MAX_EXAM * 3 + MAX_FINAL))
* 100 + "%");
if (student == 3)
;
System.out
.println(names[5]
+ ","
+ names[4]
+ " "
+ "Exam Percentage: "
+ ((float) (exams[8] + exams[9] + exams[10] + exams[11]) / (MAX_EXAM * 3 + MAX_FINAL))
* 100 + "%");
if (student == 4)
;
System.out
.println(names[7]
+ ","
+ names[6]
+ " "
+ "Exam Percentage: "
+ ((float) (exams[12] + exams[13] + exams[14] + exams[15]) / (MAX_EXAM * 3 + MAX_FINAL))
* 100 + "%");
}
}

我的程序似乎完全按照我想要/需要的方式运行,唯一的问题是,当我允许程序再次运行时,它会在同一行上输出两个字符串,如下所示:

Please enter the name of student 2: Please enter score for Exam 1:

我不知道该怎么做才能解决这个问题。我的代码中是否有某些内容仅在第二次、可能是第三次和第四次时出现困惑?

最佳答案

删除if后的分号

if (student == 3)
; // <- remove it
System.out.println(//...

因为现在Java将其理解为

if (student == 3){}
System.out.println(//...
<小时/>

改变

System.out.print("do you wish to enter another? (y or n) ");
again = s.next();

System.out.print("do you wish to enter another? (y or n) ");
again = s.nextLine();

next 不会消耗新行标记,因此当您在 next 之后使用 nextLine 时,它只会消耗这个新行标记并转到另一条指令。同样的规则适用于 nextInt

<小时/>

要存储学生姓名数组,您可以使用二维字符串数组

String[][] names = new String[MAX_STUDENTS][];

并根据学号在每行存储学生姓名

names[student] = line.split(" ");

要获取第一个学生的名字,您必须使用此表格

names[0][0]; //you probably know that indexes in array starts from zero

要获取所有学生的姓名,您可以遍历每行,然后遍历列

for(int stId=0; stId<student; stId++){
for(int nameNumber=0; nameNumber<names[stId].length; nameNumber++){
// print names[stId][nameNumber]`

关于java - 我的 while 循环第二次显示两个打印时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168647/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com