我必须仅使用 for 循环和 if 语句、字符串和字符方法(无字符串生成器)执行以下操作:
“编写一个名为 printGPA 的方法,该方法接受控制台的扫描仪作为 参数并计算学生的平均绩点。用户将 键入一行包含学生姓名的输入,然后键入一个数字 代表分数的数量,后面跟有那么多整数分数。”
给出的例子是:
输入学生记录:Maria 5 72 91 84 89 78
玛丽亚的成绩是 82.8
我已经使用以下代码成功完成了此操作:
public class Exercise8
{
public static void main(String[] args)
{
Scanner consoleInput = new Scanner(System.in);
printGPA(consoleInput);
}
public static void printGPA(Scanner input)
{
System.out.print("Enter a student record: ");
String name = input.next();
int total = input.nextInt();
String grades = input.nextLine();
int sum = 0;
String stringConcat = "";
double gpa = 0.0;
System.out.println("Student record: " + name + " " + total + " " +
grades);
for(int i = 1; i < grades.length(); i++)
{
char ch = grades.charAt(i);
char ch2 = grades.charAt(i + 1);
stringConcat = String.valueOf(ch) + String.valueOf(ch2);
int number = Integer.parseInt(stringConcat);
sum += number;
gpa = (double)sum / (double)total;
i += 2;
}
System.out.println(name + "'s grade is " + gpa);
}
}
只要我不在等式中输入 100 或 0,该程序就可以正常工作。我不知道如何创建一个算法来从字符串中删除 100 或 0,无论它们位于字符串中的位置。
编辑:
例如:如果我输入 72, 100, 98, 0, 87,我需要将它们从字符串中分离出来,并将它们转换为整数,以便我可以将它们相加。
如果我输入上述内容,我会收到以下错误:
线程“main”java.lang.NumberFormatException中出现异常:对于输入字符串:“9”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Chapter4.Exercise8.printGPA(Exercise8.java:37)
at Chapter4.Exercise8.main(Exercise8.java:16)
最佳答案
使用Scanner.nextInt而不是手动解析字符串。这将处理可变长度整数,而不是您的代码仅处理两位数字。这就是它在 0-9 和 100 上失败的原因。
for( int i = 0; i < total; i++ ) {
gpa += scanner.nextInt();
}
gpa = gpa / total;
编辑:您可能还需要添加错误处理来检测成绩是否低于 0 或高于 100,因为这些在这种情况下没有意义。
关于java - 如何从字符串中分离数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25295194/