我正在做一个黑客网络挑战,其中n是一个整数输入。条件是:
我确定代码具有逻辑性,并且不认为其中存在语法。它给出了正确的响应,并且黑客网络仍然说出了它的错误,因此我来这里看看是否有人可以看到问题所在
public static void main(String[] args)
{
int N = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
if (N % 2 != 0 || N % 2 == 0 && N >= 6 && N <= 20)
{
System.out.print("weird");
}
else
{
System.out.print("not weird");
}
}
答案 0 :(得分:1)
问题是您的else
条件下的逻辑,它还会捕获N
小于2的值。
if (N % 2 != 0)
{
System.out.print("weird");
}
else if (N >= 2 && N <= 5 || N > 20)
{
System.out.print("not weird");
}
else if (N >= 6 && N <= 20)
{
System.out.print("weird");
}
else
{
// NOTE: if the code still fails, remove this else condition
System.out.print("unexpected value of N");
}
注意:要使您的代码通过Hackernet任务,您可能必须完全删除else
条件。我添加它是为了完整性,但是Hackernet可能会测试N=1
来查看是否没有打印出来。
答案 1 :(得分:1)
阅读此条件:
if (N % 2 != 0 || N % 2 == 0 && N >= 6 && N <= 20)
为
if (N % 2 != 0 || (N % 2 == 0 && N >= 6 && N <= 20))
然后查看运算符优先级如何改变行为并产生期望的结果。
答案 2 :(得分:0)
您可以尝试
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
int n = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
if (n % 2 == 1 || (n >= 6 && n <= 20)) {
System.out.println("Weird");
} else {
System.out.println("Not Weird");
}
scanner.close();
}
答案 3 :(得分:0)
检查以下内容
public static void main(String[] args)
{
int N = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
if(N%2!=0) {
System.out.print("weird");
}else if(N>=2 && N<=5) {
System.out.print("not weird");
}else if(N>=6 && N<=20) {
System.out.print("weird");
}else if(N>20) {
System.out.print("not weird");
}
}
答案 4 :(得分:0)
在技术方面:首先阅读 precedence of java operators,然后使代码更易于阅读。
如果将多个条件放入一个条件中,则没有有用。您可以自己查看:您认为代码是正确的,但可能并非如此。现在,您希望其他人向您解释您过于复杂的代码。当然,所有其他答案都可以为您完成所有任务……但除此之外:
这里的“真实”答案是:了解如何测试您的代码。
编写一个方法boolean isWeird()
来获取一个数字,然后根据您的要求返回true / false,而不是使用一个主函数来问一个数字,然后再做决定。
然后只需在所有合理的情况下测试该方法。然后检查结果是否符合预期。
使用JUnit,您可以编写类似
的内容 assertThat(isWeird(1), true);
assertThat(isWeird(21), true);
assertThat(isWeird(22), true);
...
理想情况下,在实现该方法之前 编写此类测试。然后,您实现了所有条件,并且所有失败的检查都告诉您您做错了事。
答案 5 :(得分:0)
我觉得,在if(N%2!= 0 || N%2 == 0 && N> = 6 && N <= 20)条件下,您正在使用&&验证奇数和偶数和||操作员。如果(N%2!= 0 ||(N%2 == 0 && N> = 6 && N <= 20))可以检查条件吗?如果N为奇数,则将打印怪异的东西;如果N为偶数,且其值在6和20(含)以下,则将打印怪异的东西。
答案 6 :(得分:0)
您已经在这里有了很多答案,但是如果您从逻辑上考虑您的实际需求,则可以轻松地将其分解。
看起来唯一的"Not Weird"
打印输出是2
,4
甚至偶数> 20
所以一个例子可能是这样的:
if (n % 2 == 0) {
if ((n >= 2 && n <= 5) || (n > 20)) {
return "Not Weird";
}
}
return "Weird";