扫描程序显示异常InputMisMatchException

时间:2017-08-18 07:00:53

标签: java java.util.scanner

static long arrayMaxMin[];
    public static void main(String[] args) {


    try{    Scanner in = new Scanner(System.in);
            long[] arr = new long[5];

            for(int arr_i=0; arr_i < 5; arr_i++){

                arr[arr_i] =Long.valueOf(Math.abs(in.nextLong()));
              }
           arrayMaxMin = calculate(arr);
    }catch(InputMismatchException e)
    {
        e.getMessage();
    }
      try{  long[] array = findMaxMin(arrayMaxMin);
        for(int ij=0;ij<array.length;ij++){
            System.out.print(array[ij]+" ");
        }
      }catch(NullPointerException e){
          e.getMessage();
      }
} 

     public static long[] calculate(long[] arrayMaxMin ){
    int max=0,min=0;
    long[] outputarray={0,0,0,0,0};
    for(int i=0;i<arrayMaxMin.length;i++){
        for(int j=0;j<arrayMaxMin.length;j++){
            if(i==j){
                //do nothing
            }else {
                outputarray[i] = outputarray[i]+arrayMaxMin[j];
            }
        }
    }
return outputarray;
}

     public static long[] findMaxMin(long[] arr){
       long max=0,min=0;
       try{  for(int i=0;i<arr.length;i++){
           if(max<arr[i]){
               max= arr[i];
           }else{
               min= arr[i];
           }
       }
      long output[]={min,max};
       return output;
   }catch(NullPointerException e){
       e.getMessage();
       return null;
   }
     }
好吧,我在这里尝试hackerrank问题,并且我没有得到一些测试用例失败的可能原因,在MIN-MAX问题中。

我不明白,这里缺少什么或者我缺少哪种情况,请帮助我任何人,我认为我缺乏的是如果输入是这样的  它失败了7777777777777777777777,任何人都可以提供帮助 问题就像

给定五个正整数,找到可以通过对五个整数中的四个进行求和来计算的最小值和最大值。然后将相应的最小值和最大值打印为两个以空格分隔的长整数的单行。

输入格式

一行五个以空格分隔的整数。

约束

每个整数都在包含范围内。 {1,10 ^ 9}

打印两个以空格分隔的长整数,表示可以通过对五个整数中的四个进行求和来计算的相应最小值和最大值。 (输出可以大于32位整数。)

如您所见,最小总和是最大总和。因此,我们将这些最小和最大和打印为一个新行上的两个以空格分隔的整数。

提示:注意整数溢出!使用64位整数。

2 个答案:

答案 0 :(得分:1)

这里错误的事实是你吞下了这些事实......

这里:

catch(InputMismatchException e) {
    e.getMessage();
}

应该是

 catch (InputMismatchException e) {
     e.printStackTrace();
 }

那么你将能够看到应用程序崩溃的原因:

  

java.util.InputMismatchException:对于输入字符串:“7777777777777777777777”

此输入:7777777777777777777777不是有效的长...

这就是为什么你从教授那里得到提示: 使用64位整数。 但是7777777777777777777777比那个大......所以输入的无效输入是扫描仪崩溃尝试将其读作长...

答案 1 :(得分:0)

7777777777777777777777不是有效的长篇。

尝试使用Double而不是long。试试这个:

static double arrayMaxMin[];

public static void main(String[] args) {

    try {
        Scanner in = new Scanner(System.in);
        double[] arr = new double[5];

        for (int arr_i = 0; arr_i < 5; arr_i++) {

            arr[arr_i] = in.nextDouble();
        }
        arrayMaxMin = calculate(arr);
        System.out.println(arrayMaxMin);
    } catch (InputMismatchException e) {
        e.printStackTrace();
    }
    try {
        double[] array = findMaxMin(arrayMaxMin);
        for (double element : array) {
            System.out.print(element + " ");
        }
    } catch (NullPointerException e) {
        e.getMessage();
    }
}

public static double[] calculate(double[] arrayMaxMin) {
    int max = 0, min = 0;
    double[] outputarray = { 0, 0, 0, 0, 0 };
    for (int i = 0; i < arrayMaxMin.length; i++) {
        for (int j = 0; j < arrayMaxMin.length; j++) {
            if (i == j) {
                // do nothing
            } else {
                outputarray[i] = outputarray[i] + arrayMaxMin[j];
            }
        }
    }
    return outputarray;
}

public static double[] findMaxMin(double[] arr) {
    double max = 0, min = 0;
    try {
        for (double element : arr) {
            if (max < element) {
                max = element;
            } else {
                min = element;
            }
        }
        double output[] = { min, max };
        return output;
    } catch (NullPointerException e) {
        e.getMessage();
        return null;
    }
}