2017-11-08 8 views
-2

すべての要素が0より大きく、最大偶数より小さいすべての偶数が配列内にある場合、配列は完全であると定義されます。 java tricky questions complete array

のように、{2、3、2、4、11、6、10、9,8}が完了しています。すべての要素が0より大きく0

bです。最大偶数は10 cです。 10(2、4、6、8)未満のすべての偶数が配列内にあります。

ただし、偶数4がないため、{2,3,3,6}は完全ではありません。 {2,3,4,3,6}は、負の数を含んでいるため、完全ではありません。 配列の引数が完全な配列である場合、1を返すisCompleteという関数を作成します。それ以外の場合は0を返します

これは私が解決しなければならない質問ですが、私はこの質問の良い論理を見つけることができません。ここでは、最初のループと2番目のループの配列から最大の偶数を見つけました。最大の偶数よりも少ない偶数をすべてチェックしなければなりません。

for(int c = 2; c<=maxeven;c=c+2){ 
    count = 0; 
    for(int b = 0;b<i.length;b++){ 

あなたの問題を解決する必要があること:私のコードは次のように、第二のループに

public class Complete { 
    public static void main(String[] args) { 
    System.out.println(isComplete(new int[]{2,3,2,4,11,6,10,9,8})); 
    System.out.println(isComplete(new int[]{2,3,3,6})); 
    System.out.println(isComplete(new int[]{2,-3,4,3,6})); 
    } 

    private static int isComplete(int[] i) { 
    int set = 1; 
    int maxeven = 0; 
    int count = 0; 
    for(int a = 0; a < i.length; a++) { 
     if(i[a] < 0) { 
     set = 0; 
      break; 
     } 
     if(i[a]%2 == 0 && i[a] > maxeven) { 
      maxeven = i[a]; 
     } 
    } 

    for (int c = 2; c <= maxeven; c=c+2) { 
     for(int b = 0; b<i.length; b++) { 
     if (c == i[b]) { 
      count++; 
     } 
     } 
     if (count > 0) { 
     set = 1; 
     } else { 
     set = 0; 
     break; 
     }   
    } 
    return set; 
    } 

} 
+0

まず、 'set = 0;'と 'break'を置き換えることができます。 'return 0;と – Stefan

+0

クラス名は大文字で始まります – Michu93

+0

ああ、訂正しました。ありがとうございます –

答えて

1

以下に設定count = 0ある,,,,,,,,,,私を助けてください。 count = 0がなければ、 "2"を探した後でカウントは> 0になるので、 "4"がなくても "4"を探すとcount> 0になります。

+0

OK、それは動作しますが、配列のいくつかの数字が負の場合にも私は間違った答えを得ています。例えば、この配列{2、-3,4,3,6}))では、-3 <0なので0を出力する必要があります。私はbreak文を使って最初のループでこの条件を述べました。まだ動作していませんか? –

+0

'set = 0;'と 'break;'を 'return 0;'に置き換えます(最初のforループの中断はそのforループから抜け出すので、2番目のforループを入力します。 。返り値0は、メソッドを完全に終了したことを意味します。 – Stefan

+0

ありがとうございました。... –

2

私は私はこのロジックに従っている

最大未満のすべての偶数偶数を確認しなければならない第一のループおよび 第二ループ内の配列から最大の偶数を見つける有しますこれを書いた。 condtion 1(すべての要素> 0)の妥当性をチェックしており、同じループ内で最大の偶数を見つける。 2番目のループでは、最大の偶数ヌーベルよりも小さい偶数がすべて存在するかどうかを確認しています。

public class Complete { 
    public static void main(String[] args) { 
     System.out.println(isComplete(new int[] { 2, 3, 2, 4, 11, 6, 10, 9, 8 })); 
     System.out.println(isComplete(new int[] { 2, 3, 3, 6 })); 
     System.out.println(isComplete(new int[] { 2, -3, 4, 3, 6 })); 
    } 

    private static int isComplete(int[] i) { 
     int maxEven = 0; 

     for (int element : i) { 
      if (element <= 0) { 
       return 0; 
      } 
      if (element % 2 == 0) { 
       if (element > maxEven) { 
        maxEven = element; 
       } 
      } 
     } 

     for (int a = 2; a < maxEven; a = a + 2) { 
      if (!hasElement(i, a)) { 
       return 0; 
      } 
     } 
     return 1; 
    } 

    private static boolean hasElement(int[] i, int a) { 
     for (int element : i) { 
      if (element == a) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 
+0

これは良いです。ありがとうございます......しかし私の場合、配列内の偶数要素をチェックするための別の関数を作ることは許されません。それでも、それは私のことではなく、とても良い方法です。 –

+0

配列をarraylistに格納する場合は、indexOfメソッドを使用して要素が存在するかどうかを確認できます – abhisheakd