HackerRank挑战,我做错了什么?

时间:2016-08-17 22:06:03

标签: java

我正在努力做到这一挑战https://www.hackerrank.com/challenges/java-if-else

我试过这样做:

public class Main {
    public static void main(String[] args) {
        int x;
        x = 34;

        if ((x  % 2) != 0) {
            System.out.println("Weird");
        } else if (((x % 2 == 0) & ((x >= 2) & (5 >= x)))) {
            System.out.println("Not Weird");
        } else if (((x % 2 == 0) & ((x >= 6) & (20 >= x)))) {
            System.out.println("Weird");
        } else if ((x % 2 == 0) & (x > 20)) {
            System.out.println("Not Weird");
        }
    }
}

我在Intellij中运行它并且它工作正常,但在这里,我只得到三个测试用例。我究竟做错了什么?我对扫描仪的东西感到不知所措,因为在我自己的阅读中我还没有覆盖那些东西。

4 个答案:

答案 0 :(得分:2)

  

HackerRank挑战,我做错了什么?

您没有从标准输入中读取数字,因此测试都是检查数字34的输出。

替换

int x;
x = 34;

有了这个(这是测试的开始)

Scanner sc=new Scanner(System.in);
int x=sc.nextInt();       

这样做,你的测试顺利通过。

替代解决方案

boolean even = x % 2 == 0;
boolean weird = !even || (even && (6 <= x && x <= 20));
System.out.println(weird ? "Weird" : "Not Weird");

答案 1 :(得分:1)

你应该使用&amp;&amp;作为条件运算符。你也不需要if语句检查它是否是偶数,因为在他们的代码中提供的第一个if语句已经检查它是否是奇数。如果它不是(只有其他选项是偶数),则转到else语句。下面列出了优雅的解决方案。

扫描仪只是传入的内容,不用担心它,只需使用值n,它们就会将值传递给代码。

    public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();            
        String ans="";
        if(n%2==1){ // only if it's odd
          ans = "Weird";
        }
        // only enters else if the value is even
        else{
            if (n >= 6 && n <= 20) { // between 6 and 20
                ans = "Weird";
            } else { // only other option is greater than 20 
                     // or below 6 which includes 2 through 5
                ans = "Not Weird";
            }

        }
        System.out.println(ans);

    }
编辑:看到他的范围是非传统的顺序,所以很好。不确定以前出了什么问题。

答案 2 :(得分:0)

以上答案更好^^

我无法发表评论(代表太低),但您不需要在第一次检查后检查它是否均匀。你可以假设,如果它不是奇数,那么它是偶数。

编写代码的更简单/更简单的方法是:

function Product(naam, aantal) {
    var self = this;
    self.naam = naam;
    self.aantal = aantal;
}

function komaan() {
    var self = this;
    self.lijst = ko.observableArray([
        new Product("Flesje Tonic", 6),
        new Product("Gin", 6)
    ]);
}

ko.applyBindings(new komaan());

不使用&#34;等于&#34;运营商和更改您的订单&#34;少于&#34;你可以解决你的问题。

答案 3 :(得分:0)

您的代码没问题,已经通过了HackerRank测试,在其他地方:

if ((n % 2 == 0) & ((n >= 2) & (5 >= n))) 
    System.out.println("Not Weird");
if ((n % 2 == 0) & ((n >= 6) & (20 >= n))) 
    System.out.println("Weird");
if ((n % 2 == 0) & (n > 20)) 
    System.out.println("Not Weird");

刚刚更改为“else if”到“if”。