>source

Java에서 2D 목록을 사용하여 파스칼 삼각형을 생성하는 데 질문이있었습니다 .... 나는 솔루션을 찾을 수 있었지만 내 프로그램에서 메서드 추가 ()를 사용하고있을 때 ... 나는 오류가 발생하지 않았지만, 세트 방법을 사용했을 때 나는 길이 1 동안 arrayOtOfBoundIndex의 오류를 얻고 있었다. 그 차이를 지적하여 누군가가 나를 도울 수 있습니까? (오류가 오는 곳이 댓글이있는 곳)

입력 -numRows= 5. 예상 출력 -[[1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]


    public List<List<Integer>> generate(int numRows) {
            List<List<Integer>> Pa= new ArrayList<List<Integer>>();
            List<Integer>row,prev= null;
            for(int i= 0 ; i< numRows;i++){
                row=new ArrayList<Integer>();
                for(int j= 0 ; j<=i;j++){
                    if(j==i||j==0)
                        row.add(1);
                    else{
                      //thisLine -->                        row.set(j,prev.get(j-1)+prev.get(j));
                    }
                }
                prev=row;
                Pa.add(i,row);
            }
            return Pa;
        }

at line 64, java.base/jdk.internal.util.Preconditions.outOfBounds
  at line 70, java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex
  at line 248, java.base/jdk.internal.util.Preconditions.checkIndex
  at line 373, java.base/java.util.Objects.checkIndex
  at line 439, java.base/java.util.ArrayList.set
  at line 12, Solution.generate
  at line 54, __DriverSolution__.__helper__
  at line 84, __Driver__.main

set () 메서드는 기존 인덱스에서만 요소를 덮어 쓸 수 있습니다. add () 메서드는 새 요소를 추가합니다.

Thomas Kläger2021-04-20 06:03:14

SET 지정된 색인의 목록에서 이미 기존 값을 교체하는 데 사용됩니다. 추가 목록의 끝에 또는 지정된 인덱스 (해당 인덱스의 이전 요소가 대체되지만 오른쪽으로 이동하지 않음) 목록의 새 요소를 추가합니다.

Pshemo2021-04-20 06:03:14
  • 답변 # 1

    문제는 존재하지 않는 색인으로 설정 값입니다. NumRows= 4가 있다고 가정 해 봅시다

    그래서 :

    i== 2 :

    j== 0 -> 색인이있는 요소 생성= 0.

    j== 1 -> 색인= 1에 새 요소를 설정하려고합니다 (ID= 0이있는 요소가 하나만 있으면 ID= 1이있는 요소가 없음)

  • 답변 # 2

    set () 매개 변수

    set () 메서드는 두 개의 매개 변수를 취합니다.

    • 색인 -대체 될 요소의 위치
    • 요소 -색인
    • 에 저장할 새 요소

    set () 반환 값

    • 는 이전에 index
    • 에있는 요소를 반환합니다.
    • 는 인덱스가 범위를 벗어난 경우 indexoutOfBoundsException을 throw합니다.

    ArrayList set () vs. add ()

    add () 및 set () 메소드의 구문은 매우 유사합니다.

    //syntax of add()
    arraylist.add(int index, E element)
    //syntax of set()
    arraylist.set(int index, E element)
    

    모두 메소드가 모두 ArrayList에 새 요소를 추가하고 있습니다. 이것이 어떤 사람들이 두 방법을 유사하게 고려하는 이유입니다.

    그러나 그 사이에는 큰 차이가 있습니다.

    • set () 메서드는 해당 위치에서 이전 요소를 교체하여 지정된 위치에 새 요소를 추가합니다.
    • add () 메서드는 이전 요소를 올바른 위치로 이동시켜 지정된 위치에 새 요소를 추가합니다.

    예제 :

    ArrayList<String> list= new ArrayList<String>();
    list.add("a");
    list.add(1, "b");
    System.out.println(list);
    list.set(0, "c");
    System.out.println(list);
    list.add(0, "d");
    System.out.println(list);
    ---------------Output -------------------------------------
    [a, b]
    [c, b]
    [d, c, b]
    

  • 이전 angular : 나는 NPM을 실행할 때 한 컴퓨터에서 다른 컴퓨터에서 다른 컴퓨터에서 다른 컴퓨터로 이주 된 각 프로젝트를 이주했습니다.이 오류가 있습니다.
  • 다음 ios : 스위프트의 문자열에서 특정 값을 추출하십시오