2016-08-17 11 views
0

私はこの挑戦にhttps://www.hackerrank.com/challenges/java-if-elseHackerRankの挑戦、私は間違って何をしていますか?

を行うにしようとしています、私はこれをやってみました:

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でこれを実行し、それが正常に動作しますが、ここで、私は唯一の3つのテストケースが権利を取得。私は間違って何をしていますか?私はスキャナのものに圧倒されました。私はまだ自分の読書でそのことをカバーしていませんでした。

+2

と "&" 何を意味するのでしょうか? – TomekK

+1

@TomekKこの文脈では、非短絡AND演算子です。 –

+1

ヒント: '(x%2 == 0)'を繰り返しチェックするのは無意味です。あなたはすでにそれが真実でないかどうかをチェックしました。それは他のすべての場合を意味しています。それはすでに真です。 –

答えて

1

& &を条件演算子として使用する必要があります。また、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); 

    } 

EDIT:範囲が非伝統的な順序であることを見て、それは問題ありません。前に何が間違っていたのか分からない。

+1

"エレガントなソリューションを下記に示します"問題の制約事項を読んだら、さらに簡素化できます。また、else {if}の代わりに 'else if'を使用します。 –

+0

ああ、申し訳ありませんが、私の悪い、他のものが提供されている、ちょうどここにコードを入れて、与えられた部分を修正したくない場所に記入するようにOPを欲しかった。 –

+2

範囲が間違っていますか?上のコードを実行すると、すべてのテストケースが渡されます –

0

上記の答えは、私は(低すぎる担当者)コメントすることはできませんが、それは最初にチェックした後も、毎回あるかどうかをチェックする必要はありません^^

優れています。あなたはそれが奇妙でないなら、それは均等であると仮定することができます。

あなたのコードを書くより簡単/簡単な方法は次のとおりです。演算子「に等しい」を使用して、あなたの問題を解決できる側「未満」であなたの順序を変更しないことにより

String answer = ""; 
    if ((x % 2) != 0) {//if odd 
     answer = "Weird"; 
    } 
    else { //if even 
     if ((x > 1) && (x < 6)) { 
      answer = "Not Weird"; 
    } 
     else if ((x > 5) && (x < 21)) { 
      answer = "Weird"; 
    }  
     else if (x > 20) { 
      answer = "Not Weird"; 
    } 
System.out.println(answer); 

。あなたのコードがOKである

+0

"上記の答えはよかった^^"私の画面上にあなたの上に3つの答えが表示されます。あなたの答えを編集して、あなたが参照している特定の回答へのリンクを追加してください(その回答の下にある "共有"リンクを使用してURLを取得してください)。 –

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"); 

をする "場合" "ならば、他の" ちょうどに変更。

2

ハッカー挑戦、私は間違っていますか?

あなたは標準入力から数を読んでいないので、テストは、すべてのテストが開始するものである(これにより

int x; 
x = 34; 

を交換して34

数の出力をチェックしていますwith)

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"); 
関連する問題