簡體   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