2017-01-27 6 views
1

私は数週間は自分でJavaを学習してきましたが、私はオンラインで見つけた1つの課題の質問に完全に立ち往生しました。私はthouroughly他の誰かがそれを尋ねたかどうか見るためにGoogleを検索したが、私は何かを見つけるように見えない。私は先生がいないので、StackOverflowの誰かが私を助けてくれるのだろうかと思っていました。初心者が配列に問題がある

私のテストケースが失敗し続けるため、私の方法の1つに問題があります。正確に何が間違っているのかよく分かりません。

[2,8,3,9,7]のような配列を入力すると、基本的に[2,3,7,8,9]のように出てきます。しかし、私がここに書いたこの書き方が貧弱なため、冒頭に余分な要素が残っているので、結果は[2、2、3、7、8、9]となります。このメソッドで私の具体的な目標は、重複を含む "高"と等しいかそれ以上のすべての値を含む配列を見つけて返すことです。この配列の長さは、 'range'の要素数と同じでなければならず、したがってメソッド名になります。

私はこの最初の要素の問題を解消するために取るべき次のステップに向けて適切に指示されたかっただけです。コードはおそらくひどくて面倒だと分かっていますので、私にご負担ください。

ありがとうございます。すべての助けに感謝します!

public static int[] range(int[] a, int low, int high) { 
    if (a == null || a.length == 0) { 
    throw new IllegalArgumentException(); 
    } 

    int[] newArr = new int[0]; 
    if (low <= high) { 
    if (a.length == 1 && low >= a[0] && high <= a[0]) { 
     return a; 
    } 

    for (int i : a) { 
     if (i >= low && i <= high) { 
      int[] duplicate = new int[(a.length + 1)]; 
      int count = 0; 
      for (int num : a) { 
       duplicate[count] = num; 
       count++; 
      } 
      duplicate[count] = i; 
      return duplicate; 
     } 
    } 
    } 
    if (newArr.length > 1) { 
    Arrays.sort(newArr); 
    } 
    return newArr; 

}

+1

'Arrays.sort'(と' null'/'length'チェック)が必要です。なぜ他のコードはすべて? –

+0

*本書では別のものを求めているので、単にメソッドをソートしようとしているだけではありません。あなたは何をしようとしていますか? – shmosel

+1

@shmoselに続いて、まさにあなたは何をしようとしていますか?また、重複配列を作成し、必要以上に1つを割り当てるときは、新しいint [a.length]を実行する必要があります。 – okaram

答えて

2

私が正しくあなたの仕様書を読めば、あなたは、入力配列a、2つの値lowhighを取ります。あなたは、(包括的に)lowhighの間の要素だけを持つ新しい配列を返す必要があります。

あなたは、要素を(テストケースの中で、要素が昇順でソートされている場合を除いて)どこに書いてもいけません。注:必要に応じて、sort()メソッドを簡単に追加できます。

主な問題は、返される配列のサイズを決定する必要があることです。それを行うには多くの方法があります。簡単にするために、私は2つのループでそれを行います。

public static int[] range(int[] a, int low, int high) { 
    int result_size=0; 
    int i, j; 
    // determine result size 
    for (i=0; i< a.length;i++) { 
    if ((low <= a[i]) && (a[i] <= high)) result_size++; 
    } 
    // build the result array 
    int [] result = new int[result_size]; 
    j = 0; // destination 
    for (i = 0; i < a.length; i++) { 
    if ((low <= a[i]) && (a[i] <= high)) { 
     result[j] = a[i]; 
     j++; 
    } 
    } 
    return result; 
} 
+0

ありがとう! 2番目のfoorループは、すでに配列やループロジックについて私にもっと多くのことを教えています。これはまさに私のコードをクリアするために必要なものです。 – Ryu

関連する問題