Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 让用户输入姓名,然后回答12个选择题,然后打分_Java_Arrays_For Loop_User Input_Equality - Fatal编程技术网

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)) + "%");