2017-02-14 13 views
0

コードはソートされた配列を出力すると想定されていますが、0を出力します。数値の代わりに0を出力する配列

例として、プログラムを実行するときに、メソッドを要求するときは「2」を、カウントを要求するときは「5」を、カウントを要求するときは「10」「9」「2」「5」「0」を書き込みます。それはアイテムを求めているとき。それからあなたは見るでしょう。私はすべての命令が与えられ、その後、私はsecondMethod(int[] a)方法では、あなたのコードでは...

public static void secondMethod(int[] a) { 

     long t1 = System.nanoTime(); 

     int N = a.length; 
     int b[] = new int[N]; 
     int c[] = new int[N]; 

     int[] tmp; 
     int len = 1; 

     for (int i = 0; i < a.length; i++) { 
      a[i] = b[i]; 
     } 

     while (len < N) { 
      int n = 0; 
      int i; 
      int j; 
      int ri; 
      int rj; 

      for (int k=0; k<b.length; k+=2*len){{ 
       n=k; 
       i = k; 
       j = k+len; 

       if(k+len<N){ 
        ri = k+len; 
       }else{ 
        ri = N; 
       } 
       if(k+2*len<N){ 
        rj = k+2*len; 
       }else{ 
        rj = N; 
       } 
      } 

      while(i<ri && j<rj){ 
       if(b[i]<b[j]){ 
        c[n]=b[i]; 
        i++; 
        n++; 
       }else{ 
        c[n]=b[j]; 
        j++; 
        n++; 
       } 
      } 
      while(i<ri){ 
       c[n]=b[i]; 
       i++; 
       n++; 
      } 
      while(j<rj){ 
       c[n]=b[j]; 
       j++; 
       n++; 
      } 
      } 
      len = len*2; 

      tmp = b; 
      b = c; 
      c = tmp; 
     } 

     for (int i = 0; i < a.length; i++) { 
      a[i] = b[i]; 
     } 

     long t2 = System.nanoTime(); 
     long t = t2 - t1; 
     System.out.println("t=" + t); 
    } 
    public static void main(String[] args) { 

     int nm, mtd; 
     Scanner sc = new Scanner(System.in); 

     System.out.print("method: "); 
     if (sc.hasNextInt()) 
      mtd = sc.nextInt(); 
     else { 
      System.out.println("input-output error"); 
      sc.close(); 
      return; 
     } 
     if (mtd != 1 && mtd != 2) { 
      System.out.println("input-output error"); 
      sc.close(); 
      return; 
     } 
     System.out.print("count: "); 
     if (sc.hasNextInt()) 
      nm = sc.nextInt(); 
     else { 
      System.out.println("input-output error"); 
      sc.close(); 
      return; 
     } 

     int a[] = new int[nm]; 

     System.out.println("items: "); 

     for (int i = 0; i < a.length; i++) { 

      if (sc.hasNextInt()) 
       a[i] = sc.nextInt(); 
      else { 
       System.out.println("input-output error"); 
       sc.close(); 
       return; 
      } 

     } 
     sc.close(); 
     if (mtd == 1) { 
      firstMethod(a); 
      System.out.println("sorted: "); 
      for (int i = 0; i < a.length; i++) 
       System.out.print(a[i] + " "); 
     } 
     if (mtd == 2){ 
      secondMethod(a); 
      System.out.println("sorted: "); 
      for (int i = 0; i < a.length; i++) 
       System.out.print(a[i] + " "); 
     } 

    } 

答えて

0

を出力するとき、ゼロに入力された数値を変更するコードに問題があることを、見つけることができないよう、最初のループのために、

b[i] = a[i]; 

代わり

a[i] = b[i]; 

の使用とそれが動作するはずです。 次回デバッグを試してみてください。

+1

"次回デバッグを試してみてください。"この質問の90%はこのアドバイスで簡単に解決できます。 –

+0

それは今作動する!ありがとうございました!!! –

+0

私はデバッグが何であるか分からず、https://www.jetbrains.com/help/idea/2016.2/tutorial-debugging-your-first-java-application.htmlでもこれをチェックしています上の男は与えた。 –

関連する問題