2015-08-31 76 views
-1

我有循环这是给我下面的一些数字是我的代码如何打印所有结果单行

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

如果有人可以帮助我,我将非常感谢 在此先感谢

+4

您需要将所有的As,Bs和Cs收集到列表中,而不是随时打印出来。你知道怎么做吗? –

+0

将'i%15 == 0'的所有'i'存储为字符串 - 'sA','i'将'i%5 == 0'存入'sB',所有'i'存储为'i%3 == 0“放入第三个字符串”sC“ - 最后打印这三个字符串。 – Abhi

+0

感谢您的支持@ Louis @Abhi – ddjadav

回答

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

请不要为未表现出努力的OP充当代码写入服务。 – chrylis

-3

要在同一行中打印,请使用System.out.print()而不是println。然后使用\nSystem.out.println创建一个新行。

就你而言,你必须将As,Bs和Cs存储在一个数组/列表中,以便以后可以访问它们以便打印它们。

-1

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

此代码将等于ArrayListBsCs(当然,每个ArrayList的具体部分都有改变)。

我期待它对您有所帮助!

+1

对于downvoter:你能解释一下,我的答案是错的吗?我想了解我的错误。 –

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按照它的除数对它们进行分割。

第二部分只是遍历所有列表并打印它们。

+0

你的'mapToObj'可以被'boxed'替代,这似乎更加明确IMO。 – sprinter

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(", "))); 
} 

或者说,在一个通过尽可能多的modulos只要你想创建一个映射一个更通用的解决方案:

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(",")); 
...