0

ユーザーからの入力を受け取り、摂氏または華氏に変換するプログラムをJavaで作成しようとしています。したがって、ユーザーはいくつかの数字、スペース、CまたはFを入力します。プログラムは正常にコンパイルされますが、テストしようとすると、次のメッセージが表示されます。

Exception in thread "main" java.lang.NumberFormatException: For input string: (whatever number, space, F/C I put in to test it0

    at java.lang.Integer.parseInt<Integer.java:492>
    at java.lang.Integer.parseInt<Integer.java:527>
    at Temp.Conv.main<TempConv.java:14>

Javaは、Parseを使用して文字列内の整数を検索しようとするのを嫌っていると思います。それを達成するための他の方法についての提案はありますか?

コードは次のとおりです:(ご存知のとおり、角かっことスペースがオフになっていることはわかっていますが、このサイトでは修正できません)

public class TempConv
{
public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    String reply = "y";
  while( reply.equalsIgnoreCase("y") )
    {
        System.out.println("Enter temp (ex. 70 F or 23 C): ");
        String CF = input.nextLine(); // inputs string
        int temp = Integer.parseInt(CF); // to get integers from string
        for (int i = 0; i < CF.length(); ++i)
        {
            char aChar = CF.charAt(i);
            if (aChar == 'F') // looking in string for F
            // go to f2c()
            {
                f2c(temp);
            }
            else if (aChar == 'C') // looking for C
            // go to c2f()
            {
                c2f(temp);
            }
        }
    System.out.println("Would you like to covert another temp? <y/n> ");
    reply = input.next();
    }
}
static void f2c(int j)
{
    int c = (j - 32)*(5/9);
    System.out.println(j + "F = " + c + "C");
}

static void c2f(int k)
{
    int f = (k*(5/9))+32;
    System.out.println(k + "C = " + f + "F");
}
}
4

2 に答える 2

1

Integer.parseInt渡された文字列全体を解析しようとします。eg を渡す"75F"と、メソッドは失敗し、表示される例外が発生します。

独自の入力検証を行う必要があります。ユーザーから特定の形式を期待する場合は、入力が形式に一致することを確認し、入力の数字に一致する部分を抽出してに渡す必要があります:またはInteger.parseIntの最後の文字を確認し、その文字の前にある部分文字列。入力がまだ不正な形式であるかどうかを尋ねたりループしたりできるように、呼び出しをブロックでラップします。CFInteger.parseInttry/catch

を使用Scanner.nextIntして入力から数値を取得できますが、入力が のよう75Fに見える場合は .Scanner.nextIntで失敗しますInputMismatchException

于 2012-10-18T04:30:02.430 に答える
0
String CF = input.nextLine(); // inputs string
int temp = Integer.parseInt(CF); //

が問題です。ユーザーが常に整数値を入力することをどのようにして知ることができますか? ここでは、有効な整数ではない 10C または 10 F などを解析しようとしています。メソッドの場合nextLine、任意の文字列が返され、数値である必要はありません。それを try catch で処理し、

try {
temp  = Integer.parseInt(CF);
} catch () {
 //handle
}

ただし、これを行う前に、元の文字列から C または F を分割して、整数の解析を行う必要があります。

于 2012-10-18T04:40:26.390 に答える