티스토리 뷰

핵심 내용 stack과 heap개념을 확실하게 알았고 

어떤식으로 동작하고 이 개념을 알아야 하는 이유도 알았다. 

6)배열의 길이 구하기

array.length의 값과 array[2].length의 값을 구하기.

int[][] array = {
    {95, 86},
    {83, 92, 96},
    {78, 83, 93, 87, 88}
};

여기서 [ ]의 값은 임의로 지정할수있고, 지정하지 않은경우 배열의안의 값을 직접 지정해서 넣어줘야 함

[ ]를 두번 사용하면 2차원 구조로 배열이 생성된다. 아래는 이 코드의 구조이다 보면서 생각하면

조금 더 이해가 잘된다. 

array라는 int타입 변수가 생성되었고, 그 와 동시에 배열을 만들었는데 이 값들은 heap안으로 가게된다.

heap안의 구조를 살펴보면 가장 처음으로 연결된 값은 3인데 이는 3이라는 값이 배열의 갯수가 3개라는 것이다 (정확히 말하면 이것도 길이가 3인데 배열을 값을 저장하는게 아닌 3개의 공간의 배열에 자리를 제공해주는 길이라고 생각하면 된다.)  즉 3중 배열이 만들어졌고, 각각 길이가 2 3 5 인 배열이 생성이 되었다. 

즉 array.length 값은 3이다. 그리고 array.length[2]의 값은  [0][1][2]순이므로 세번째 배열인 5가 된다. 

7)배열의 항목에서 최댓값 구하기

public class Exercise07 {
    public static void main(String[] args) {
        int max = 0;
        int[] array = { 1, 5, 3, 8, 2 };
 
 
        System.out.println("max: " + max);
    }
}
 

1,5,3,8,2라는 배열의 항목에서 최댓값을 구하는 코드를 짜야한다.

package javaEx;

public class Seven {

	public static void main(String[] args) { 
	int a=0;
	int[]array= {1,5,3,8,2};
	
	for(int i=0;i<array.length;i++) {
		if(array[i]>a) {
			a = array[i];
		}
		
	}
	System.out.println("최대값:"+a);
	}

}

 

for문을 활용해 코드를 짜면 이런 구성인데,

여기서 length를 활용한 이유는 최대값을 구하기 위해 총 5번 루프를 해야하고 

그렇기 때문에 길이를 구하는 함수 length를 사용한 것 

다섯번 반복하는 for문을 만들었고 이제, 각 배열안에 있는 값 들을 구한다.

그렇기 위해서 array[i]라는 조건을 추가했는데 이를 해석하면 array 배열안의 i번째에 있는 값을 가져오라는 뜻이다.

a값은 0인데 이는 단순하게 비교를 위해 만든 값이고 이를 비교하면 1보다 0이 크니 a값에 1값이 저장된다.

8까지는 저장되지만 , for문이 실행되는 동안 a값은 계속 변하므로 1,5,8일경우에만 a값은 작을테니

최종값은 8로 저장된뒤 if문은 더 이상 실행되지 않는다.

즉 최대값은 8이고 8이 출력된다. 

 

8)주어진 배열의 전체 항목의 합과 평균값을 구하기

public class Exercise08 {
    public static void main(String[] args) {
        int[][] array = {
            {95, 86},
            {83, 92, 96},
            {78, 83, 93, 87, 88}
        };
 
        int sum = 0;
        double avg = 0.0;
 
 
       
        
 
        System.out.println("sum: " + sum);
        System.out.println("avg: " + avg);
    }
}
 

 

package javaEx;

public class Eight {

	public static void main(String[] args) {
		 int[][] array = {
		            {95, 86},
		            {83, 92, 96},
		            {78, 83, 93, 87, 88}
		        };
		 
		        int sum = 0;
		        double avg = 0.0;
		 //
		        int c=0;
		        for(int a=0;a<array.length;a++) {
		        	for(int b=0;b<array[a].length;b++) {
		        		sum+=array[a][b];
		        		
		        		
		        	}
		        	c+=array[a].length;
		        }
		       avg=(double)sum/c;
		        
		 
		        System.out.println("sum: " + sum);
		        System.out.println("avg: " + avg);
		    }

	}


 

처음으로 일단 변수를 하나 추가해야하는데 이유는 합과 평균을 구하는 값 외에 

평균을 구하기 위해 전체 배열의 숫자를 저장할 공간이 필요하기 때문이다.

for문은 배열도 3중으로 이루어져 있기때문에, 배열의 수와 배열안에 있는 값들을 각각 구해야해서 다중으로 만들어야 한다.

 

대부분의 배열의 값을 구하기 위한 for문에 비교대상은 당연히 그 배열의 길이이다 

array.length를 활용해서 첫번째 for문은 배열의 숫자 즉 3번을 반복하게 했고 ,

array[a].length 는 3개의 배열의 길이가 각각 2,3,5이니 2회,3회,5회 루프를 할것이다. 

이런 구조를 가지면 for문이 실행되면 모든 배열을 빠지지않고 순회한다.

 

sum+=array[a][b]은 값들의 총합을 위한 코드 인데 모든 배열을 빠지지않고 순회하는 라인은 b for라인이니 

