자바 배열 코드 관련 해석좀..

자바 배열 코드 관련 해석좀..

작성일 2012.03.26댓글 1건
    게시물 수정 , 삭제는 로그인 필요

두개의 코드가 있습니다.
물론 고수분들은 벌써 눈치채셨겠지만 결과값은 둘다 같습니다.

제가 이번에 자바 공부를 하면서 다중배열과 for문에 이해를 못해서 요즘 몇일째 애를 먹고 있습니다.

상세한 코드 분석좀 써주시면 감사하겠습니다 ㅠㅠ 내공 다 겁니다~

package hard;

public class ArrayTest{
    public static void main(String[] args){
        int sum = 0,sum2 = 0,sum3 = 0,sum4 = 0,sum5=0;
        int[][] input={{1,1,1},{2,2,2},{3,3,3}};
       
        for (int i=0;i<input.length;i++){
            for (int j=0;j<input.length;j++){
                System.out.print(input[i][j]+",");
            }
            sum += input.length;
            System.out.print(sum+"\n");
            sum2 += input[i][0];
            sum3 += input[i][1];
            sum4 += input[i][2];
            sum5 += sum;
        }
        System.out.print(sum2+","+sum3+","+sum4+","+sum5+"\t");
   
    }
}
       
---------------------------------------------------------------------------------------------
package hard;

public class ArrayTest{
    public static void main(String[] args){
        int[][] input={{1,1,1},{2,2,2},{3,3,3}};
        int sum = input[0][0]+input[1][1]+input[2][2];
        int rsum = sum+sum+sum;
       
        for (int i=0;i<input.length;i++){
            int sum0 = input[i][0]+input[i][1]+input[i][2];
            for (int j=0;j<input.length;j++){
                System.out.printf("%d\t",input[i][j]);
            }
            System.out.printf("%d\n",sum0);
        }
        System.out.printf("%d %d %d %d\n",sum,sum,sum,rsum);
           
    }
}


#자바 배열 선언 #자바 배열 초기화 #자바 배열 정렬 #자바 배열 출력 #자바 배열 추가 #자바 배열 길이 #자바 배열 복사 #자바 배열 자르기 #자바 배열 중복 제거 #자바 배열 크기 미지정

profile_image 익명 작성일 -

 

2 차원 배열 :

     |   0    |    1    |    2     |
 ----+--------+---------+----------+
   0 |   1    |    1    |    1     |
 ----+--------+---------+----------+
   1 |   2    |    2    |    2     |
 ----+--------+---------+----------+
   2 |   3    |    3    |    3     |
 ----+--------+---------+----------+
  
 맨 윗 줄의 0, 1, 2 이 두번째 index, 세로줄의 0, 1, 2 가 첫번째 index 로 보면
 
input[0][0] = 1;
input[0][1] = 1;
input[0][2] = 1;
input[1][0] = 2;
input[1][1] = 2;
input[1][2] = 2;
input[2][0] = 3;
input[2][1] = 3;
input[2][2] = 3;

의 값이 됩니다.


소스 설명을 해보면,

 

package hard;

public class ArrayTest{
    public static void main(String[] args){
        int sum = 0,sum2 = 0,sum3 = 0,sum4 = 0,sum5=0;
        int[][] input={{1,1,1},{2,2,2},{3,3,3}};

           // 3 x 3 의 배열을 정의해서 위의 값을 할당하는 것이고,
       
        for (int i=0;i<input.length;i++){
            for (int j=0;j<input.length;j++){
              // j 값이 0에서 2(input.length --> 엄격히 하면 input[i].length 로 하는게

              // 의미상 맞습니다.)까지의 값을 출력하되, 출력한 값의 뒤에 ", " 를

              // 출력하게 됩니다.
              // println 이 아닌 print 로 한 것은 출력 후에 다음줄로 넘어가지 않기 위한 것이구요.
                System.out.print(input[i][j]+",");   
            }
            sum += input.length;  

               // 여기도 의도한 바대로 할려면 각각의 row 에 대한 데이터 개수의 합이라고

               // 하면 input[i].length 가 되어야 할 텐데
               // 마침 데이터가 3 x 3 인 관계로 3개의 맞아 떨어져서 결과는 동일할

               // 거 같네요.
            System.out.print(sum+"\n"); 

               // 여기서는 데이터 출력 후에 마지막에 sum 값인데, 이름과 다르게 행의

               // 값이 SUM 되지 않고, 개수가 점차적으로 누적된 값이 됩니다.
               // 의도하지 않게 값이 행의 합처럼 보이나, 데이터 값을 조금만 바꾸면

               // 의도한 값과 다르게 됩니다.
            sum2 += input[i][0];    

               // 첫번째 열(column)의 합을 구하기 위한 변수가 됩니다.

               // input[0][0] + input[1][0] + input[2][0]
            sum3 += input[i][1];    

               // 두번째 열(column)의 합을 구하기 위한 변수가 됩니다.
            sum4 += input[i][2];    

               // 세번째 열(column)의 합을 구하기 위한 변수가 됩니다.
            sum5 += sum;        

               // sum 은 총 data 개수의 합이 되어버립니다.
        }
        System.out.print(sum2+","+sum3+","+sum4+","+sum5+"\t");  

          // 각 행의 합과 함께 전체 개수의 출력되고, \t 는 \n 으로 수정해야 할 듯 합니다.
   
    }
}

