(Java)在'if-else'语句中声明的字符串无法解析为变量

时间:2017-11-19 23:09:15

标签: java string variables if-statement

我知道变量在if-else语句中被“包含”,如果它们在那里被声明,并且不能在语句之外使用。但是如何在外部声明一个,然后在if-else

中更改其字符串
System.out.println("Is it day or night?");
String dayornight = scan.nextLine();

if(dayornight.equals("day")) {
    String brightness = "bright";   

} else if(dayornight.equals("night")) {
    String brightness = "dark";

}
System.out.println("Then it must be " + brightness + " outside." );

}

4 个答案:

答案 0 :(得分:1)

您需要在外面声明:

String brightness;
if(dayornight.equals("day")) {
    brightness = "bright";   
} else if(dayornight.equals("night")) {
    brightness = "dark";
}

不初始化它是很好的做法,因为如果有一个代码路径可以在不初始化的情况下执行,代码将无法编译(如上面的代码)。在上面的代码中将else if更改为else或添加将处理不是“白天”或“夜晚”的else的{​​{1}}将解决问题。

答案 1 :(得分:0)

局部变量(在方法中声明的变量)仅存在于最内层的(花括号)中。因此,您创建了两个不同的 brightness变量,每个变量只存在于其中一个if / else分支中。您需要在if / else:

之前声明变量
String brightness = "";
if (dayornight.equals("day")) {
    brightness = "bright";   
} else if(dayornight.equals("night")) {
    brightness = "dark";
}

另请注意,因为您没有else,所以在声明变量时需要初始化变量。否则,如果用户输入的内容不是"day""night",则变量将不具有任何值,并且编译器不会允许该变量。

答案 2 :(得分:0)

这可能就是你要找的东西:

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "mypackage"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            moduleName "libglimage"
            ldLibs "log", "android", "EGL", "GLESv1_CM"
        }
    }

    externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile files('libs/Vuforia.jar')
}

答案 3 :(得分:0)

在if块内声明的变量超出了范围。所以你需要在块上面声明那些变量。