如何以单行打印所有结果

时间:2015-08-31 22:31:38

标签: java loops

我有循环,它给我一些数字,下面是我的代码

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...

如果有人可以帮助我,我将非常感激 提前谢谢

5 个答案:

答案 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)

您可以将AsBsCs存储在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(",");
}

此代码将等于ArrayListBs的{​​{1}}(当然,每个Cs的具体部分都必须更改)。

我希望它会对你有所帮助!

答案 4 :(得分:-3)

要在同一行打印,请使用System.out.print()代替println。然后使用\nSystem.out.println创建新行。

在您的情况下,您必须将As,B和C存储在数组/列表中,以便稍后可以访问它们以进行打印。

相关问题