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");
}
}
我的任务位于顶部,这就是我所拥有的。我现在无法编译它。我不知道我哪里出错了。
答案 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)。 ==运算符检查右侧是否等于左侧。