Java 对于未正确执行scan.nextInt的循环

Java 对于未正确执行scan.nextInt的循环,java,for-loop,logic,syntax-error,Java,For Loop,Logic,Syntax Error,这是我正在为班级编写的一个程序。在编写了大部分程序之后,我现在正在尝试运行它,似乎我有一个逻辑错误。出于某种原因,计算机将一直执行到第一个For循环,然后忽略scan.nextInt方法,在该方法中,我尝试提示用户在数组中输入值 编辑:新问题:现在,当我运行程序时,没有正确执行的循环是第二个for循环。无论您输入什么,它都会返回正确的总数。还返回0%正确率:( 编辑2:我解决了正确率部分的问题,但我仍然无法找到正确的方法来比较测验评分时输入的正确答案的输入值……它总是返回正确的数字作为问题总数,

这是我正在为班级编写的一个程序。在编写了大部分程序之后,我现在正在尝试运行它,似乎我有一个逻辑错误。出于某种原因,计算机将一直执行到第一个For循环,然后忽略scan.nextInt方法,在该方法中,我尝试提示用户在数组中输入值

编辑:新问题:现在,当我运行程序时,没有正确执行的循环是第二个for循环。无论您输入什么,它都会返回正确的总数。还返回0%正确率:(


编辑2:我解决了正确率部分的问题,但我仍然无法找到正确的方法来比较测验评分时输入的正确答案的输入值……它总是返回正确的数字作为问题总数,不管它们是否正确。

import java.util.Scanner;
公开课分级测验{
公共静态void main(字符串[]args)
{
int numQuestions;//测验中的问题数量
int numCorrect=0;//输入值的正确数目
正确答案;
扫描仪扫描=新扫描仪(System.in);
System.out.println(“请输入测验中的问题数量:”);
numQuestions=scan.nextInt();
int[]key=new int[numQuestions];//为测验的键创建一个数组
//提示用户在键数组中输入值
for(int i=0;i
这是因为您使用的是
键.length
。数组没有任何元素,因此将返回0。

您已声明

int[] key = new int[numQuestions];  
当numQuestions为0时

这会奏效的

    numQuestions = scan.nextInt();

   key = new int[numQuestions];  
对于问题的第二部分,if语句末尾有一个分号。 移除它

if (correctAnswer == key [i]);

您正在使用0大小初始化数组(请注意,您正在使用0初始化
numQuestions
)。在从用户输入获取
numQuestions
值后,只需移动数组初始化:

numQuestions = scan.nextInt();
int[] key = new int[numQuestions];

如果要使用
int
/
long
double
变量分配
double
值,应将
int
/
long
强制转换为
double
,或将其乘以
1.0
(文字),否则浮点结果将是
int
/
long
。请修改代码的这一部分:

double percentCorrect = ((numCorrect * 1.0) / ((key.length + 1) * 1.0) );
如果要打印格式化文本以输出,应使用。我将编写一个最终代码示例(关于语言语法):

从上面的链接:

  • %%
    将打印
    %%
    符号
  • %.2f
    将使用2个固定小数打印浮点数
  • \n
    将打印换行符

此处numQuestions声明为0。将其更改为有效。

是否确实需要使用
new int[0]
(注意
numQuestions
初始化为0)?不客气。另外,下次不要在标题中添加语言,因为它已经在标记中。编辑2:我修复了正确百分比部分的问题,但我仍然不知道如何在评分测验时比较输入值和输入正确答案的正确方法…它总是返回正确的数字作为目标所有问题,不管它们是否正确。这是否也足以打印百分比?double percentCorrect=(numCorrect/(key.length)*100);此外,我现在的问题是,在第二个for循环中,我不确定如何将“correctAnswer”的多个值与键[I]进行比较。由于某些原因,它每次递增numCorrect直到最大值,而不是在correctAnswer==key[i]时递增对于for循环的特定实例。@TommyD使用调试器查找该问题或发布新问题。习惯于发布一个问题以供发布。如果您想查看代码,请转到它,如果您也建议了一个修复方法,而不仅仅是代码的错误。@TommyD-检查(correctAnswer==key[i]);删除if语句末尾的分号
double percentCorrect = ((numCorrect * 1.0) / ((key.length + 1) * 1.0) );
//System.out.println("The percent correct: %" + percentCorrect);
System.out.printf("The percent correct: %% %.2f\n", percentCorrect);
int numQuestions = 0;       // number of questions on quiz
    int numCorrect = 0;         // number correct of entered values
    int correctAnswer;          
    int[] key = new int[numQuestions];