2016-06-30 5 views
2

あるアレイを別のアレイにコピーするコードを書く必要があります。順次0に等しいすべての要素、 ロジックを持つ配列を別の配列にコピーする方法

  • 連続し、その後0、
  • より
    1. 大きいすべての要素

      をコピーして、連続的にすべての要素が0未満

    であるここに私の失敗した試みです

    public static void main(String[] args) 
    { 
        int[] arr = new int[100]; 
        Random random = new Random(); 
    
        for (int i = 0; i < arr.length; i++) 
        { 
         int randNum = random.nextInt(600) - 350; 
         arr[i] = randNum; 
        } 
        int[] newArr = new int[100]; 
        for (int i = 0; i < arr.length; i++) 
        { 
         if (arr[i] > 0) 
         { 
          System.arraycopy(arr, arr[i], newArr, 0, 100); 
    
          // arraycopy() Not works! 
          // I tryed to compare each element in array greater than 0 
          // and copy it to newArr 
    
         } 
        } 
        System.out.println(Arrays.toString(newArr)); 
    

    なぜSystem.arraycopyが機能しないのですか?

  • +2

    'System.arraycopyの()'にコピーされているものをフィルタリングすることができません。正の値だけをコピーするには、チェックしなければならないので、3つのループが必要です。* First *は、正の値をコピーします。 * Second *、ゼロ値をコピーします。 * 3番目の*は、負の値をコピーします。 3つのステップ= 3つのループ。 – Andreas

    +0

    "コピー"とは、ある配列から別の配列に値を割り当てることを意味します。 'newArr [j] = arr [i]'、一度に1つの要素、それらの値をチェックします。 – Andreas

    答えて

    1

    あなたはセルごとに配列をコピーしています。インナーループは次のようになります。

    public static void main(String[] args) 
    { 
        int[] arr = new int[100], newArr = new int[100]; 
        int j=0; 
        Random random = new Random(); 
    
        for (int i = 0; i < arr.length; i++) 
        { 
         int randNum = random.nextInt(600) - 350; 
         arr[i] = randNum; 
        } 
    
        for (int i = 0; i < arr.length; i++) 
        { 
         if (arr[i] > 0){ 
          newArr[j]=arr[i]; 
          j++; 
         } 
        } 
    
        // and add code for numbers=0 and less than 0. So you should append code: 
        for (int i = 0; i < arr.length; i++) 
        { 
         if (arr[i] == 0){ 
          newArr[j]=arr[i]; 
          j++; 
         } 
        } 
    
        for (int i = 0; i < arr.length; i++) 
        { 
         if (arr[i] < 0){ 
          newArr[j]=arr[i]; 
          j++; 
         } 
        } 
    
        System.out.println(Arrays.toString(newArr)); 
    } 
    
    +0

    'for'ループで' j'を宣言することはできません。なぜなら、ゼロと負の値をコピーする次の2つのループでは使用できないからです。 – Andreas

    +0

    ローカル宣言です。 'j'変数はforループの終わりにガベージされ、次の変数に再宣言されます。これは、コードの読みやすさとモジュール化を改善するためです。コードの先頭に一度宣言することができます。 – morels

    +0

    次のループで 'j'が再宣言された場合、どのように初期値を割り当てますか?最初のゼロまたは負の値はどこで 'newArr'に置かれるべきですか? – Andreas

    0
    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.ResultSet; 
    import java.sql.SQLException; 
    import java.sql.Statement; 
    import java.util.Arrays; 
    import java.util.Random; 
    public class A{ 
         public static void main(String[] args) 
        { 
         int[] arr = new int[100]; 
         Random random = new Random(); 
         for (int i = 0; i < arr.length; i++) 
         { 
          int randNum = random.nextInt(600) - 350; 
          arr[i] = randNum; 
         } 
         int[] newArr = new int[100]; 
         int j=0; 
         for (int i = 0; i < arr.length; i++) 
    
         { 
    
          if (arr[i] > 0) 
          { 
           System.arraycopy(arr, i, newArr, j,1); 
           // arraycopy() Not works! 
           // I tryed to compare each element in array greater than 0 
           // and copy it to newArr 
           j++; 
          } 
         } 
    for (int i = 0; i < arr.length; i++) 
    
         { 
          if(arr[i]==0) 
          { 
           System.arraycopy(arr, i, newArr, j,1); 
           j++; 
    
          } 
         } 
    for (int i = 0; i < arr.length; i++) 
    
    { 
        if(arr[i]<0) 
          { 
           System.arraycopy(arr, i, newArr, j,1); 
           j++; 
          } 
    
         } 
         System.out.println(Arrays.toString(newArr)); 
    
         } 
        } 
    
    関連する問題