我知道变量在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." );
}
答案 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块内声明的变量超出了范围。所以你需要在块上面声明那些变量。