2017-10-09 8 views
-1

を動作していませんか? は、ここで私はそれが正常に動作しますが、なぜ..... whileループで動作していない第三内側のwhileループを置き換えることによって、forループを試してみましたか?本当の理由を教えてくれませんか?第三内側のwhileループループは、なぜ私に教えてください動作していないながらブローコードでは、内側第三の

import java.util.Scanner; 
public class MergeArray { 

    void arrayInitialization(Scanner arg) { 
     //entering test cases 
     System.out.println("enter test cases"); 
     int t = arg.nextInt(); 
     int k, l, i; 
     k = 0; 
     l = 0; 
     i = 0; 
     //outer while loop 
     while (t-- > 0) { 
      //initializing a1[]'s size 
      System.out.println("enter a1[]'s size"); 
      int as1 = arg.nextInt(); 
      int a1[] = new int[as1]; 
      //inner while loop-1 
      while (as1-- > 0) { 
       System.out.println("enter a1[]'s elements"); 
       a1[i] = arg.nextInt(); 
       System.out.print(a1[i]); 
       i++; 
      } 
      i = 0; 
      //initializing a2[]'s size 
      System.out.println("enter a2[]'s size"); 
      int as2 = arg.nextInt(); 
      int a2[] = new int[as2]; 
      //inner while loop-2 
      while (as2-- > 0) { 
       System.out.println("enter a2[]'s elements"); 
       a2[i] = arg.nextInt(); 
       System.out.print(a2[i]); 
       i++; 
      } 
      System.out.println(); 
      int a3[] = new int[a1.length + a2.length]; 
      int size = as1 + as2; 
      //inner while loop-3 
      while (size-- > 0) { 
       if (k < a1.length) 
        a3[l] = a1[k]; 
       if (k < a2.length) 
        a3[l + 1] = a2[k]; 
       k++; 
       l += 2; 
      } 
      for (int j = 0; j < (a1.length + a2.length); j++) { 
       System.out.print(a3[j]); 
      } 
     } 
    } 
    public static void main(String[] args) { 
     MergeArray ma = new MergeArray(); 
     Scanner sc = new Scanner(System. in); 
     ma.arrayInitialization(sc); 
    } 
} 

解決策は多すぎますが見つかりませんでした。ここではwhileループを使用しています。なぜならwhileループはforループの代わりに速く動作することがわかっているからです。

+0

あなたはwhileループの内側にこれらの配列を初期化はなぜ? – Duke

+0

助けをデバッグするための検索、常に明確にあなたのコードを実行すると何が現在行うことになっていることになっているものを明記してください。さもなければ、あなたのコードが何をすべきかを理解するために、あなたのコードを深く掘り下げる必要があります。 – Zabuza

答えて

1

あなたはas1as2の大きさを減少しているので、それは動作しません。どのようになりますか

int size = as1 + as2; // size = 0 + 0; 

代わりに、配列の長さなどを使用することができます。

int size = as1.length + as2.length; 
0

ミュラKの答えは右ですが、このような配列を初期化しよう:

 //init a1 
     System.out.println("enter a1[]'s size"); 
     int a1[] = new int[arg.nextInt()]; 

     //fill a1 
     for (int i = 0; i < a1.length; i++) { 
      System.out.println("enter element " + i + " of a1[]"); 
      a1[i] = arg.nextInt(); 
     } 

     //init a2 
     System.out.println("enter a2[]'s size"); 
     int a2[] = new int[arg.nextInt()]; 

     //fill a2 
     for (int i = 0; i < a2.length; i++) { 
      System.out.println("enter element " + i + " of a2[]"); 
      a2[i] = arg.nextInt(); 
     } 

     //init a3 
     int a3[] = new int[a1.length + a2.length]; 

     //merge a1 and a2 into a3 
     for (int i = 0; i < a1.length; i++) { 
      a3[i] = a1[i]; 
     } 
     for (int i = 0; i < a2.length; i++) { 
      a3[a1.length + i] = a2[i]; 
     } 

     //print 
     for (int i : a3) { 
      System.out.print(i); 
     } 
関連する問題