这就是我所拥有的:
import java.util.*;
import java.text.*;
public class Lab4 {
public static void main(String[] args) {
Scanner s = new Scanner(System. in );
Scanner keyboard = new Scanner(System. in );
String input;
int students;
int correctAnswers = 0;
char[] answerKey = {
'B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D', 'B', 'A'
};
char[] userAnswers = new char[answerKey.length];
DecimalFormat df = new DecimalFormat("#0.0");
System.out.print("how many students are in your class?");
input = s.nextLine();
students = Integer.parseInt(input);
String[] name = new String[students];
for (int j = 0; j < students; ++j) {
System.out.print("Enter name of student " + (j + 1) + ": ");
name[j] = s.nextLine();
System.out.print("Enter quiz score answers :");
for (int k = 0; k < answerKey.length - 1; ++k) {
userAnswers[k] = s.next().charAt(0);
}
for (int i = 0; i < userAnswers.length; i++) {
if (userAnswers[i] == answerKey[i]) {
correctAnswers++;
}
}
System.out.println((df.format((correctAnswers / answerKey.length) * 100)) + "%");
}
}
}
但是每次我输入12个答案(甚至是正确的答案)它只是进入下一行并且不打印任何其他内容,idk它有什么问题,我想也许userAnswers没有得到分配正确吗?
无论如何,任何帮助将不胜感激。感谢
答案 0 :(得分:0)
一些事情:
这一行
for (int k = 0; k < answerKey.length -1; ++k) {
应改为
for (int k = 0; k < answerKey.length; ++k) {
否则你将错过用户的一个答案
执行此操作correctAnswers/answerKey.length
时使用两个整数,因此结果将被截断为0.您应该使用double或float作为correctAnswers
的类型,然后使用它来进行除法得到小数值。
答案 1 :(得分:0)
首先,光标转到下一行,是的,下一个println
不打印(引自评论)。这是因为你只在循环外打印"Enter quiz score answers : "
。
尝试更改此行:
System.out.print("Enter quiz score answers :");
for (int k = 0; k < answerKey.length - 1; ++k) {
userAnswers[k] = s.next().charAt(0);
}
到:
for (int k = 0; k < answerKey.length; ++k) {
System.out.print("Enter quiz score answers : ");
userAnswers[k] = s.next().charAt(0);
}
其次,您的计算存在问题:
System.out.println((df.format((correctAnswers / answerKey.length) * 100)) + "%");
其中correctAnswers
和answerKey.length
为int
,因此correctAnswers / answerKey.length
的结果为int。
correctAnswers = 4
会怎样?它将首先计算4/12
。由于两者都是int
,因此结果为0。
尝试将该行更改为:
System.out.println((df.format((((float)(correctAnswers) / answerKey.length)) * 100)) + "%");
答案 2 :(得分:0)
Scanner.next()
使用分隔符来标记输入字符串。如果未使用Scanner.useDelimiter
设置分隔符,则默认为空格。因此,您可以在输入时用空格分隔每个答案,也可以将分隔符设置为空字符串,以便分别获取每个字符。我怀疑可能是Scanner keyboard = new Scanner(System. in );
行的用途 - 目前它没有使用,但可以与空分隔符一起使用来解析没有空格的答案字符串。
要查看我在说什么,请尝试输入以空格分隔的每个答案。您还可以尝试为12个答案中的每个答案输入“ab ab ab ...”(即12 x“ab”),您应该看到您的代码将在12“a”中作为答案读取。