我正在尝试循环练习和切换语句,并尝试找出以下问题。
输出取决于整数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?
}
}
答案 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";