簡體   English   中英

掃描儀顯示異常InputMisMatchException

[英]Scanner shows exception InputMisMatchException

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問題中,我沒有得到某些測試用例失敗的可能原因。

我不明白,這里缺少什么,或者我缺少哪種情況,請幫助我,好吧,我想我缺少的是,如果輸入的是7777777777777777777777777而不是失敗的話,有人可以幫助解決這個問題嗎喜歡

給定五個正整數,找到可以通過對五個整數中的四個精確求和而得出的最小值和最大值。 然后將相應的最小值和最大值打印為兩個以空格分隔的長整數的一行。

輸入格式

由5個以空格分隔的整數組成的一行。

約束

每個整數都在包含范圍之內。 {1,10 ^ 9}

打印兩個以空格分隔的長整數,分別表示可以通過對五個整數中的四個精確求和而得出的最小值和最大值。 (輸出可以大於32位整數。)

如您所見,最小和為,最大和為。 因此,我們將這些最小和最大和作為兩個空格分隔的整數打印在新行上。

提示:當心整數溢出! 使用64位整數。

首先錯的是您吞下了這些肽...

這里:

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

應該

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

然后,您將能夠查看應用程序崩潰的原因:

java.util.InputMismatchException:對於輸入字符串:“ 7777777777777777777777”

輸入以下內容:7777777777777777777777不是有效的長...

這就是為什么您從教授那里得到的提示: 使用64位Integer。 但是7777777777777777777777比那更大...因此是無效的輸入,導致掃描器試圖長時間讀取時崩潰。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM