java - 如果变量结果超过两个并在结果末尾显示“和”,如何显示逗号?
问题描述
由用户 (x,y) 给出给定数字中 5 的倍数的代码。如果没有要显示的,打印“NONE”。如果有两个要显示,用“and”分隔。如果有两个或更多要显示,用逗号分隔,最后用“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
。
格式化字符串语法
- 如果给出
','
('\u002c'
) 标志,则通过从最低有效位到最高有效位扫描字符串的整数部分并在由区域设置的分组大小定义的间隔插入分隔符来插入特定于区域设置的分组分隔符。
您需要将其移出模式%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);
我已经展示了两个","
用作唯一分隔符的工作示例。","
对于三个定界符( and ", and"
, and " and "
) ,它变得有点棘手。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);
}
推荐阅读
- javascript - 为什么用 JavaScript 编写的递归函数不会经过所有的迭代,但在 C 和 C++ 中可以正常工作
- vb.net - WCF transportWithMessageCredential
- javascript - Autoplay.js 加载时的动画和音频
- python - 如何正确地将包含日期的 csv 中的列转换为 JSON
- python - 使用 python 脚本更新/替换 zip 文件夹中的文件
- ssas - MDX - 每个子组的前 N 个元素
- spring - @Autowired 不应该在没有 @RunWith(SpringRunner.class) 的情况下工作,但可以
- database - 是否可以从不允许 expdp 的损坏安装中恢复 Oracle 数据?
- c++ - 如何定义具有特定格式的类模板以获取模板参数?例如:Fn(Args...)
- performance - Haskell 计算性能