Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java标准不提示程序运行_Java_Eclipse_Stdin - Fatal编程技术网

Java标准不提示程序运行

Java标准不提示程序运行,java,eclipse,stdin,Java,Eclipse,Stdin,我正在研究一种合并排序算法,目前我正在尝试测试它是否有效 应通过标准输入法进行控制,输入格式为: 数组长度 元素值(以“”分隔) 但是,在键入时: 3 17103 什么也没发生,按回车键,让我进入控制台的下一行 我没有收到任何错误消息(除非我输入了错误的输入),因此我很难弄清楚为什么脚本没有被提示使用给定的输入运行 (代码复制如下) 包合并; 导入java.io.*; 导入java.util.*; 公共类合并排序 { //该方法将两个排序的整数数组作为输入参数 //它应该返回一个已排序的整数数组

我正在研究一种合并排序算法,目前我正在尝试测试它是否有效

应通过标准输入法进行控制,输入格式为:

数组长度 元素值(以“”分隔)

但是,在键入时:

3
17103

什么也没发生,按回车键,让我进入控制台的下一行

我没有收到任何错误消息(除非我输入了错误的输入),因此我很难弄清楚为什么脚本没有被提示使用给定的输入运行

(代码复制如下)

包合并;
导入java.io.*;
导入java.util.*;
公共类合并排序
{
//该方法将两个排序的整数数组作为输入参数
//它应该返回一个已排序的整数数组。
公共int[]合并(int[]A1,int[]A2){
int[]C=新的int[A1.length+A2.length];
int i=0,j=0,k=0;
而(ireadLine()
,导致尝试读取标准输入上的两行

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;
    }
}