-3

私は本当にJavaの初心者ですが、このプログラムで試してみました。これは基本的な数学的計算を実行するプログラムですが、ユーザーからの入力が必要です。

import java.io.*;  
import java.util.Scanner;  

public class Math 
{
public static void main(String[] args) 
    {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

        Scanner in = new Scanner(System.in);  

        int sa1, sa2, ss1, ss2, sm1, sm2, s;  
    boolean c = false;  
    double sd1, sd2;  

        while(c==false)  
        {
        System.out.print("Do you want to: \n[1] Add. \n[2] Subtract.  \n[3] Multiply.  \n[4] Divide. \n[5] Exit \nPlease insert an option number below and press enter:  ");  
        s = in.nextInt();  

        if (s==1)  
            {
            System.out.print("You have chosen option 1 \nPlease enter your first number: ");  
            sa1 = in.nextInt();  
            System.out.print("Please enter your second number: ");  
            sa2 = in.nextInt();  
            System.out.print(sa1+ " + " +sa2+ " = " +(sa1+sa2));  
            }
        if (s==2)  
            {
            System.out.print("You have chosen option 2 \nPlease enter your first number: ");  
            ss1 = in.nextInt();  
            System.out.print("Please enter your second number: ");  
            ss2 = in.nextInt();  
            System.out.println(ss1+ " - " +ss2+ " = " +(ss1-ss2));  
            }
        if (s==3)
            {
            System.out.print("You have chosen option 3 \nPlease enter your first number: ");  
            sm1 = in.nextInt();  
            System.out.print("Please enter your second number: ");  
            sm2 = in.nextInt();  
            System.out.println(sm1+ " x " +sm2+ " = " +(sm1*sm2));  
            }
        if (s==4)       
            {       
            System.out.print("You have chosen option 4 \nPlease enter your first number: ");  
            sd1 = in.nextDouble();  
            System.out.print("Please enter your second number: ");  
            sd2 = in.nextDouble();  
            System.out.println(sd1+ " divided by " +sd2+ " = " +(sd1/sd2));    
            }       
            if(s>=6)  
            {
            System.out.println("You have entered an incorrect option");    
            }
        System.out.print("Would you like to try again? (Y/N): ");   
        String ans = in.nextLine();//prob with this line   
        char ans1 = ans.charAt(0);//or this line  
            if (ans1=='N' || ans1=='n')  
            {
            c = true;   
            }
            if(s==5)   
            {
            c = true;  
            }       
        } 

    }

}

コンパイルするとエラーが発生します: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(Unknown Source) at Math.main(Math.java:58) )

私はどこでも答えを探してみました。誰でもこれで私を助けることができますか?ユーザーから「Y」または「N」を読み取ることができる必要があります。

4

1 に答える 1

1

実行すると例外が発生します。コンパイル時ではありません。エラーメッセージには次のように表示されます。

文字列のインデックス 0 で char を取得しようとしていますが、文字列にはインデックス 0 がありません。この例外は、Main.java の 58 行目で発生します。

インデックス 0 に char を持たない文字列は空の文字列です。

これはおそらく、SYStem.in() から最後に読み取ったものが数値であり、数値を読み取っても、その後に続く行末が消費されないために発生します。ユーザーから Yes または No を読み取る前に、readLine() への呼び出しを追加します。そして、あなたが指示したことをユーザーが実行すると仮定しないでください。それはほとんど真実ではありません。読み取った入力を検証します。

于 2012-12-29T14:10:56.103 に答える