Java 测试字符串的输入 公共类QuizCheck { /** 检查一系列测验答案是否有效。它必须 包含每个预期答案的答案A、B、C或D,或 X表示未提供任何答复。 @param输入答案字符串 @param questions字符串中的问题数 @如果字符串有效,则返回true,否则返回false */ 公共静态布尔校验输入(字符串输入、整数问题) { 布尔校验输入; 对于(问题=0;问题

Java 测试字符串的输入 公共类QuizCheck { /** 检查一系列测验答案是否有效。它必须 包含每个预期答案的答案A、B、C或D,或 X表示未提供任何答复。 @param输入答案字符串 @param questions字符串中的问题数 @如果字符串有效,则返回true,否则返回false */ 公共静态布尔校验输入(字符串输入、整数问题) { 布尔校验输入; 对于(问题=0;问题,java,input,Java,Input,我的作业在最上面,这就是我所拥有的。我现在无法编译它。我不知道我哪里出错了 public class QuizCheck { /** Checks whether a string of quiz answers is valid. It must contain an answer A, B, C, or D for each expected answer, or an X to indicate that no answer was provi

我的作业在最上面,这就是我所拥有的。我现在无法编译它。我不知道我哪里出错了

public class QuizCheck
{
   /**
      Checks whether a string of quiz answers is valid. It must 
      contain an answer A, B, C, or D for each expected answer, or an 
      X to indicate that no answer was provided.
      @param input the answer string
      @param questions the number of questions in the string
      @return true if the string was valid, false otherwise
   */


public static boolean checkInputs(String input, int questions)
{
    boolean checkInputs;
    for (questions = 0; questions < input.Length(); counter--)
    {
        int letter = word.charAt(questions);
        if (letter == 'A' && letter == 'B' && letter == 'C' && letter == 'D' && letter == 'X')
        {
            checkInputs=true;

        } 
        else 
        {
           checkInputs=false;
        }
    }
    if(isInSet=true)
    {
       System.out.print("True");
    }
    else
    {
       System.out.print("False");
    }
}
字母
不能同时是'A'、'B'、'C'、'D'和'X',因此此表达式总是
false
。请使用
|
而不是
&

您还有一个问题,就是您根本没有在方法中使用的
isInSet
。我认为这应该是

if (letter == 'A' && letter == 'B' && letter == 'C' && letter == 'D' && letter == 'X')

最后,您必须
返回值,而不仅仅是打印值。您的方法类型为
布尔值,因此它必须始终返回一个值或引发异常。

首先,输入不能是
'A'
'B'
,并且…逻辑不正确。您需要逻辑or运算符:

if(checkInputs)
第二,当与
true
进行比较时,不要使用赋值运算符
=
。使用
=
来比较值

if (letter == 'A' || letter == 'B' || ...
或者,因为它已经是一个
布尔值

if (isInSet == true)
此外,您已声明方法返回一个
布尔值
,但当前没有返回任何内容。返回一些内容--可能是
checkInputs


现在还不清楚
isInSet
从何而来。这真的意味着
检查输入吗?

以下是有意义且有效的代码(仅适用于您的方法):

返回checkInputs;

•首先,
isInSet
不是您定义的变量,因此您需要将其更改为
checkInputs
。 •其次,您最初没有初始化
checkInputs
,因此它也会给您一个错误。同样,当您返回它时,您需要先初始化它。这是因为如果for循环中断,它可能永远不会有值。它需要有一个确定的值。因此我更改了
布尔checkInputs
to
boolean checkInputs=true;
。这样,除非另有说明,否则它将为true,这将是当任何字母不适用于它时。它现在将始终具有true或false的值

•上次编译错误是
int letter=word.charAt(问题);
应该是
int-letter=input.charAt(问题);


你的逻辑 应该是

if(isInSet=true)
if (letter == 'A' && letter == 'B' && letter == 'C' && letter == 'D' && letter == 'X')
您应该比较布尔值,而不是设置布尔值

应该是

if(isInSet=true)
if (letter == 'A' && letter == 'B' && letter == 'C' && letter == 'D' && letter == 'X')
字母不能是
'A'
'B'
'C'
'D'
'X'
。如果要测试字母是否为其中任何一个,请使用
|
:OR逻辑运算符,而不是
&
:and逻辑运算符

但是,假设结构实际上应该是这样的:

if (letter == 'A' || letter == 'B' || letter == 'C' || letter == 'D' || letter == 'X')
这样,它将检查是否有任何字母不等于任何已接受的字母,如果是这种情况,则输入无效

如果你反其道而行之,检查是否有任何字母与例外字母相等,那么有些字母可能有效,有些可能无效,检查起来会更复杂

您没有使用参数
questions
。您只是在for循环中将其立即更改为0。因此,首先,检查
输入
字符串中的答案是否与问题数量相同:

if (!(letter == 'A' || letter == 'B' || letter == 'C' || letter == 'D' || letter == 'X'))
{
    checkInputs = false;
}
 if (input.length() == questions) {
     // test the letters
 } else {
     return false; }
其次,在for循环中,创建一个新变量作为for循环计数器,并将其从0计数到问题数:

if (!(letter == 'A' || letter == 'B' || letter == 'C' || letter == 'D' || letter == 'X'))
{
    checkInputs = false;
}
 if (input.length() == questions) {
     // test the letters
 } else {
     return false; }
for(int-question=0;question
不可能为真,因为一个字符一次只能是一个字符,而不是6个字符 (可能是| | as或?)

什么是isInSet?
此外,这应该是isInSet==true或只是isInSet

您缺少的技能如下:使用的运算符不正确,函数类型错误。 如果我们看一下您键入的布尔函数类型,这意味着它在函数中应该返回true或false。 如果不存在返回值,则应将其重命名为void,表示不返回值。 不使用and运算符(&&),而应使用or运算符(| |),因为and运算符意味着如果所有表达式都为true,则执行代码。 如果至少有一个表达式为true(即您要使用的表达式),则or运算符将执行代码。 if(isInSet=true)将一直执行,因为=运算符将值分配给它的右边。 因此,它检查的唯一内容是:如果将true指定给isInSet,则执行下面的代码,该代码将始终使其为true


应该是if(isInSet==true)。==运算符检查右侧是否等于左侧。

编译错误是什么?我修复了逻辑错误,将其更改为返回而不是打印。现在唯一的错误是int letter=word.charAt(问题);@user3038538 change
word.charAt(问题)
input.charAt(问题);
这就是我在看到你回答之前所做的。它现在正在编译。但是当它运行时,如果在
 if (input.length() == questions) {
     // test the letters
 } else {
     return false; }
for (int question = 0; question < questions; question++)
for (questions = 0; questions < input.Length(); counter--)
if (letter == 'A' && letter == 'B' && letter == 'C' && letter == 'D' && letter == 'X')
if(isInSet=true)