Java 让用户输入姓名,然后回答12个选择题,然后打分
这就是我所拥有的:Java 让用户输入姓名,然后回答12个选择题,然后打分,java,arrays,for-loop,user-input,equality,Java,Arrays,For Loop,User Input,Equality,这就是我所拥有的: 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 s
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)) + "%");
}
}
}
import java.util.*;
导入java.text.*;
公共类Lab4{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
扫描仪键盘=新扫描仪(System.in);
字符串输入;
国际学生;
int=0;
字符[]应答键={
“B”,“D”,“A”,“A”,“C”,“A”,“B”,“A”,“C”,“D”,“B”,“A”
};
char[]userAnswers=新字符[answerKey.length];
DecimalFormat df=新的DecimalFormat(#0.0”);
System.out.print(“你们班有多少学生?”);
输入=s.nextLine();
students=Integer.parseInt(输入);
字符串[]名称=新字符串[学生];
对于(int j=0;j
但每次我输入12个答案(甚至是正确的答案)时,它只会进入下一行,不打印任何其他内容,idk它有什么问题,我想可能是用户答案分配不正确
无论如何,任何帮助都将不胜感激。谢谢两件事:
for(int k=0;k
应改为
for(int k=0;k
否则,您将丢失用户的一个答案correctAnswers/answerKey.length
,因此结果将被截断为0。应使用double或float作为correctAnswers
的类型,然后使用该类型进行除法以获得十进制值首先,光标移到下一行,是的,下一个
println
不会打印(引用您的评论)。这是因为您只打印“输入测验分数答案:
一次循环外
尝试更改此行:
System.out.print("Enter quiz score answers :");
for (int k = 0; k < answerKey.length - 1; ++k) {
userAnswers[k] = s.next().charAt(0);
}
其中correctAnswers
和answerKey.length
为int
,因此correctAnswers/answerKey.length
的结果为int
如果correctAnswers=4
,会发生什么情况?它将首先计算4/12
。由于两者都是int
,因此结果将为0
尝试将该行更改为:
System.out.println((df.format((((float)(correctAnswers) / answerKey.length)) * 100)) + "%");
使用分隔符来标记输入字符串。如果不使用设置分隔符,默认值为空白。因此,您可以在输入答案时用空白分隔每个答案,也可以将分隔符设置为空字符串,以便分别提取每个字符。我想这可能是扫描仪键盘的功能=新扫描器(System.in);
行是for-当前未使用该行,但可与空分隔符一起使用,以解析不带空格的答案字符串
要了解我在说什么,请尝试输入每个答案,每个答案之间用空格隔开。您也可以尝试输入“ab…”作为12个答案中的每一个(即12 x“ab”),您应该看到您的代码将以12“a”作为答案。您所说的“下一行”和“任何其他内容”是什么意思“
println
打印失败吗?您需要计算出代码实际在做什么,以及它在哪里执行。添加一些调试行,打印出执行的位置,特别是在循环中,并打印出一些基本数据(如userAnswers[k])所以你可以看到实际发生了什么。你会很快看到为什么代码没有达到你期望的效果。比如,在我键入要根据答案键评分的字符后,光标转到下一行,是的,下一个println没有打印,我想可能程序终止了它自己?我真的不知道。它似乎只是个傻瓜点燃我键入的第一个字母?for循环不正确吗?它没有将它们全部放入其中?请参阅[这篇关于整数除法的文章][1]。[1]:这非常有帮助,谢谢你,我唯一的问题是我的老师希望所有12个字符都输入到这一行,这就是为什么我在前循环之前有它,没有办法这样做吗?System.out.print(“输入测验分数答案”);String line=s.nextLine();for(int k=0;kSystem.out.println((df.format((correctAnswers / answerKey.length) * 100)) + "%");
System.out.println((df.format((((float)(correctAnswers) / answerKey.length)) * 100)) + "%");