2

抱歉,如果这听起来很愚蠢,但我似乎无法弄清楚如何使用我在 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){

        }
    }
}

我不知道如何在它的块之外使用类型字符串。我知道我应该阅读范围和内容,但我真的希望有人向我解释一下。

4

6 回答 6

3

如果要在 an 之外使用变量,if-statement则需要在if-statement.

此外,您不==用于比较String对象的内容相等性,只比较它们的identity. 请改用.equals()or.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
}

然后你可以将你的转换input1Item枚举并打开它。

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您现在在程序中的内容。

于 2013-09-09T12:33:49.327 回答
3
  1. if在's 范围之外声明变量
  2. 用于.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
于 2013-09-09T12:35:06.797 回答
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) {

    }
于 2013-09-09T12:32:55.657 回答
1

变量的范围在定义它的块内。因此,从 if 块中定义变量并使用它。

int type = 0;
if(input1 == "Armor"){
}else if(input1 == "Tool"){
   type = 1;
 }
 else if(input1 == "Weapon"){
    type = 2;
  }
  else {
     type = 3;
  }

注意:也可以使用 Stringequals方法来比较字符串,而不是==. 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;
  }
于 2013-09-09T12:33:26.483 回答
0

您不应该从范围外访问。只需在其中一个封闭范围内声明它。

于 2013-09-09T12:33:59.290 回答
0

您的代码有多个错误。

  1. 您应该在循环之外定义类型变量
  2. 您应该将字符串与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){

        }
    }
}
于 2013-09-09T12:35:56.357 回答