2016-02-09 36 views
0

所以我對這個網站很新,但你們是我最後的希望。這裏的目標是用戶將輸入華氏10度的溫度(輸入時輸入-999來停止),然後程序將把這些溫度改變爲攝氏溫度。用戶也需要鍵入他們的位置。我能夠在位置輸入,但我打後「回車」我得到:我的程序不會超過我的第幾行代碼

異常線程「main」 java.util.InputMismatchException
在java.util.Scanner.throwFor(來源不明)
在java.util.Scanner.next(未知來源)
在java.util.Scanner.nextInt(未知來源)
在java.util.Scanner.nextInt(未知來源)
在Prog1.main(PROG1 .java:20)`

這裏是我的代碼:

import java.util.Scanner; 
public class Prog1 
{ 
    public static void main(String[] args){ 
     Scanner in = new Scanner(System.in); 

     //asks the user for the location 
     System.out.print("Enter Location: "); 
     int place = in.nextInt(); 
     System.out.print(place); 

     double[] temp = new double[10]; 
     int num = 0; 
     //prime the loop 
     System.out.print("Enter temperature: "); 
     int input = in.nextInt(); 
     //get up to 10 temperatures and store in array "temp" 
     while (input >= -998 && num < 10) { 
      temp[num] = input; 
      num++; 

      System.out.print("Enter temperature: "); 
      input = in.nextInt(); 
     } 
     //print report 
     System.out.println(); 
     System.out.printf("%5s %5\n", "Fahrenheit", "Celcius"); 
     for (int x = 0; x < num; x++) { 
      System.out.printf("%5d %5s\n", temp[x], celsius(temp[x])); 
     } 

     System.out.printf("\nHigh: %6.2f", max(temp, num)); 
     System.out.printf("\nLow: %6.2f", min(temp, num)); 
     System.out.printf("\nAverage: %6.2f", average(temp, num));  
    } 

    /** 
    * Method to convert farenheit to celsius 
    * @param double farenheit temperature 
    * @return double celsius temperature 
    */ 
    public static double celsius(double input) { 
     double celcius = 5.0/9.0 * (input - 32); 
     return celcius; 
    } 

    /** 
    * Method to calculate average, min and max temperatures 
    * 
    * @param double farenheit temperature 
    * @return average, min and max temperatures 
    */ 
    public static double average(double[] temp, int num) { 
     double sum = 0; 
     for (int x = 0; x < num; x++) { 
      sum += temp [x]; 
     } 
     return (double) sum/num; 
    } 

    public static double max(double[] temp , int num){ 
     double max = temp[0]; 
     for (double x : temp) { 
      if (max > num) { 
       max = num; 
      } 
      return num; 
     } 
     return max; 
    } 

    public static double min(double[] temp, int num) { 
     double min = temp[0]; 
     for (double x : temp) { 
      if (min < num) { 
       min = num; 
      } 
      return min; 
     } 
     return num; 
    } 
} 

回答

0

你得到InputMismatchException時,這意味着,無論用戶被提交給你的是一個不同的類型,那麼你已經編程的。

您要求用戶輸入他們的位置,然後致電in.nextInt()。如果標準輸入中的下一個標記不是整數,則nextInt()將引發異常。您必須輸入除拋出異常位置的整數之外的其他值。如果你想進入一個基於文本的位置(如字符串)嘗試in.nextLine()

+0

謝謝你,爲我的固定的第一部分!但是當我去要求用戶進入他們的溫度時,我再次得到這個。異常線程 「main」 java.util.InputMismatchException \t在java.util.Scanner.throwFor(來源不明) \t在java.util.Scanner.next(來源不明) \t在java.util.Scanner中。nextInt(Unknown Source) \t at java.util.Scanner.nextInt(Unknown Source) \t at Prog1.main(Prog1.java:27) –

+0

同樣,這就是你之前得到的同一個異常。您的代碼需要一個整數,並且用戶必須輸入除整數以外的內容。仔細檢查,只有一個整數正在輸入 – Spencer

+0

你正在輸入雙倍值,我認爲。嘗試in.nextDouble()並將輸入類型設置爲double。 – Samurai

0

上面的解決方案是一個非常簡單的one.You必須更換:

System.out.print("Enter Location: "); 
int place = in.nextInt(); 
System.out.print(place); 

System.out.print("Enter Location: "); 
String place = in.nextLine(); 
System.out.print(place); 

自位置是一個字符串,當你給像'印度'in.nextInt()會期待一個數字,而不是字符串。所以你得到的錯誤。只有在輸入位置sysout下面更換它。

也取代格式。試試這個:當你把一個數據類型的地方,預計將是一個不同的數據類型

import java.util.Scanner; 
public class Prog1 
{ 
    public static void main(String[] args){ 
     Scanner in = new Scanner(System.in); 

     //asks the user for the location 
     System.out.print("Enter Location: "); 
     String place = in.nextLine(); 
     System.out.print(place); 

     double[] temp = new double[10]; 
     int num = 0; 
     //prime the loop 
     System.out.print("Enter temperature: "); 
     int input = in.nextInt(); 
     //get up to 10 temperatures and store in array "temp" 
     while (input >= -998 && num < 10) { 
      temp[num] = input; 
      num++; 

      System.out.print("Enter temperature: "); 
      input = in.nextInt(); 
     } 
     System.out.println(); 
     System.out.printf("%s %s\n", "Fahrenheit", "Celcius"); 
     for (int x = 0; x < num; x++) { 
      System.out.println(temp[x] + "\t" +celsius(temp[x])); 
     } 

     System.out.printf("\nHigh: %6.2f", max(temp, num)); 
     System.out.printf("\nLow: %6.2f", min(temp, num)); 
     System.out.printf("\nAverage: %6.2f", average(temp, num));  
    } 

    /** 
    * Method to convert farenheit to celsius 
    * @param double farenheit temperature 
    * @return double celsius temperature 
    */ 
    public static double celsius(double input) { 
     double celcius = 5.0/9.0 * (input - 32); 
     return celcius; 
    } 

    /** 
    * Method to calculate average, min and max temperatures 
    * 
    * @param double farenheit temperature 
    * @return average, min and max temperatures 
    */ 
    public static double average(double[] temp, int num) { 
     double sum = 0; 
     for (int x = 0; x < num; x++) { 
      sum += temp [x]; 
     } 
     return (double) sum/num; 
    } 

    public static double max(double[] temp , int num){ 
     double max = temp[0]; 
     for (double x : temp) { 
      if (max > num) { 
       max = num; 
      } 
      return num; 
     } 
     return max; 
    } 

    public static double min(double[] temp, int num) { 
     double min = temp[0]; 
     for (double x : temp) { 
      if (min < num) { 
       min = num; 
      } 
      return min; 
     } 
     return num; 
    } 
} 
+0

謝謝,因爲這固定了我的第一部分!但是當我去要求用戶進入他們的溫度時,我再次得到這個。 Java中java.util.Scanner.nextInt(Unknown Source)的java.util.Scanner.next(Unknown Source)中的線程「main」中的異常java.util.Scanner.throwFor(Unknown Source)中的線程「java.util.InputMismatchException」 util.Scanner.nextInt(未知源)在Prog1.main(Prog1.java:27) –

+0

你能告訴我你給temp的輸入是什麼。原因in.nextInt()接受像7,78,89等值,而不是16.7或16 degress等 –

+0

我認爲你有一個格式錯誤,如下面提到的Al Pimenov。這是你修正後的代碼在接近那個形態的時候試試這個。因爲所有對象類型都有一個.toString(),所以它們都可以轉換爲字符串來打印 –

0

InputMismatch拋出異常。由於您正在使用度數,我假設您可能正在輸入浮點值,所以in.nextDouble()可能比in.nextInt()更好。如果您希望將其作爲您的輸出,則可以稍後將其轉換爲整數。

相關問題