时间:2019-10-04 05:13:15

标签: java switch-statement

我想先使用扫描仪输入从用户输入中获得3位数字。 3位数字可以是001或999,但不能是000。然后,我需要在句子“第***人”中打印该数字。 假设3位数字是021,那么我希望它会显示“ 21st person”。

import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a value ");
    int abc = input.nextInt();
    String suffix = "";
    if(abc==000){
    System.out.println("invalid input");
    }
    switch(abc%10){ //get the last digit of the value
         case 1: suffix = "st";break;
         case 2: suffix = "nd";break;
         case 3: suffix = "rd";break;
         default: suffix = "th";
    }
    System.out.println(abc+suffix);
    }
}

如何更改我的代码,使程序可以检查第11、12、13、111个案件?

2 个答案:

答案 0 :(得分:0)

也许我们应该分别处理4到20。您能检查一下是否可行吗?

if (abc > 3 && abc < 21) { // 4 to 20
        suffix = "th";
}
else {
        switch (abc % 10) { //get the last digit of the value
            case 1:
                suffix = "st";
                break;
            case 2:
                suffix = "nd";
                break;
            case 3:
                suffix = "rd";
                break;
            default:
                suffix = "th";
        }
}

答案 1 :(得分:0)

基本上,您还应该首先检查右边的第二个数字是否为1。要获取右边的第二个数字,请使用以下表达式:

number / 10 % 10

/ 10使右边的第二个数字成为第一个数字,而% 10是您知道如何从右边得到的第一个数字。

因此您的代码应如下所示:

if (number / 10 % 10 == 1) { // check second digit from the right first
    suffix = "th";
} else { // if it's not 1, do the switch.
    switch(abc%10){
         case 1: suffix = "st";break;
         case 2: suffix = "nd";break;
         case 3: suffix = "rd";break;
         default: suffix = "th";
    }
}
System.out.println(abc+suffix);