1,1,1,3
2,2,2,6
3,3,3,9
6,6,6,18


* 프로그램의 의도상 sum 은 각 행의 합을, sum5 는 전체 데이터의 합을 하고자 하는 거 같습니다.
  그렇게 할려면
   for (int i=0;i<input.length;i++){
     sum = 0; // 각 행단위로 넘어가기 전에 sum 값을 0으로 초기화 합니다.
     for (int j=0;j<input.length;j++){
       System.out.print(input[i][j]+",");
       sum += input[i][j]; // 해당 행의 각 열의 값을 합산합니다.
     }
     // sum += input.length; 의미 없는 데이터 길이의 합은 삭제합니다.
  위처럼 수정하시면 의도한 바가 되지 않을까 합니다.
 
 
package hard;

public class ArrayTest{
    public static void main(String[] args){
        int[][] input={{1,1,1},{2,2,2},{3,3,3}};
        int sum = input[0][0]+input[1][1]+input[2][2];
         // 앞에 보여준 데이터 값으로 맵핑해서 보면 1 + 2 + 3 = 6; 의 값이 됩니다.
        int rsum = sum+sum+sum;
         // 6 + 6 + 6 = 36; 의 값이 됩니다.
       
        for (int i=0;i<input.length;i++){
            int sum0 = input[i][0]+input[i][1]+input[i][2];

               // 각 행의 열의 합이 됩니다. 3(i=0), 6(i=1), 9(i=2) 값이 됩니다.
            for (int j=0;j<input.length;j++){
                System.out.printf("%d\t",input[i][j]); 

                  // 각 row, column 의 값을 tab 값을 구분자로 해서 출력합니다.
            }
            System.out.printf("%d\n",sum0); 

               // 각 행의 합을 마지막에 출력한 후 다음 줄(\n)으로 넘어갑니다.
        }
        System.out.printf("%d %d %d %d\n",sum,sum,sum,rsum); 

           // sum 값은 이미 6 으로 동일하게 적용되어 출력되고, 전체 합인 36이 출력됩니다.
           
    }
}

1       1       1       3
2       2       2       6
3       3       3       9
6 6 6 18

 

* 아래의 소스도 데이터 값을 조금만 바꾸면 원하는 값이 될 수 없습니다.

  소스 상으로 위의 소스를 수정해서 사용하시는 나을 듯 합니다.

 

자바 배열 코드 관련 해석좀..

두개의 코드가 있습니다. 물론 고수분들은 벌써 눈치채셨겠지만... 제가 이번에 자바 공부를 하면서 다중배열과 for문에 이해를 못해서...

자바 코드 해석

자바 코드 clone Collections.reverse Arrays.sort 등 등 잘... 코드 해석 좀 해주세요 ㅜㅜ 안녕하세요. String[] str = {"다","가","바","나"} ; 이건 문자열 배열...

자바스크립트 코드 해석 좀...

... 제가 자바를 잘 몰라서 그런데 이 코드좀 알기쉽게 해석 좀 부탁드리겠습니다. 급합니다!... 2차원 배열로 arr에 저장됩니다. // ex) [[3,652...

간단한 자바코드 해석좀 부탁드립니다.

간단한 자바코드 해석좀 부탁드릴께요.... 스트링 배열을 받는다. System.out.println(args[1]); //인자로... 위 클래스에서 main 메서드는 메서드 중에서도 특이한...

자바 이거 해석좀 해주세요

... 이 자바 코드는 문자열을 역순으로 출력하는... 주어진 코드해석하면 다음과 같습니다. 1.... `n`의 크기를 가진 새로운 문자 배열 `arr`을 생성합니다....

자바 코드 해석

... 이 코드에서 궁금한게 있습니다. Box라는 클래스를 정의하고 이 클래스를... 제가 배열을 이렇게 정의하는건 처음봐서 혹시 관련내용(?) 같은것 자세히 설명해...