0
import java.io.*;

public class tempdetection {
public static int celciustofarenheit(int temp){
    int fTemp = ((9 * temp)/5) + 32;
    return fTemp;
}


public static void examineTemperature(int temp){
    System.out.println("\nTemperature is " + temp + " in celcius. Hmmm...");

    int fTemp = celciustofarenheit(temp);
    System.out.println("\nThats " + fTemp + " in Farenheit...");

    if(fTemp<20)
        System.out.println("\n***Burrrr. Its cold...***\n\n");
    else if(fTemp>20 || fTemp<50)
        System.out.println("\n***The weather is niether too hot nor too cold***\n\n");
    else if(fTemp>50)
        System.out.println("\n***Holy cow.. Its scorching.. Too hot***\n\n");
}


public static void main(String[] args) throws IOException {
    int temperature;
    char c;

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    do{
        System.out.println("Input:\n(Consider the input is from the sensor)\n");

        temperature = Integer.parseInt(br.readLine());

        examineTemperature(temperature);
        System.out.println("Does the sensor wanna continue giving input?:(y/n)\n");
        c = (char) br.read();
    }while(c!= 'N' && c!='n');          //if c==N that is no then stop



}

}

これは完全なコードです..私はまだ答えを得ることができません..ネットでたくさん検索しましたが、役に立ちません..また、すでに助けてくれた人に感謝しますが、その喧騒は私の問題を解決します. . SO なぜ文字列に変換する必要があるのですか?? また、メンバーの1つによって指定されたようにキャッチしようとしましたが、examineTemperature(温度)は初期化されていないというエラーをスローします..

Input:
(Consider the input is from the sensor)

45

Temperature is 45 in celcius. Hmmm...

Thats 113 in Farenheit...

***The weather is niether too hot nor too cold***


Does the sensor wanna continue giving input?:(y/n)

N
Input:
(Consider the input is from the sensor)

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at tempdetection.main(tempdetection.java:33)

また、while ループに到達するまでは fyn で動作します。

4

4 に答える 4

1

行のエラー

temperature = Integer.parseInt(br.readLine());

これは、入力を読み取り、整数として解析しようとしています。例外が示唆するように、入力は数値ではありません。つまり、引数が数値であるNumberFormatExceptionInteger.parseInt()予想されます。

これを修正するには、複数の方法があります。

1つの方法(個人的には最善ではないと信じています)は、例外をキャッチして何もせずに続行することです

try
{
    temperature = Integer.parseInt(br.readLine());
    // and do any code that uses temperature
    //if you don't then temperature will not be assigned
}
catch (NumberFormatException nfex)
{}

より良い方法は、解析を試みる前に入力文字列が数値であることを確認することです

String input = br.readLine();
if(input.matches("\\d+"))  // Only ints so don't actually need to consider decimals
    //is a number... do relevant code
    temperature = Integer.parseInt(input);
else
    //not a number
    System.out.println("Not a number that was input");
于 2013-10-03T02:33:48.170 に答える
0

整数に変換できない文字列は解析できません。

Integer.parseInt(String s) はこの例外をスローします。

于 2013-10-03T02:34:47.653 に答える