이 안에 넣어줬다. 나머지는 반복될텐니 처음 동작만 설명하자면 

a값은 현재 0인상태로 for문이 시작됐고 두번째 포문에서 a값은 현재 0인상태이고 b값또한 0인상태이다 .

array[0][0]일텐데 이것은 1번째배열 안에 있는 1번째 숫자를 가져온다는 말이기 때문에

 

sum=0 인 상태로 95라는 숫자가 저장된다. 그리고 이 숫자는 for문이 진행됨에 따라 계속 증가할것이고 

마지막에는 모든값을 더한상태가 sum 변수값에 저장된다.

 

이렇게 합은 끝났고  평균값을 구해야하는데 

그러기 위해서는 모든값을 더한값에 모든배열의 길이를 나눠줘야한다 .

배열의 길이를 각 배열마다 구하기 위해서 array[i].length 함수를 사용해 

for문이 반복됨에 따라 2,3,5라는 값을 구한다. 그 값을 더하면 10

모든 계산이 끝났기 때문에 값을 나누기 위한 코드

c=(double)sum/cnt;

라는 함수로 나누기를 해서 출력했다.

9) 학생 수와 각 학생들의 점수를 입력받아서, 최고 점수 및 평균 점수를 구하는 프로그램

 

import java.util.Scanner;
 
public class Exercise09 {
    public static void main(String[] args) {
        boolean run = true;
        int studentNum = 0;
        int[] scores = null;
        Scanner scanner = new Scanner(System.in);
 
        while(run) {
            System.out.println("-----------------------------------------------------");
            System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
            System.out.println("-----------------------------------------------------");
            System.out.println("선택> ");
 
            int selectNo = scanner.nextInt();
 
            if(selectNo == 1) {
 
 
            } else if(selectNo == 2) {
 
            
 
            } else if(selectNo == 3) {
                
              
 
            } else if(selectNo == 4) {
            
 
            } else if(selectNo == 5) {
                run = false;
            }
        }
 
        System.out.println("프로그램 종료");
    }
}

 

 

package javaEx;
import java.util.Scanner;

public class nine {

	public static void main(String[] args) {
		  boolean run = true;
	        int studentNum = 0;
	        int[] scores = null;
	        Scanner scanner = new Scanner(System.in);
	 
	        while(run) {
	            System.out.println("-----------------------------------------------------");
	            System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
	            System.out.println("-----------------------------------------------------");
	            System.out.print("선택> ");
	 
	            int selectNo = scanner.nextInt();
	 
	            if(selectNo == 1) {
	            	
	            	
	            	System.out.print("학생수:");
	              studentNum = scanner.nextInt();
	              scores= new int[studentNum];
	              
	 
	            } else if(selectNo == 2) {
	            
	            	for(int a=0;a<scores.length;a++) {
	            		System.out.print("score["+a+"]");
	            		scores[a]= scanner.nextInt();
	            
	            	}
	 
	            
	 
	            } else if(selectNo == 3) {
	               for(int b=0;b<scores.length;b++) {
	            	   System.out.print("score["+b+"]"+scores[b]);
	               }
	              
	 
	            } else if(selectNo == 4){
	            	int d=0;
	            	int e=0;
	            	int total=0;
	            	for(int c=0;c<scores.length;c++) {
	            		if(d<scores[c]) {
	            			d=scores[c];
	            			
	            		}
	            		total+=scores[c];
	            		
	            	}
	            	e=total/scores.length;
	            	
	            	System.out.print("점수의 총합:"+total);
	            	System.out.print("평균 점수:"+d);
	            
	 
	            } else if(selectNo == 5) {
	                run = false;
	            }
	        }
	 
	        System.out.println("프로그램 종료");
	    }

}

 

이 문제는 복잡해보이지만, 입력기를 하나 추가한 뒤 앞서 풀어봤던 문제를 if else if를 활용해서 

하나하나 적용했을뿐이다. 구조는 위와 동일한데 헷갈릴 만한 부분만 짧게 설명하겠다. 

 

    	
	            	
	            	System.out.print("학생수:");
	              studentNum = scanner.nextInt();
	              scores= new int[studentNum];
	              

첫번째 if문에서는 단순히 학생수의 값만 정하면 되기 때문에 스캐너 함수를 활용해서 학생수 값을 입력받았고,

학생수는 점수의 수와 동일하기 때문에 scores에 new int[studentNum]; 값을 넣어 

학생 수 만큼 배열의 길이를 정했다.

이 부분을 제외하면 elseif를 활용해 여러가지 상황의 수를 추가했다는것을 제외하면 위에서 해결한 문제를 이용해 완성할 수 있다. 

*프로그램이 종료를 누르기전에 반복되는 이유 

 while(run)

if문이 작성되기전 while문을 활용해 run이 값이 true인 이상 계속 실행될수 있도록 프로그램이 짜여있다.

그래서 5번을 누르면 run값은 false가 되기때문에 종료가 되는것이고 아닌경우에는 계속 실행되도록 설계되어있다.

'빅데이터 > 공부노트' 카테고리의 다른 글

HTML 에러코드 모음(서버에러 찾아보기용)  (0) 2021.03.07
API 란  (0) 2021.03.04
stack의 이해 심화  (0) 2021.02.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함