국비수업/수업정리
코드 모듈화 / 다차원 배열
밀김
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