线程" main"中的例外情况java in mergesort

时间:2017-05-15 06:22:03

标签: java multithreading mergesort

我对正在发生的事情有疑问,每当我尝试编译它时,它会一直给我一个错误:

  

线程中的异常" main" java.util.InputMismatchException at   java.util.Scanner.throwFor(Scanner.java:864)

     

java.util.Scanner.next(Scanner.java:1485)

     

java.util.Scanner.nextInt(Scanner.java:2117)

     

java.util.Scanner.nextInt(Scanner.java:2076)

MergeSort.main(MergeSort.java:11)​​

import java.util.Random;
import java.util.*;
public class MergeSort
{
    static final int MAX=10005;
    static int[] a=new int[MAX];
    public static void main(String[] args) 
    {
    Scanner input = new Scanner("system.in");
    System.out.println("Enter MAx array size");
    int n = input.nextInt();
    Random random =new Random();
    System.out.println("Enter Array Elements");
    for(int i=0;i<n;i++)
        a[i]= random.nextInt(1000);
    long startTime =System.nanoTime();
    MergeSortAlgorithm(0,n-1);
    long stopTime =System.nanoTime();
    long elapsedTime =stopTime-startTime;
    System.out.println("Time Complexity in ms for n ="+n+(double)elapsedTime/1000000);
    System.out.println("Sorted Array(MergeSort):");

    for(int i=0;i<n;i++)
        System.out.println(a[i]+"");
    input.close();      
}       
public static void MergeSortAlgorithm(int low,int high)
{
    int mid ;
    if(low<high)
    {
        mid=(low+high)/2;
        MergeSortAlgorithm(low,mid);
        MergeSortAlgorithm(mid+1,high);
        Merge(low,mid,high);
    }
}   
public static void Merge(int low,int mid,int high)
{
    int[]b=new int[MAX];
    int i,h,j,k;
    h=i=low;
    j=mid+1;
    while((h<=mid)&&(j<=high))
        if(a[h]<a[j])
            b[i++]=a[h++];
        else
            b[i++]=a[j++];
        if(h>mid)
            for(k=j;k<=mid;k++)
                b[i++]=a[k];
}
}

2 个答案:

答案 0 :(得分:2)

您使用了错误的构造函数来初始化代码中的Scanner对象。

取消引用Scanner对象的构造函数中的String:

应该是这样的:

Scanner input = new Scanner(System.in);

之后我能够运行你的程序。

PS:您看到的错误不是编译时错误。你可能在运行时得到它。

希望这有帮助!

答案 1 :(得分:0)

扫描仪类的语法错误。

使用它像:

  Scanner input = new Scanner(System.in);

从控制台获取输入。