尝试在Java中的循环中使用Switch语句

时间:2014-04-08 07:17:45

标签: java for-loop switch-statement java.util.scanner

我正在尝试循环练习和切换语句,并尝试找出以下问题。

输出取决于整数day值。 例如,如果用户输入8,那么它将按如下方式打印前8行:

On the 8th day of holidays, I did Eight jumping jacks,
....
...
On the 3rd day of holidays, I did Three pull downs,
...
..
On the 1st day of holidays, I did One downhill sprint.

因此,为了解决这个问题,我在for循环中使用了switch语句,然后想要使用另一个switch语句为日期号添加适当的后缀。例如:第1,第2等

我已经完成了以下工作,但是我很难受,如果他们可以帮助我,我会非常感激。

 int day = in.nextInt();
        for (int i = 0; i < day; i++) {
            switch (day) {

                // Also, do I add another switch statement here for suffix?


            }
        }

5 个答案:

答案 0 :(得分:2)

不需要循环,您可以按如下方式执行:

int day = in.nextInt();

switch(day){
    case 10:
        System.out.println("statement 10");       
    case 9:
        System.out.println("statement 9");
    case 8:
        System.out.println("statement 8");
    case 7:
        System.out.println("statement 7");
    case 6:
        System.out.println("statement 6");
    case 5:
        System.out.println("statement 5");
    case 4:
        System.out.println("statement 4");
    case 3:
        System.out.println("statement 3");
    case 2:
        System.out.println("statement 2");
    case 1:
        System.out.println("statement 1");
    }

因此,当输入为8时,它将根据您的需要打印从8开始的所有语句。

答案 1 :(得分:1)

为每个操作使用方法。每种方法都有自己的开关:

private String getDaySuffix(int day) {
    switch(day) {
    case 1: return "st";
    // ...
    }
}

private String getActivity(int day) {
    switch(day) {
    case 1: return "One downhill sprint";
    // ...
    }
}

for (int i = 0; i < day; i++) {
    String s = "On the " + day + getDaySuffix(day) + 
               " day of holidays, I did " + getActivity(day);
}

通过这种方式,你可以提高凝聚力:每种方法都能完成它应该做的事情,而不是别的。

答案 2 :(得分:1)

假设某天有用户输入的值..然后..

for(int i=day;i<=day && i!=0;i--)
{
switch(i)
{
case 8 :
On the 8th day of holidays, I did Eight jumping jacks,
break;
.
.
.

case 3 :
On the 3rd day of holidays, I did Three pull downs,
break;
.
.

case 1 :
On the 1st day of holidays, I did One downhill sprint.
break;

default :
break;
}
}

答案 3 :(得分:1)

要获得正确的后缀,您可以使用开关

private static String getSuffix(final int number) {
    switch (number) {
        case 0: throw new IllegalArgumentException();
        case 1: return "st";
        case 2: return "nd";
        case 3: return "rd";
        default:return "th";
    }
}

要创建数字的单词形式,您可以使用数组

final static String[] numbers = new String[] {
        "zero", "one", "two", "three", "four", 
        "five", "six", "seven", "eight", "nine", "ten"
};

要使用此功能,只需将numbers[yourInt]附加到您的字符串即可 numbers[5]例如{}将是"five"



将所有内容放在一起可能看起来像这样(如果需要,它还会向活动附加s

public class Main {
    final static String[] numbers = new String[] {
            "zero", "one", "two", "three", "four", 
            "five", "six", "seven", "eight", "nine", "ten"
    };

    final static String  pattern = "On the %d%s day of holidays, I did %s %s%s\n";
    final static Scanner in      = new Scanner(System.in);

    public static void main(String[] args) {
        final int    day = in.nextInt();
        final String activity;

        switch (day) {
            case 1  : activity = "downhill sprint";  break;
            // ...
            case 3  : activity = "pull down";        break;
            //...
            case 8  : activity = "jumping jack";     break;
            default : activity = "";
        }

        if (!activity.equals(""))
            System.out.printf(pattern, day, getSuffix(day), numbers[day], activity, day > 1 ? "s" : "");

    }

    private static String getSuffix(final int number) {
        switch (number) {
            case 0: throw new IllegalArgumentException();
            case 1: return "st";
            case 2: return "nd";
            case 3: return "rd";
            default:return "th";
        }
    }
}

答案 4 :(得分:0)

如果您有一个有限(和小)的数字,可以使用switch语句将数字转换为单词。例如,只有1到10的数字。

如下:

String numberWord;

switch (day)
{
case 1:
    suffix = "one";
    break;
case 2:
    suffix = "two";
    break;
case 3:
    suffix = "three";
    break;

    //ETC

default: break;
}

但是,如果您想要更大范围的数字,我建议您查看以下页面: http://www.rgagnon.com/javadetails/java-0426.html

它包含一个将数字转换为单词的方法。它转化为数十亿。

关于后缀,可以使用与上述类似的解决方案。但要注意11,12和13,因为它们有独特的后缀。

String GetSuffix (int number)
{
    int lastTwoDigits = number % 100;

    if (lastTwoDigits == 11 || lastTwoDigits == 12 || lastTwoDigits == 13)
    {
        return "th";
    }

    switch (number % 10)
    {
    case 1:
        suffix = "st";
        break;
    case 2:
        suffix = "nd";
        break;
    case 3:
        suffix = "rd";
        break;
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 0:
        suffix = "th";
        break;

    default: break;
    }

    //This shouldn't happen
    return "";
}

以下是如何使用它的示例:

String result = "On the " + Integer.toString(day) + GetSuffix(day) + " day of holidays, I did " + EnglishNumberToWords(day) + " jumping jacks";