繁体   English   中英

如何压缩这些大的 if 语句

[英]How to condense these large if statements

我已经在这段代码上工作了一段时间,终于完成了它,但是有什么方法可以压缩大量的 if 语句吗?

我已经在我的编码知识范围内尝试了所有方法,但似乎没有任何效果。

import java.util.Scanner;

public class AidanMRN{

    public static void main(String[] args){

        //Creating Variable "Number"
        int number;

        Scanner keyboard = new Scanner(System.in);

        //Storing Number
        System.out.println("Pick a number, 1 - 10");
        number = keyboard.nextInt();

        //If statements and Outputs
        if (number > 10)
            //Error message
            System.out.print("Error, " + number + " is higher than 10.\nPlease try again");
        if (number == 1)
            System.out.println("Roman Numeral: I");

        if (number == 2)
            System.out.println("Roman Numeral: II");

        if (number == 3)
            System.out.println("Roman Numeral: III");

        if (number == 4)
            System.out.println("Roman Numeral: IV");

        if (number == 5)
            System.out.println("Roman Numeral: V");

        if (number == 6)
            System.out.println("Roman Numeral: VI");

        if (number == 7)
            System.out.println("Roman Numeral: VII");

        if (number == 8)
            System.out.println("Roman Numeral: VIII");

        if (number == 9)
            System.out.println("Roman Numeral: IX");

        if (number == 10)
            System.out.println("Roman Numeral: X");
    }
}

您可以使用此代码获得更短的 if 语句。

public static void main(String[] args) {
            String[] romanNumbers= {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};

            int number;
            Scanner keyboard = new Scanner(System.in);
            //Storing Number
            System.out.println("Pick a number, 1 - 10");
            number = keyboard.nextInt();
            //If statements and Outputs
            if (number > 10 || number < 1)
                //Error message
                System.out.print("Error, " + number + " is higher than 10.\nPlease try again");
            else
                System.out.println("Roman Numeral: " + romanNumbers[number -1]);
        }
    }

使用Map

Map<Integer, String> numbers = new HashMap<>() {{
    put(1, "I");
    put(2, "II");
    put(3, "III");
}};

System.out.println("Roman Numeral: " + numbers.get(number));

利用

可以这样做

enter a number : 5
userNumber=5
    String [] romanNumbers = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};
    for(int i=0;i<romanNumbers.length;i++){
if(i==userNumber &&userNumber<=10){
userNumber=userNumber-1;
Console.WriteLine("the roman Number is "+romanNumbers[userNumber]);
}
}

您可以做的是使用switch语句作为if s 的替代:

public static void main(String[] args) {
    // Creating Variable "Number"
    int number;
    Scanner keyboard = new Scanner(System.in);
    // Storing Number
    System.out.println("Pick a number, 1 - 10");
    number = keyboard.nextInt();
    // If statements and Outputs
    switch (number) {
    // error message for number < 1 AND number > 10
    default:
        System.out.print("Error, " + number 
                + " is less than 1 or greater than 10.\nPlease try again");
        break;
    case 1:
        System.out.println("Roman Numeral: I");
        break;
    case 2:
        System.out.println("Roman Numeral: II");
        break;
    case 3:
        System.out.println("Roman Numeral: III");
        break;
    case 4:
        System.out.println("Roman Numeral: IV");
        break;
    case 5:
        System.out.println("Roman Numeral: V");
        break;
    case 6:
        System.out.println("Roman Numeral: VI");
        break;
    case 7:
        System.out.println("Roman Numeral: VII");
        break;
    case 8:
        System.out.println("Roman Numeral: VIII");
        break;
    case 9:
        System.out.println("Roman Numeral: IX");
        break;
    case 10:
        System.out.println("Roman Numeral: X");
        break;
    }
}

您可以在 Main 方法中使用此代码。 就我个人而言,我会为错误消息使用循环,但这种使用数组是有效的。

    //Creating Variable "Number"
    int number;
    Scanner keyboard = new Scanner(System.in);

    //Storing Number
    System.out.println("Pick a number, 1 - 10");
    number = keyboard.nextInt();

    String [] romanNumeral = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};

    if(number > 10)
    {   
        System.out.print("Error, " + number + " is higher than 10.\nPlease try again");
    }
    else
    {   
        System.out.println("Roman Numeral: " + romanNumeral[number-1]);
    }

一个示例答案可能是这个:

public class RomanNumerals {

    private static final Map<Integer, String> NUMERAL_MAP = new HashMap<>();

    static {
        NUMERAL_MAP.put(1, "I");
        NUMERAL_MAP.put(2, "II");
        NUMERAL_MAP.put(3, "III");
        NUMERAL_MAP.put(4, "IV");
        NUMERAL_MAP.put(5, "V");
        NUMERAL_MAP.put(6, "VI");
        NUMERAL_MAP.put(7, "VII");
        NUMERAL_MAP.put(8, "VIII");
        NUMERAL_MAP.put(9, "IX");
        NUMERAL_MAP.put(10, "X");
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Please input a number [1-10]: ");
        int input = scanner.nextInt();

        Optional<String> found = Optional.ofNullable(NUMERAL_MAP.get(input));
        if (found.isPresent()) {
            System.out.println("Found numeral: " + found.get());
        } else {
            System.out.println("No numeral found for input: " + input);
        }
    }

}

您基本上初始化了一个 map 键,一个 integer 的键值和一个数字的字符串值。 然后通过迭代地图的 keySet 你试图找到相应的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM