2017-04-05 10 views
0

初心者のプログラマー、私は現在、配列と変数をとり、2つを比較します。宣言された変数が配列内にあれば、配列はすべての数値を出力します変数に含まれている数値の他に配列内にあります。これは正常に機能しています。さらに、私が今やりたいことは、私が書いたコードを再利用のための機能的なメソッドに入れておくことですが、私は現在そのようなことに固執しています。最終的な結果は、新しい17の配列が表示され、数字17を含まないことになります。 ここに私のコード例があります。可変メソッド呼び出しと比較した配列

public class arrayTest 
{ 
    public static void main(String [] args) 
    { 
     int[]arrayA = {2,4,8,19,32,17,17,18,25,17}; 

     int varB = 17; 

     for(int B = 0; B < arrayA.length; B++) 
     { 
     if(arrayA[B] != varB) 
     { 
      System.out.print(arrayA[B] + " "); 
     } 

     } 
    } 

     public static int newSmallerArray(int[] A, int b) 
     { 

     } 
} 
+0

なぜ戻り値の型はintですか?メインの方法でやったように印刷してはいけませんか?言い換えれば、戻り値の型が適切であるか、配列を返すことになります。 –

+1

小さい配列を返すか、それとも印刷するだけですか?また、あなたのIDEには、おそらく –

+0

の「メソッドを抽出する」というリファクタリングオプションがあります。この記事を参照してください[link](http://stackoverflow.com/questions/5098540/delete-element-from-array)あなたの質問と同じです。 –

答えて

0

メインロジックを含むコードをリファクタリングしてメソッドに移動するだけです。 IDEを使用するのは簡単です。それ以外の場合は、コードを新しいメソッドにコピーし、必要な引数を渡す必要があります。

public class arrayTest 
{ 
    public static void main(String [] args) 
    { 
     int[] arrayA = {2,4,8,19,32,17,17,18,25,17}; 
     int varB = 17; 
     // Call with the array and variable you need to find. 
     newSmallerArray(arrayA, varB); 
    } 

    public static void newSmallerArray(int[] arrayA, int varB) 
    { 
     for(int B = 0; B < arrayA.length; B++) 
     { 
     if(arrayA[B] != varB) 
     { 
      System.out.print(arrayA[B] + " "); 
     } 
     } 
    } 
} 
+0

@ scary-wombatが示唆するように、Javaの命名規則に従う必要があります。 – prasanth

2

この時点

int[]arrayA = {2,4,8,19,32,17,17,18,25,17}; 
    int varB = 17; 

であなたが

newSmallerArray(arrayA, varB); 

を呼び出すことができ、その後、この方法では、あなたが同じループのコードを持っているだろうが、変数名が

を変更した、[OK]を
for(int B = 0; B < A.length; B++) 
    { 
    if(A[B] != b) 
    { 
     System.out.print(A[B] + " "); 
    } 
    } 

今や厄介なeは、私はまた、Javaの命名規則に固執するだろう、intを返すようにこのメソッドを宣言したが、ので、多分返し、それは次のボイド

public static void newSmallerArray(int[] A, int b) 

を返す作ることは何もありませんしているされて

返す完全なコードサンプル入力配列良好名

public static void main(String[] args) throws SocketException { 

    int[]arrayA = {2,4,8,19,32,17,17,18,25,17}; 
    int varB = 17; 

    int [] na = newSmallerArray(arrayA, varB); 
    // test 
    System.out.println(); 
    for(int b = 0; na != null && b < na.length; b++) 
    { 
     System.out.print(na[b] + " "); 
    }   
} 

private static int[] newSmallerArray(int[] a, int b) { 

    int count = 0; 
    for(int x = 0; x < a.length; x++) 
    { 
     if(a[x] != b) 
     { 
      System.out.print(a[x] + " "); 
      count++; 
     } 
    } 

    if (count > 0) { 
     int[] newArray = new int [count]; 
     count = 0; 
     for(int x = 0; x < a.length; x++) 
     { 
      if(a[x] != b) 
      { 
       newArray[count++] = a[x]; 
      } 
     }   

     return newArray; 
    } 

    return null; 

} 
を用い

のサブセット

+0

配列の中に17を除いた配列を返すようにしています – Clark1776

+0

@ Clark1776あなたは書いたコメントで投稿を更新する必要があります。 –

+0

私の編集した答えを参照 –

1

私はあなたがJavaの8+を使用していると仮定すると、次にもう

配列に17せずに配列を返すことをしたいと思い、IntStreamfilterアウトb値を使用します。同様に、

public static int[] newSmallerArray(int[] arr, int b) { 
    return IntStream.of(arr).filter(x -> x != b).toArray(); 
} 

Java 8の機能を使用しない場合は、除外する値の出現を数えます。同様に、

private static int countValue(int[] arr, int b) { 
    int count = 0; 
    for (int value : arr) { 
     if (value == b) { 
      count++; 
     } 
    } 
    return count; 
} 

これを使用して、新しいアレイのサイズを正しく設定し、値をコピーします。同様に、

public static int[] newSmallerArray(int[] arr, int b) { 
    int[] ret = new int[arr.length - countValue(arr, b)]; 
    for (int i = 0, p = 0; i < arr.length; i++) { 
     if (arr[i] != b) { 
      ret[p++] = arr[i]; 
     } 
    } 
    return ret; 
} 
関連する問題