2016-02-09 37 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()更好。如果您希望将其作为您的输出,则可以稍后将其转换为整数。

相关问题