2015-01-16 2 views
-1

이 프로그램은 Java 6 기능을 사용하여 파스칼의 삼각형을 인쇄합니다. I 자바 제Java 함수의 Lambda 표현식

에서 람다 구현 printTriangle에
public static void triangleusingAL() { 
    int size = 7; 

    List<Integer> triList = new ArrayList<Integer>(); 
    Map<Integer, List<Integer>> triMap = new LinkedHashMap<>(); 

    for (int i = 0; i < size; i++) { 
     List<Integer> rowList = new ArrayList<Integer>(); 
     List<Integer> prevList = new ArrayList<Integer>(); 

     if (i == 0) { 
      rowList.add(1); // add first element 
      triMap.put(i, rowList); 
      continue; 
     } 

     rowList.add(1); 

     prevList = triMap.get(i - 1); 
     for (int j = 1; j < i; j++) { 
      int firstNo = prevList.get(j - 1); 
      int secondNo = prevList.get(j); 
      rowList.add(firstNo + secondNo); 

     } 

     rowList.add(1); 

     triMap.put(i, rowList); 
    } 

public static void printTriangle(Map<Integer, List<Integer>> triMap) { 
    System.out.println("\n Pascal Triangle using ArrayList"); 
    int pos = 5 * triMap.size(); 
    int startIndex = pos; 

    Iterator entries = triMap.entrySet().iterator(); 
    while (entries.hasNext()) { 
     List<Integer> rowList = new ArrayList<Integer>(); 
     Entry thisEntry = (Entry) entries.next(); 
     rowList = (List<Integer>) thisEntry.getValue(); 

     Iterator listItr = rowList.iterator(); 
     int j = 0; 
     while (listItr.hasNext()) { 
      if (j != 0) { 
       pos = 10; 
      } 

      System.out.printf("%" + pos + "s", listItr.next()); 
      j = 1; 
     } 
     System.out.println(); 
     startIndex = startIndex - 5; 
     pos = startIndex; 
    } 
} 

정의 변경 금액 나 미세이다() 함수 로직을 변경하려는.

+5

를 시작하는 데 도움이 될 것입니다? –

+3

문제가 있으면 질문을 던져야합니다. – macoms01

+1

개인적인 노력없이 숙제 냄새가납니다 ... –

답변

2

이 당신을 다시 들고있어 무엇

// value to keep track of the last row 
long[][] values = {{1}}; 
System.out.println("[1]"); 
IntStream.range(1, 66).mapToObj($ -> { 
    // next row has one more number 
    long[] next = new long[values[0].length + 1]; 
    // it starts and ends with a 1 
    next[0] = next[next.length - 1] = 1; 
    // calculate all the numbers in between 
    IntStream.range(1, values[0].length) 
      .forEach(i -> next[i] = values[0][i] + values[0][i - 1]); 
    // save it for next time and turn it into a String 
    return Arrays.toString(values[0] = next); 
}).forEach(System.out::println); 

인쇄

[1] 
[1, 1] 
[1, 2, 1] 
[1, 3, 3, 1] 
[1, 4, 6, 4, 1] 
[1, 5, 10, 10, 5, 1] 
[1, 6, 15, 20, 15, 6, 1] 
[1, 7, 21, 35, 35, 21, 7, 1] 
[1, 8, 28, 56, 70, 56, 28, 8, 1] 
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1] 
[1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1] 
[1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1] 
[1, 12, 66, 220, 495, 792, 924, 792, 495, 220, 66, 12, 1] 
... deleted ... 
+0

도움 주셔서 대단히 감사합니다. – user3677652