-2

摂氏から華氏、またはその逆に変換する小さなコンソールプログラムを作成したいのですが、これは私が試したコードです:

import java.util.Scanner;

public class CelsiusFahrenheit {

    private static Scanner s;

    public static void main(String[] args) {

        s = new Scanner(System.in);
        char reponse = 'N', choixConvert;

        do
        {
            do
            {
                System.out.println("Choisie le mode de converstion : ");
                System.out.println("1 - Converstisseur Celesuis - Fahrenheit");
                System.out.println("2 - Converstisseur Fahrenheit - Celesuis");

                do
                {
                    System.out.print("Votre Choix: ");
                    choixConvert = s.next().charAt(0);
                    if(choixConvert != '1' && choixConvert != '2')
                          System.out.println("Mode inconnu, veuillez réitérer votre choix.");
                }
                while(choixConvert!='1' && choixConvert!='2');

                System.out.print("Température à convertir : ");
                double temp = s.nextDouble();
                System.out.print("Resultat est: " + ConvertCelesuisFahrenheit(choixConvert,temp));
                System.out.println("\nSouhaitez-vous convertir une autre température ? (O/N)");
                reponse = Character.toUpperCase(s.nextLine().charAt(0));

            }while(reponse != 'O' && reponse != 'N');
        }while(reponse == 'O');

        System.out.println("Au revoir !");
    }

    private static Double ConvertCelesuisFahrenheit(int choixConvert,double temp )
    {
        if(choixConvert == 1)
            return (9/5)*temp+32;
        else
            return (temp-32)*(5/9);
    }
}

しかし、関数 ConvertCelesuisFahrenheit() が常に 0.0 を返すという問題があり、その後、このエラーが発生します。

スレッド「メイン」での例外 java.lang.StringIndexOutOfBoundsException: 範囲外の文字列インデックス: java.lang.String.charAt (不明なソース) で 0 摂氏華氏.メイン (CelsiusFahrenheit.java:33)

これは出力です:

Choisie le mode de converstion : 
1 - Converstisseur Celesuis - Fahrenheit
2 - Converstisseur Fahrenheit - Celesuis
Votre Choix: 2
Température à convertir : 33
Resultat est: 0.0
Souhaitez-vous convertir une autre température ? (O/N)
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at CelsiusFahrenheit.main(CelsiusFahrenheit.java:33)
4

3 に答える 3

6

nextDouble()入力ストリームに改行を残すため、呼び出したときに

nextLine().charAt(0)

の結果はnextLine()空の文字列です。ストリームから改行を削除するか、上記のように を使用next()します。

于 2012-10-22T23:18:23.910 に答える
2

ここにはいくつかの問題があります..

nextLine().charAt(0)新しい行は nextDouble() によって消費されないため、空の文字列を取得します

追加するだけでこれを修正できます

String continueString = s.next();
response = Character.toUpperCase(continueString.charAt(0));

また、変換計算の計算が正しくありません。5.0/9.0の代わりに使用し5/9ます。

最後に、choixConvert文字を として読み取りますがchar、それを としてintメソッドに渡すため、elseブロックは常に実行されます。

于 2012-10-22T23:28:13.273 に答える
1

reponse = Character.toUpperCase(s.nextLine().charAt(0));これを更新してください:

          String line = s.nextLine();
          while(line.length() <1){
             line = s.nextLine();
          }
          reponse = Character.toUpperCase(line.charAt(0));
于 2012-10-22T23:21:50.887 に答える