-1

Ifステートメント内で宣言された文字列の表示に問題がある場合のコードは次のとおりです。

import java.util.Scanner;

// This program reads a temp and prints its current state
public class P03_01_2 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // get temp
        System.out.print("Enter a temperature: ");
        if (in.hasNextDouble()) {
            double temp = in.nextDouble();

            // determine temp type and determine state

            System.out.print("Enter C for Celcius or F for Fahrenheit: ");
            String type = in.nextLine();
            if (type.equals("c") || type.equals("C")) {
                if (temp <= 0) {
                    String state = "frozen";
                } else if (temp >= 100) {
                    String state = "gaseous";
                } else {
                    String state = "water";
                }
            }
            if (type.equals("f") || type.equals("F")) {
                if (temp <= 32) {
                    String state = "frozen";
                } else if (temp >= 212) {
                    String state = "gaseous";
                } else {
                    String state = "water";
                }
            } else if ((!type.equals("c") || !type.equals("C") || !type.equals("f") || !type.equals("F"))) {
                System.out.print("Not valid input.");
                System.exit(0);

            } else {
                System.out.println("Not valid input.");
                System.exit(0);
            }

            System.out.println("The state of the water is " + state);

        }
    }
}

最初のifステートメントの前に「Stringstate=null」を入れてみましたが、エラーが発生し続けます.......ありがとうございます。

4

3 に答える 3

7

各ブロック内で変数を宣言しています。つまり、各宣言は独自のブロックにあり、個別にスコープされます。

String state = null;
if (...) {
   String state = "";
   // this is a different variable to 'state' outside the block!
}

ブロックの外で変数を宣言してから、たとえば内で初期化する必要があります。

String state = null;
if (...) {
   state = "";
}

// state is still visible here

これは、Java内のスコープの概念に関する簡単なチュートリアルです。

于 2013-01-08T11:26:13.213 に答える
1

試す:

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    // get temp
    System.out.print("Enter a temperature: ");
    if (in.hasNextDouble()) {
        double temp = in.nextDouble();

        // determine temp type and determine state

        System.out.print("Enter C for Celcius or F for Fahrenheit: ");
        String type = in.nextLine();
        if (type.equals("c") || type.equals("C")) {
            if (temp <= 0) {
                String state = "frozen";
            } else if (temp >= 100) {
                String state = "gaseous";
            } else {
                String state = "water";
            }
        }
        String state = null;
        if (type.equals("f") || type.equals("F")) {
            if (temp <= 32) {
                state = "frozen";
            } else if (temp >= 212) {
                state = "gaseous";
            } else {
                state = "water";
            }
        } else if ((!type.equals("c") || !type.equals("C") || !type.equals("f") || !type.equals("F"))) {
            System.out.print("Not valid input.");
            System.exit(0);

        } else {
            System.out.println("Not valid input.");
            System.exit(0);
        }

        System.out.println("The state of the water is " + state);

    }
}

state範囲内にある必要があります...現在は範囲内にある可能性があることに注意してくださいnull。ただし、これによってエラーが発生することはありません...

于 2013-01-08T11:26:51.593 に答える
0

'String state = null'を入れようとしている場合は、String state =frozenではなくstate='frozen'のように、'state'の値を内部に割り当てる必要があります。

于 2013-01-08T11:30:06.797 に答える