2016-04-05 12 views
-1

配列は20要素のint配列を作成し、インデックス0からインデックス18までのランダムな整数で埋めてください。次に、-1を中央に挿入して配列全体を印刷します。しかし、私のコードには何か問題があります。配列の中間位置にintを挿入する

import java.util.Random; 

public class Zadanie5_3{ 

    public static void main(String[] args){ 

     Random rand = new Random(); 
     int[] tab = new int[20]; 

     for(int i = 0; i <= 18; i++){ 
      tab[i] = rand.nextInt(); 
     } 

     for(int j = 19; j > tab.length/2; j--){ 
      tab[j] = tab[j--]; 
      tab[tab.length/2] = -1; 

      System.out.println(tab[j]); 
     } 

    } 

} 
+1

出力を投稿することができます – Dimi

+0

中間要素に-1を挿入すると、配列を右にシフトしますか? – anaxin

答えて

0
import java.util.Random; 

public class Zadanie5_3 { 

    public static void main(String[] args){ 
     Random rand = new Random(); 
     int[] tab = new int[20]; 

     for(int i = 0; i <= 18; i++){ 
      tab[i] = rand.nextInt(); 
     } 

     for(int j = 19; j >= 9; j--){ 
      tab[j] = tab[j-1]; 
     } 

     tab[9] = -1; 

     // print 
     for(int i = 0; i <= 18; i++){ 
      System.out.println(tab[i]); 
     } 
    } 

} 

result: 

1956305001 
-2096126360 
98350219 
1446603176 
1822536231 
-585584710 
1907161554 
-1249344271 
330285354 
-1 
-2035667564 
935350135 
178577755 
1025860367 
-965180067 
1164224066 
1726709678 
1615705033 
-1258924041 
1

問題は2番目のforループです。

tab[j] = tab[j--];

j--そこで、各反復jの正解である代わりに、1

tab[j] = tab[j - 1]; 2だけ減少される1だけjの値を減少させます。

0

2つ目のforループを2つのループに分割する必要があります。最初のループは、配列の上半分を1つ上のインデックスにシフトします。 2番目のループは完全な配列を出力します。

最初のループでは、あなたの文を置く:

 tab[j] = tab[j--]; 

はしかし、あなたはj--が実際にjが低下するので、この文を調整する必要があります。この文でそれを置き換えます。これら二つのループの間で

 tab[j] = tab[j - 1]; 

を、あなたは途中でインデックスに-1を割り当てます。この操作はループには属しません。これは、一度だけ実行する必要があるためです。また、他の要素のシフトが完了した後にのみ実行する必要があります。これは、現在の中間にある要素を上書きするためです。

関連する問題