My footsteps
일요일 혼공 / (2차원배열에 파일값 넣기,2차원 배열 자리바꿔서 파일로 보내기,로또 자리바꾸기) 본문
728x90
★★★암기!!!★★★
<2차원 배열에 파일값 갖고와서 넣고 출력해보기>
FileInputStream fis = new FileInputStream("res/bitmap.txt");
Scanner fsc = new Scanner(fis);
int[][] bitmap = new int[10][20];
for(int r=0; r<10; r++) {//세로
String line = fsc.nextLine(); //읽어들인 파일 라인단위로 잘라서 String line에 넣음
String[] tokens = line.split(""); //개당으로 하나씩 잘라서 tokens배열에 넣는 과정
for(int i=0; i<20; i++) {//가로
bitmap[r][i] = Integer.parseInt(tokens[i]);
//잘라서 넣은 tokens는 형태가 string이니까 int로 형변환해서 넣어줌
//tokens[i][r] 안해도 되는 이유는, 이미 세로가로 설정을 해놨기 때문에 잘라넣었던 배열들이 알아서 길이에 맞게 들어가는듯?
}
}
//출력을 위한 for문
for(int r=0; r<10; r++) {
for(int i=0; i<20; i++) {
System.out.print(bitmap[r][i]);
}
System.out.println();
}
<2차원 배열 앞과 뒤 자리바꿔서, 파일에 쏘기>
//자리바꾸기
for(int r=0; r<10; r++) {
for(int i=0; i<10; i++) { //맨앞과 맨뒤를 바꾸는거니까 절반만 바꾸면 자리를 다 바꾸기 때문에,i의 원래길이 20의 절반인 10으로 길이를 설정한다
int tmp = bitmap[r][i];//bitmap[r][i]은 행과,열 두개로 쪼갠거니까 정수형 상태다. 그래서 int로 저장이 가능한것
bitmap[r][i] = bitmap[r][19-i]; //i가 19가 끝이니까 뒤에서부터 앞으로 오는거면 마이너스다.
bitmap[r][19-i] = tmp;
}
}
FileOutputStream fos = new FileOutputStream("res/bitmap-out.txt");
PrintStream ps = new PrintStream(fos);
for(int r=0; r<10; r++) {
for(int i=0; i<20; i++) {
ps.print(bitmap[r][i]);
}
ps.println(); //파일 보내줄때 개행한다
}
<로또 자리바꾸기>
/*
1.로또 클래스와 로또 안에 넣을 값들 변수(num)만들고
2.로또 여섯개 담을 배열 객체 만들기
3.num에 값을 넣어야 하니 num을 품고있는 객체 Lottos의 대한 객체방 만들어주기
4.생긴 객체방에 있는 num에다가 원하는 랜덤값들을 넣어주기
5.객체방이,객체배열을 가리키게 하기(값 공유)
6.인덱스 증가시키며 다음칸으로 가면서 값이 없으면 빈괄호를 출력하고 값이 있으면 출력해줌
*/
class Lootoo{
int num;
}
public class Theglory {
public static void main(String[] args){
Lootoo[] loto = new Lootoo[6];
int index=0;
Random rand = new Random();
while(true) {
System.out.println("현재번호: \n1.뽑기2.바꾸기");
Scanner sc = new Scanner(System.in);
int menu = sc.nextInt();
Lootoo lotos = new Lootoo();
switch(menu) {
case 1:
lotos.num = rand.nextInt(45)+1;
//lotos가 num을 갖고있긴 했으니까 값넣는건 문제가 안됨. 사용하는게 안될뿐
loto[index]=lotos;
//★★★하지만 이 과정을 함으로써 lotos가 num을 사용할수 있게 됨
index++;
//for문 한번 돌고 나오면,다음 인덱스칸으로 간다
for(int i=0; i<loto.length; i++) {
if(loto[i]!=null) //loto[i]라는 공간이 비어있지 않으면
System.out.printf("[%d]",loto[i].num);
//랜덤값이 들어간 num을 출력한다. num은 값이고,loto[i]는 공간
else
System.out.print("[ ]");
}
System.out.println();
break;
case 2:
if(index==0) //시작하자마자(index==0) 막번호 뽑겠다고 하면 뜨는 문구
System.out.println("번호 뽑고 말하슈");
else if(index!=0) //시작은했고(index==0이아닌 최소 1부터)막번호 뽑겠다고 하면 인덱스를 감소시킨다(인덱스 뒤로 가기)
--index;
break;
}
}
<로또 자리바꾸기 복습용 줄줄이 주석 ver..주석만 보고 쳐보기>
class Lootoo{
int num;
}
public class Theglory {
public static void main(String[] args){
Lootoo[] loto = new Lootoo[6];//Lootoo형식의 loto 6칸의 배열 만들기
int index=0;//인덱스 초기화
Random rand = new Random();//랜덤
while(true) {
System.out.println("현재번호: \n1.뽑기2.바꾸기");
Scanner sc = new Scanner(System.in);//스캐너
int menu = sc.nextInt();//스캐너값 메뉴에
Lootoo lotos = new Lootoo();//배열사용가능하게 객체 만들기
switch(menu) {
case 1:
lotos.num = rand.nextInt(45)+1;//num에 랜덤값 넣기
loto[index] = lotos;
//★★★이 과정을 함으로써 lotos가 num을 사용할수 있게 됨
index++;
//for문 한번 돌고 나오면,다음 인덱스칸으로 간다
for(int i=0; i<loto.length; i++) {//출력을 위한 for문
if(loto[i]!=null) //loto[i]라는 공간이 비어있지 않으면
System.out.printf("[%d]",loto[i].num);//랜덤값이 들어간 num을 출력한다. num은 값이고,loto[i]는 공간
else //아니면
System.out.print("[ ]");//빈칸 출력
}
System.out.println();
break;
case 2:
if(index==0) //시작하자마자(index==0) 막번호 뽑겠다고 하면 뜨는 문구
System.out.println("번호 뽑고 말하슈");
else if(index!=0) //시작은했고(index==0이아닌 최소 1부터)막번호 뽑겠다고 하면 인덱스를 감소시킨다(인덱스 뒤로 가기)
index--;
break;
}
}
728x90
'Develop > 곤부📙' 카테고리의 다른 글
쪽지시험 / 2 (0) | 2023.03.18 |
---|---|
토요스터디 / 3주차 (자리바꾸기 꿀팁 코드) (0) | 2023.03.12 |
쪽지시험 / 1 (0) | 2023.03.06 |
일요일 혼공 / (2차원배열 두줄 출력) (0) | 2023.03.05 |
토요스터디 / 2주차 (2차원 배열,성적관리 프로그램, 입출력API,목요일 코드 복습) (0) | 2023.03.04 |