2017-02-22 21 views
0

実行するプログラムを促すない、と私は現在、それが動作するかどうかをテストしようとしています。これは、入力フォーマットに標準入力を介して制御されるべきであるのJava STDINは、私はマージソートアルゴリズムに取り組んでいます

配列長 要素値(「"で区切られた)

しかし、を入力:

何も起こりません、入力を打つ、ちょうどコンソールの次の行に私を得る。

私は間違った入力をしない限り、エラーメッセージを表示しないので、与えられた入力でスクリプトを実行するように求められない理由を理解するのは難しいです。

package merge; 

import java.io.*; 
import java.util.*; 

public class MergeSort 
{ 
    // This method takes two sorted arrays of integers as input parameters 
    // and it should return one sorted array of integers. 
    public int[] merge(int[] A1, int[] A2) { 
     int[] C = new int[A1.length + A2.length]; 
     int i = 0, j = 0, k = 0; 
     while (i < A1.length && j < A2.length) 
      C[k++] = A1[i] < A2[j] ? A1[i++] : A2[j++]; 

     while (i < A1.length) 
      C[k++] = A1[i++]; 

     while (j < A2.length)  
      C[k++] = A2[j++]; 

     return C; 
    } 

    // This method takes an array of integers as input parameter, 
    // and it should then return the integers sorted 
    // in ascending order using the MergeSort algorithm. 
    private int[] sort(int[] numbers) { 
     //pointers 
     int i = 0, j = 0, k = 0; 
     // reference values 
     int half = numbers.length/2; 
     int[] sorted = new int[numbers.length]; 

     if (numbers.length <= 1){ 
      return numbers; 
     } 

     //left part of 'numbers' 
     int[] left = new int[half]; 
     int[] right; 

     //right part of 'numbers' 
     if (numbers.length % 2 != 0){ 
      right = new int[half+1]; 
      j = half + 1; 
     } 
     else{ 
      right = new int[half]; 
      j = half; 
     } 
     //fills out left half of array with values from input array 
     while (i < half) 
      left[i] = numbers[i]; 
      i++; 

     //fills out right half of array with values from input array 
     while (j < numbers.length) 
      right[j] = numbers[k]; 
      j++; k++; 

     left = sort(left); 
     right = sort(right); 

     merge(left,right); 

     return sorted; 
    } 

    // ################################################## 
    // # Stdin part. # 
    // ################################################## 

    public static void main(String[] args) throws IOException { 
     new MergeSort().run(); 
    } 

    private void run() throws IOException { 
     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
     int[] numbers = readIntArray(in); 

     numbers = sort(numbers); 
     for (int i = 0; i < numbers.length; i++) { 
      System.out.print(numbers[i] + " "); 
     } 
    } 

    private int[] readIntArray(BufferedReader in) throws IOException { 
     int length = Integer.parseInt(in.readLine()); 
     int[] array = new int[length]; 
     StringTokenizer st = new StringTokenizer(in.readLine()); 

     for (int i = 0; i < length; i++) { 
      array[i] = Integer.parseInt(st.nextToken()); 
     } 
     return array; 
    } 
} 

答えて

1

あなたは、標準入力上の2つの行を読み込むための試みで、その結果、readLine() 2回呼び出す(以下のコードは、コピーされます)。

関連する問題