使用If语句中定义的变量?

时间:2013-09-09 12:31:46

标签: java

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

        }
    }
}

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

6 个答案:

答案 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)

  1. if范围之外声明变量
  2. 使用.equals比较字符串
  3. 固定代码:

    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)

您的代码有多处错误。

  1. 你应该在循环之外定义类型变量
  2. 您应该将字符串与equals
  3. 进行比较

    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){
    
            }
        }
    }