2017-02-22 3 views
0

Я работаю над алгоритмом сортировки Merge, и сейчас я пытаюсь проверить, работает ли он.Java stdin не запрашивает программу для запуска

Следует управлять с помощью стандартного ввода с форматом ввода:

длина массива значения элементов (разделенных "«)

Однако, при вводе:

Ничего не происходит, и нажав enter, просто доставьте меня до следующей строки в консоли.

У меня нет сообщения об ошибке (если я не ввожу неправильный ввод), и поэтому мне сложно определить, почему сценарий не предлагается запускать с введенным вводом.

(код копируется ниже)

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

Вы называете readLine() два раза, в результате чего в попытке прочитать две строки на стандартном вводе.