测试字符串的输入

时间:2013-11-26 22:59:31

标签: 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 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");
    }
}

我的任务位于顶部,这就是我所拥有的。我现在无法编译它。我不知道我哪里出错了。

5 个答案:

答案 0 :(得分:1)

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

letter不能同时为'A','B','C','D'和'X',因此此表达式始终为false。使用||代替&&

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

if(checkInputs)

最后,您必须return值,而不仅仅是打印它。您的方法属于boolean类型,因此它必须始终返回一个或抛出异常。

答案 1 :(得分:1)

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

public static boolean checkInputs(String input, int questions)
{
    boolean checkInputs = true; // intially true, false if proven otherwise
    if (input.length() == questions) // if proper # of answers to # of questions
    {
        for (int question = 0; question < questions; question++)
        {
            int letter = input.charAt(question);
            if (!(letter == 'A' || letter == 'B' || letter == 'C' || letter == 'D' || letter == 'X'))
            {
                checkInputs = false;
            }
        }
    }
    else
    {
        return false; // # of answers != # of questions, so return false
    }

    return checkInputs;
} 

您的编译错误

for (questions = 0; questions < input.Length(); counter--)

•您需要将input.Length()更改为input.length()

•您还使用未定义的变量counter。您需要将counter--替换为questions++

•如果你将它保持为--,你将得到一个ArrayIndexOutOfBounds错误,因为你从0开始,然后进入底片,你不能为字符串位置做。

•你也没有返回任何东西,即使你的方法需要返回一个布尔值。

我改变了

if(isInSet=true)
{
    System.out.print("True");
}
else
{
    System.out.print("False");
}

return checkInputs;

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

•您的上一次编译错误是int letter = word.charAt(questions);,应该是
int letter = input.charAt(questions);


你的逻辑

if(isInSet=true)

应该是

if(isInSet==true)

你应该比较一个布尔值,而不是设置一个布尔值。

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

应该是

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

一封信不能是'A''B''C''D''X'。如果要测试字母是否为其中任何一个,请使用||:OR逻辑运算符,而不是&&:AND逻辑运算符。

但是,if-structure实际应该是什么:

if (!(letter == 'A' || letter == 'B' || letter == 'C' || letter == 'D' || letter == 'X'))
{
    checkInputs = false;
}

这样它将检查是否有任何字母不等于任何接受的字母,如果是这样的话,则输入无效。

如果你以相反的方式做到了,它检查了任何字母DO是否等于例外字母,那么有些可能是有效的,有些可能是无效的,检查会更复杂。

您没有使用参数questions。您只是在for循环中将其更改为0。首先,检查input字符串中是否存在与问题一样多的答案:

 if (input.length() == questions) {
     // test the letters
 } else {
     return false; }

其次,在你的for循环中,创建一个新变量作为for循环计数器,并将其从0计数到问题数:

for (int question = 0; question < questions; question++)

答案 2 :(得分:1)

for (questions = 0; questions < input.Length(); counter--)

是一个无限循环

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

永远不会是真的,因为char一次只能是一个不是6的char (也许|| as或?)

if(isInSet=true)

什么是isInSet? 这也应该是isInSet == true或者只是isInSet

答案 3 :(得分:0)

首先,输入不能是'A' 'B' ...逻辑错误。你想要逻辑或运算符:

if (letter == 'A' || letter == 'B' || ...

其次,与true比较时,请勿使用赋值运算符=。使用==来比较值。

if (isInSet == true)

或者,因为它已经是boolean

if (isInSet)

此外,您已声明您的方法返回boolean,但您目前没有返回任何内容。返回一些东西 - 可能是checkInputs值。

目前还不清楚isInSet来自哪里。这真的是checkInputs吗?

答案 4 :(得分:0)

您缺乏的技能如下:不正确使用运算符和错误的函数类型。 如果我们查看你输入boolean的函数类型。这意味着假设在函数中返回true或false。 如果不存在返回值,则应将其重命名为void,而不是返回值。 您不应该使用和运算符(&amp;&amp;)来使用或运算符(||),因为运算符意味着如果所有表达式都为真,则执行代码。 如果至少有一个表达式为true,那么or运算符将执行代码,这是您要使用的表达式。 if(isInSet = true)将一直执行,因为=运算符将值赋给它的右边。 所以它唯一检查的是:如果为isInSet分配了true,则执行下面的代码,该代码将始终为true。

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