一个代码,给出用户给定数字 (x,y) 中 5 的倍数。如果没有要显示的,打印“NONE”。如果有两个要显示,用“and”隔开。如果有两个或两个以上要显示,则用逗号和末尾的“和”分隔。
System.out.print("Enter first number: ");
int x = new Scanner (System.in).nextInt();
System.out.print("Enter last number: ");
int y = new Scanner (System.in).nextInt();
System.out.print("The multiples of 5 from "+x+ " to " +y+ " : ");
for (;x<=y; x++) {
if(x%5==0) {
System.out.printf("%,d ",x);
}
}
示例输出:
Enter number: 1
Enter number: 4
The multiples of 5 from 1 to 4: NONE
示例输出:
Enter number: 8
Enter number: 12
The multiples of 5 from 8 to 12: 10
示例输出:
Enter number: 1
Enter number: 17
The multiples of 5 from 1 to 17: 5, 10, and 15.
最佳答案
您在 printf
中使用的逗号不是一个简单的字符,它是模式 %,d
的一部分。
Format String Syntax
- If the
','
('\u002c'
) flag is given, then the locale-specific grouping separator is inserted by scanning the integer part of the string from least significant to most significant digits and inserting a separator at intervals defined by the locale's grouping size.
您需要将其移出模式 %d
并添加条件以删除第一个匹配数字的逗号。
for (int i = 0; x <= y; x++) {
if (x % 5 == 0) {
System.out.printf("%s%d", (i++ == 0 ? "" : ","), x);
}
}
或者你可以用花哨的方式来写
String result = IntStream.rangeClosed(x, y)
.filter(i -> i % 5 == 0)
.mapToObj(Integer::toString)
.collect(Collectors.joining(","));
System.out.println(result);
我展示了两个使用 ","
作为唯一分隔符的工作示例。对于三个定界符("、"
和 "、"
、"和 "
),它变得有点棘手。在极少数情况下,switch
语句会派上用场。
final List<String> values = IntStream.rangeClosed(x, y)
.filter(i -> i % 5 == 0)
.mapToObj(Integer::toString)
.collect(Collectors.toList());
switch (values.size()) {
case 0:
System.out.println("NONE");
break;
case 1:
System.out.println(values.get(0));
break;
case 2:
System.out.println(String.join(" and ", values));
break;
default:
final String last = values.remove(values.size() - 1);
System.out.println(String.join(", ", values) + ", and " + last);
}
关于java - 变量结果多于两个且结果末尾为 "and"如何显示逗号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58097069/