我有循环,它给我一些数字,下面是我的代码
public static void main(String[] args){
for (int i = 1; i < 100 ; i++) {
if (i % 15 ==0) {
System.out.println("A="+i);
}
else if (i % 5 == 0 ){
System.out.println("B="+i);
}
else if (i%3==0){
System.out.println("C="+i);
}
}
}
它给我的结果如
C=3
B=5
C=6
C=9
B=10
C=12
A=15
C=18
B=20
C=21
C=24
B=25
C=27
A=30
C=33
B=35
C=36
C=39
B=40
C=42
A=45
C=48
B=50
C=51
但我需要像
这样的结果C=3,6,9,12...
B=5,10,20...
A=15,30,45...
如果有人可以帮助我,我将非常感激 提前谢谢
答案 0 :(得分:0)
这是我如何做到的一个例子:
HashMap<String, ArrayList<Number>> map = new HashMap<String, ArrayList<Number>>();
map.put("A", new ArrayList<Number>());
map.put("B", new ArrayList<Number>());
map.put("C", new ArrayList<Number>());
for (int i = 1; i < 100; i++) {
if (i % 15 == 0) {
map.get("A").add(i);
} else if (i % 5 == 0) {
map.get("B").add(i);
System.out.println("B=" + i);
} else if (i % 3 == 0) {
map.get("C").add(i);
}
}
for (Entry<String, ArrayList<Number>> entry : map.entrySet()) {
System.out.print(entry.getKey() + "=");
String strResults = Arrays.toString(entry.getValue().toArray());
System.out.print(strResults.substring(1, strResults.length() - 1));
System.out.println();
}
它可以更通用,但它可以做它想要做的事情。
答案 1 :(得分:0)
使用Java8,你可以创建一个包含所有值的IntStream
,用分组函数对它们进行分区然后打印它们,如下所示:
Map<Character, List<Integer>> mapped = IntStream.range(0, 100).boxed()
.filter(i -> i % 5 == 0 || i % 3 == 0)
.collect(Collectors.groupingBy(
i -> {
if (i % 15 == 0) return 'A';
else if (i % 5 == 0) return 'B';
else if (i % 3 == 0) return 'C';
return null;
})
);
mapped.forEach((k,v) -> System.out.println(k+"= "+v.stream().map(Object::toString).collect(Collectors.joining(", "))));
输出:
A= 0, 15, 30, 45, 60, 75, 90
B= 5, 10, 20, 25, 35, 40, 50, 55, 65, 70, 80, 85, 95
C= 3, 6, 9, 12, 18, 21, 24, 27, 33, 36, 39, 42, 48, 51, 54, 57, 63, 66, 69, 72, 78, 81, 84, 87, 93, 96, 99
第一部分生成一个流,其中所有数字都在[0,100)
范围内,然后筛选出不能被5或3整除的所有内容,然后通过groupingBy根据其除数进行分割。
第二部分只是遍历所有列表并打印出来。
答案 2 :(得分:0)
以下是使用Java 8流的解决方案:
System.out.println("A = " + modList(3));
System.out.println("B = " + modList(5));
System.out.println("C = " + modList(15));
private String modList(int mod) {
return IntStream.range(1, 100).filter(n -> n % mod == 0).boxed()
.collect(Collectors.joining(", ")));
}
或者是一种更通用的解决方案,可以在一次传递中为您想要的模数创建一个地图:
List<Integer> modList = Arrays.asList(3, 5, 15);
Map<Integer, List<Integer>> modMap = modList.stream()
.collect(Collectors.toMap(Function.identity(), ArrayList::new));
IntStream.range(1, 1000).forEach(n -> modList.stream().filter(mod -> n % mod == 0)
.forEach(mod -> modMap.get(mod).add(n)));
System.out.println("A = " + modMap.get(3).stream().collect(Collectors.joining(","));
...
答案 3 :(得分:-1)
您可以将As
,Bs
和Cs
存储在ArrayList
中,然后将其打印出来。您必须存储它们,因为您无法重新打印在控制台中打印的结果。
例如,如果每个选项都有一个数组:
ArrayList<int> a = new ArrayList<int>();
ArrayList<int> b = new ArrayList<int>();
ArrayList<int> c = new ArrayList<int>();
在你的for循环中,你必须存储你得到的值:
public static void main(String[] args){
for (int i = 1; i < 100 ; i++) {
if (i % 15 ==0) {
a.add(i);
}
else if (i % 5 == 0 ){
b.add(i);
}
else if (i%3==0){
c.add(i);
}
}
}
以后你可以把它们打印出来:
System.out.print("A=");
for (int i : a) {
System.out.print(i);
System.out.println(",");
}
此代码将等于ArrayList
和Bs
的{{1}}(当然,每个Cs
的具体部分都必须更改)。
我希望它会对你有所帮助!
答案 4 :(得分:-3)
要在同一行打印,请使用System.out.print()
代替println。然后使用\n
或System.out.println
创建新行。
在您的情况下,您必须将As,B和C存储在数组/列表中,以便稍后可以访问它们以进行打印。