국비수업/수업정리

코드 모듈화 / 다차원 배열

밀김 2023. 3. 3. 10:27
728x90

 

 

 

 

 

 

 

 

- 모듈화란? 반복되는 코드를 찾아서 단순화 시키는것

 

- 가장 많이 사용하는 데이터는 문자열

 

- split 은 쉼표를 기반으로 하여 문자열을 쪼개줌 ex) line.split(",") 

(꼭 쉼표가 아니라도 다른걸로도 문자열을 쪼개줄수있다. 파일안에 내용들을 띄어쓰기나 - 이런 기호들로 작성했다면 split에 그것들을 넣으면 된다)

 

- 문자열을 숫자로 바꿔주는 메소드 Integer.parseInt(문자열[])

 

- 숫자를 문자열로 바꿔주는 메소드 String.valueOf(문자열[])

 

- 그외에도 실수로 바꿔주는 메소드등..여러 메소드가 존재한다

 

 

package ex4.save;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;
public class Gp5 {
	public static void main(String[] args) throws IOException {
	
		FileInputStream fis = new FileInputStream("res/lotto.csv");
		Scanner fscan = new Scanner(fis);
		String line = fscan.nextLine();
		
		fscan.close();
		fis.close();
		//파일을 다 가져왔으면 무조건 닫아준다.
		
//		System.out.println(line);
		
		String[] tokens = line.split(",");
		
//		System.out.println(tokens[1]);
		
		int[] lotto = new int[6];
		
		lotto[0] = Integer.parseInt(tokens[0]);
		//문자열을 숫자로 바꿔서 대입한것
		//tokens의 [0]번째만 숫자로 바꿔서 lotto의 [0]번째에 대입한것. tokens의 값은 여전히 문자열이다. 
		String temp = String.valueOf(lotto[0]);
		//숫자를 문자열로 바꿔줌
		
		//lotto[] : 숫자상태
		//temp,tokens[] : 문자열 상태
 
		
		//로또에 토큰(=문자열)값을 저장해서 출력
		for(int i=0; i<lotto.length; i++) {
			lotto[i] = Integer.parseInt(tokens[i]);
			//tokens에 들어있는 값들이 모두 문자열 상태니까 숫자로 바꿔준다음에(Integer.parseInt)lotto에 대입해준다.
			//모든숫자들을 계속해서 차례대로 대입해야해서 for문을 사용
			System.out.println(lotto[i]);
		}
	}
}

 

 

	//로또 번호 3개를 저장할 배열 lottos를 생성
	int[] lottos = new int[6*3];
        
    {
		FileInputStream fis = new FileInputStream("res/lotto.csv");
		Scanner fscan = new Scanner(fis);
            
         int[] lotto = new int[6];
            
         //배열의 크기가 18개인 lottos에다가 lotto.csv값을 옮긴다
			for(int j=0; j<3; j++) { //크기가 6인 배열을 3번 반복해야하니까(18)  
				String line = fscan.nextLine();
				String[] tokens = line.split(",");
				//세줄의 값을 입력받아야 하기 때문에 불러오는것도 세번 반복한다. 그리고 잘라주기
				for(int k=0; k<lotto.length; k++) {
					lotto[k] = Integer.parseInt(tokens[k]);
				}//6번 반복해서 tokens에 들어있는 로또값을 lotto[k]에 넣어준다
				//3번 반복된다는거 빼고는 위에꺼랑 똑같음 
				
				//0번째 1번째 2번째줄에 차례대로 로또값을 담기 위한 for문
				for(int i=0; i<lotto.length; i++) {
					lottos[i+(6*j)] = lotto[i];
                //lottos[i]에 줄수에 따라 값을 넣어줘야 한다. 0~5:0줄 6~11:1줄 12~17:2줄 이렇게 되니까 0,6,12일때 줄수가 바뀌면서 그 줄에 맞는 값을 넣어줘야한다
                //그렇기 때문에 j가 0,1,2일때 다른값을 넣어줘야하니까 6*j
				}
			}
			
			//출력을 위한 포문
			for(int i=0; i<lottos.length; i++) {//lottos의 값을 출력할꺼니까 lottos 크기만큼 반복
				System.out.printf("%d ",lottos[i]);//로또값이 출력되면
				if(i==5 || i==11) { //0~5:0줄 6~11:1줄 12~17:2줄 이렇게되니까 0,1줄에서 줄바꿈을 해주기 위한 if문
					System.out.println();
				}
			}
			
		}//지역화

 


 

 

 

 

			for(int r=0; r<3; r++) { //2차원배열의 세로줄 0 1 2
				String line = fscan.nextLine();
				String[] tokens = line.split(",");
				
				int[] lotto = lottos[r];
//				lottos[r]의 이름을 lotto로 설정한것
//				[, , , , ,] > lottos[0]
//				[, , , , ,] > lottos[1]
//				[, , , , ,] > lottos[2]
				
				for(int i=0; i<lotto.length; i++) { //6번 반복
					lotto[i] = Integer.parseInt(tokens[i]);
					//lottos[0]일때 lotto[0~5]에 값이 채워지고
					//lottos[1]일때 lotto[6~11]에 값이 채워지고
					//lottos[2]일때 lotto[12~17]에 값이 채워진다
 				} //이게 메인 for문에 의해 또 3번이 반복되어 18개의 3줄에 채워지게되는것
			}
			fscan.close();
			fis.close();
		}//지역화1

 

{
				for(int r=0; r<3; r++) {
					int[] lotto = lottos[r];
					
					for(int i=0; i<6; i++) {
					System.out.printf("%d",lotto[i]);
					if(i==5 || i==11 || i==17) {
					System.out.print(" ");}
					else {
						System.out.print(",");
					}
					}
					System.out.println();
				}
}

 

 


 

 

 

<톱니형 배열>

 

- int[][] lottos = new int[3][6]; 는, 6칸짜리 배열 3줄이 만들어진다는 뜻이다

 

 

 

 

 

- int[][]-> 2차배열(참조변수)    int[] -> 1차배열(참조변수)    int = lottos[][] -> 정수(한줄,한칸)(값변수)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90