很抱歉,如果这听起来很愚蠢,但我似乎无法弄清楚如何使用我在If语句中定义的变量。
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//Prompt for Enchantment Type
System.out.println("Armor/Tool/Weapon");
//Wait for response
String input1 = scanner.nextLine();
if(input1 == "Armor"){
int type = 0;
}
else if(input1 == "Tool"){
int type = 1;
}
else if(input1 == "Weapon"){
int type = 2;
}
else {
int type = 3;
}
//This is where I need to access the type int
if(type == 1){
}
}
}
我无法弄清楚如何在它的块之外使用类型字符串。我知道我应该阅读范围和内容,但我真的希望有人向我解释。
答案 0 :(得分:3)
如果您想使用if-statement
之外的变量,则需要在if-statement
之外声明它。
此外,您不使用==
来比较String
个对象的内容相等性,只比较它们的identity
。请改用.equals()
或.equalsIgnoreCase()
方法。
尽你所能final
,这样你就知道自己在做什么了。
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//Prompt for Enchantment Type
System.out.println("Armor/Tool/Weapon");
final int type;
//Wait for response
String input1 = scanner.nextLine();
if("Armor".equalsIgnoreCase(input1)){
type = 0;
}
else if("Tool".equalsIgnoreCase(input1)){
int type = 1;
}
else if("Weapon".equalsIgnoreCase(input1)){
type = 2;
}
else {
type = 3;
}
//This is where I need to access the String type
if(type == 1){
}
}
}
更好的方法是打开Enum
类型。
public enum Item
{
ARMOR,
TOOL,
WEAPON
}
然后,您可以将input1
转换为Item
枚举并启用它。
final Item item = Item.valueOf(input1.toUpperCase());
switch(item) {
case(ARMOR):
// do stuff here
break;
case(TOOL):
// do stuff here
break;
case(WEAPON):
// do stuff here
break;
default:
// do something with unrecognized input
这会删除您现在在程序中的magic numbers
。
答案 1 :(得分:3)
if
范围之外声明变量.equals
比较字符串固定代码:
String input1 = scanner.nextLine();
int type; // scope
if(input1.equals("Armor")){
int type = 0;
}
else if(input1.equals("Tool")){
int type = 1;
}
else if(input1.equals("Weapon")){
int type = 2;
}
else {
int type = 3;
}
//This is where I need to access the String type
if(type == 1){
}
请注意,您还可以使用switch
语句(仅限Java 7!):
switch(input1) {
case "Armor":
type = 0;
break;
case "Tool":
type = 1;
break;
...
另外,在您的情况下,您可以尝试indexOf
:
import java.util.Arrays;
List<String> types = Arrays.asList("Armor", "Tool", "Weapon");
int type = types.indexOf(input1);
if (type == -1) type = 3; // if it's not found
答案 2 :(得分:1)
您应该在type
条件
if
int type = 0;
if(("Armor".equalsIgnoreCase(input1)){
type = 0;
}
else if("Tool".equalsIgnoreCase(input1)){
type = 1;
}
else if("Weapon".equalsIgnoreCase(input1)){
type = 2;
}
else {
type = 3;
}
if(type == 4) {
}
答案 3 :(得分:1)
变量的范围在其定义的块内。因此,在if块中定义变量并使用它。
int type = 0;
if(input1 == "Armor"){
}else if(input1 == "Tool"){
type = 1;
}
else if(input1 == "Weapon"){
type = 2;
}
else {
type = 3;
}
注意:还使用字符串equals
方法来比较字符串而不是==
。 Equals方法检查两个字符串的内容是否相同,而==检查对象是否相等。
更新你的if和else块,如下所示:
int type = 0;
if("Armor".equals(input1)){
}else if("Tool".equals(input1){
type = 1;
}
else if("Weapon".equals(input1)){
type = 2;
}
else {
type = 3;
}
答案 4 :(得分:0)
您不应该超出范围。 只需在其中一个封闭范围内声明它。
答案 5 :(得分:0)
您的代码有多处错误。
equals
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//Prompt for Enchantment Type
System.out.println("Armor/Tool/Weapon");
//Wait for response
String input1 = scanner.nextLine();
int type;
if(input1.equals("Armor")){
type = 0;
}
else if(input1.equals("Tool")){
type = 1;
}
else if(input1.equals("Weapon")){
type = 2;
}
else {
type = 3;
}
//This is where I need to access the String type
if(type == 1){
}
}
}