My footsteps

토요스터디 / 4주차 본문

Develop/곤부📙

토요스터디 / 4주차

밀김 2023. 3. 18. 13:03
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<로또 복습>

package saturday;

import java.util.Scanner;

public class LottoMain {
	public static void main(String[] args) {
		
		Lottolist list = new Lottolist();
		
		list.initLottoList();
		//초기화 함수 호출
		
		while(true) {
			
			System.out.println("현재 로또 번호: \n1.번호 뽑기 2.마지막 번호 다시 뽑기");
			
			Scanner sc = new Scanner(System.in);
			int menu = sc.nextInt();
			
			switch(menu) {
			case 1:
				list.setLottoNum();
				break;
			case 2:
				list.resetLottoNum();
				break;
			}
			
			
			list.printLottoNum();
			
		}

	}

}
package saturday;

import java.util.Random;

public class Lottolist {
	Lotto[] lottos;
	//로또 배열
	int index;

	//초기화
	public void initLottoList() {
		lottos = new Lotto[6];
		index = 0;
	}
	
	//case1 : 로또 번호 깔아주기 위한 setter 
	public void setLottoNum() {
		Random rand = new Random();
		Lotto lotto = new Lotto();
		lotto.num = rand.nextInt(45)+1;
		lottos[index] = lotto;
		//위 과정을 해줬기에 최종 출력시, lottos[i].num이 가능해지는것
		index++;
	}
	
	
	//case2 : 로또 번호 없을때
	public void resetLottoNum() {
		Random rand = new Random();
		Lotto lotto = new Lotto();
		if(index==0)
			System.out.println("로또 번호가 없습니다");
		else {
			lotto.num = rand.nextInt(45)+1;
			lottos[index-1]=lotto;
		}
	}
	
	
	//로또 최종 출력
	public void printLottoNum() {
		for(int i=0; i<lottos.length; i++) {
			if(i<index)
				System.out.printf("[%d]",lottos[i].num);
			else
				System.out.print("[ ]");
		}
		System.out.println();
	}
	
	
}
package saturday;

public class Lotto {
	int num;
	//실질적으로 로또 번호가 들어갈 변수 num
	/*
	굳이 num을 또다른 클래스로 만든 이유는 로또의 인덱스를 구하는 문제였다면
	그냥 Lottolist클래스에서 int index만 만들고 끝내도 되지만,
	index는 index대로, 로또에 들어갈 수는 수대로 따로 구해야 하기 때문에
	클래스를 따로 만들어서 num도 따로 혼자 넣어준것이다.
	 */
}

 

 

 

 

 

<코딩 연습을 위한 줄줄이 주석ver..>

package saturday;

import java.util.Scanner;

public class LottoMain {
	public static void main(String[] args) {
		
		Lottolist list = new Lottolist();
		//메인에서 쓸 함수들 다 만든 Lottolist 클래스 접근을 위한 객체 생성
		
		list.initLottoList();
		//초기화 함수 호출
		
		while(true) {
			
			System.out.println("현재 로또 번호: \n1.번호 뽑기 2.마지막 번호 다시 뽑기");
			
			Scanner sc = new Scanner(System.in);
			int menu = sc.nextInt();
			
			switch(menu) {
			case 1:
				list.setLottoNum();
				//case1함수 호출 적으시오
				break;
			case 2:
				list.resetLottoNum();
				//case2함수 호출 적으시오
				break;
			}
			
			list.printLottoNum();
			//최종출력 함수 호출적으시오
			
		}

	}

}

 

package saturday;

import java.util.Random;

public class Lottolist {
	Lotto lottos[];
	//로또 배열 만드숑
	int index;

	//초기화 initLottoList
	public void initLottoList() {
		lottos = new Lotto[6];
		//로또배열 6칸짜리
		index = 0;
		//인덱스 초기화
	}
	
	
	
	//case1 : 로또 번호 깔아주기 위한 setter 
	public void setLottoNum() {
		Random rand = new Random();
		//랜덤객체
		Lotto lotto = new Lotto();
		//랜덤값을 num에 넣으려면 일단 Lotto클래스에 접근을 해야겟쥬? = 객체생성 
		lotto.num = rand.nextInt(45)+1;
		//이제 랜덤값을 위에서 만든 Lotto객체의 num에다가 넣어줍시다
		lottos[index] = lotto;
		//위 과정을 해줬기에 최종 출력시, lottos[i].num이 가능해지는것
		//lotto의 num에는 랜덤값이 들어갔습니다. 이제 그것들을 로또 배열에 하나씩 넣어줍시다!(no for문)
		index++;
		//다음 인덱스칸 가기 위한..
	}
	
	
	
	//case2 : 로또 번호 없을때
	public void resetLottoNum() {
		Random rand = new Random();
		//랜덤객체
		Lotto lotto = new Lotto();
		//Lotto num접근을 위한 객체 생성 
		if(index==0)
			System.out.println("로또 번호가 없습니다");
		else {
			lotto.num = rand.nextInt(45)+1;
			//이제 랜덤값을 위에서 만든 Lotto객체의 num에다가 넣어줍시다
			lottos[index--]= lotto;
			//로또배열에 index를 한칸 뒤로 빠꾸 시키고 거기다가 랜덤값이 들어가있는 lotto num을 대입시켜줍시다
		}
	}
	
	
	//로또 최종 출력
	public void printLottoNum() {
		for(int i=0; i<lottos.length; i++) {
			if(i<index)
				System.out.printf("[%d]",lottos[i].num);
			else
				System.out.print("[ ]");
		}
		System.out.println();
	}
	
	
}
package saturday;

public class Lotto {
	int num;
	//실질적으로 로또 번호가 들어갈 변수 num
	/*
	굳이 num을 또다른 클래스로 만든 이유는 로또의 인덱스를 구하는 문제였다면
	그냥 Lottolist클래스에서 int index만 만들고 끝내도 되지만,
	index는 index대로, 로또에 들어갈 수는 수대로 따로 구해야 하기 때문에
	클래스를 따로 만들어서 num도 따로 혼자 넣어준것이다.
	 */
}

 

 

 


 

 

 

 

 

<성적관리 복습>

package saturday;

import java.io.IOException;

public class ExamMain {
	public static void main(String[] args) throws IOException {

	ExamList list = new ExamList();
	list.initExamList();
	
	
	OUT: while(true) {
		int menu = list.inputMenu();
		
		switch(menu) {
		case 1:
			list.inputExamList();
			break;
		case 2:
			list.printExamList();
			break;
		case 3:
			list.saveExamList();
			break;
		case 4:
			list.loadExamList();
			break;
		case 5:
			System.out.println("종료");
			break OUT;
		}
		
	}
		
		
	}
}
package saturday;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;

public class ExamList {
	
	Exam[] exams;
	int index;
	
	
	//초기화 함수
	public void initExamList() {
		exams = new Exam[1];//어차피 배열 계속 늘어날거라서 최소로 설정
		index = 0;
	}
    
	
	//메뉴 선택 함수
	public int inputMenu() {
		
		System.out.println("<성적관리>");
		System.out.println("1.성적 입력\n2.성적 출력\n3.성적 저장\n4.성적 로드\n5.종료\n번호를 입력해주세요 >");
		
		Scanner sc = new Scanner(System.in);
		int menu = sc.nextInt();
		
		return menu;
	}
	
	
	
	
	
	//case 1. 성적 입력 배열 늘리는 함수
	public void inputExamList() {
		System.out.println("<성적입력>");
		
		while(true) {
			Exam exam = new Exam();
			//성적들이 Exam에 있으니까 접근을 위한 객체 생성
			
			if(index == exams.length) {
				Exam[] tmp = new Exam[exams.length*10];
					for(int i=0; i<exams.length; i++) {
						tmp[i] = exams[i];
						exams = tmp;
					}
			}		
					
			exam.input();
				
			exams[index] = exam;
			index++;
			
			System.out.println("그만하시겠습니까? 1.예 2.아니오");
			Scanner sc = new Scanner(System.in);
			int subMenu = sc.nextInt();
			if(subMenu == 1)
				break;
		}
	}
	
	
	
	//case 2. 성적 출력 함수
	public void printExamList() {
		for(int i=0; i<index; i++) {
			Exam exam = exams[i];
			//출력을 위해 exams배열의 인덱스를 exam 객체가 참조하게함.exams인덱스에는 현재 성적입력값이 들어가있음
			int kor = exam.getKor();
			int eng = exam.getEng();
			int math = exam.getMath();
			int total = exam.getTotal();
			
			System.out.printf("국어 %d: %d점\n",i+1,kor);
			System.out.printf("영어 %d: %d점\n",i+1,eng);
			System.out.printf("수학 %d: %d점\n",i+1,math);
			System.out.printf("총점: %d점\n",total);
		}
	}
	
	
	
	//case 3. 성적 저장 함수
	public void saveExamList() throws IOException {
		
		FileOutputStream fos = new FileOutputStream("res/exams.data");
		PrintStream ps = new PrintStream(fos);
		
		for(int i=0; i<index; i++) {
			Exam exam = exams[i];
			int kor = exam.getKor();
			int eng = exam.getEng();
			int math = exam.getMath();
			int total = exam.getTotal();
			
			ps.printf("%d %d %d",kor,eng,math);
			ps.println("");
			//ps.println("")은 출력 스트림인 ps를 통해 빈 문자열을 출력하는 코드입니다.
			//즉, ps.println("")는 빈 줄을 출력하는 코드라고 할 수 있습니다.
			//줄 나누기 위한 과정인가봄 각각 잘라주는거는 스플릿에서 하니까
	
		}
		ps.close();
		fos.close();
		
		System.out.println("성적 저장 완료");
	}
	
	
	//case 4. 성적 로드 함수
	public void loadExamList() throws IOException {
		
		FileInputStream fis = new FileInputStream("res/exams.data");
		Scanner fscan = new Scanner(fis);
		
		for(int i=0; i<index; i++) {
			Exam exam = new Exam();
			
			String scoreLine = fscan.nextLine();
			String[] ScoreToken = scoreLine.split(" ");
			
			int kor = Integer.parseInt(ScoreToken[0]);
			int eng = Integer.parseInt(ScoreToken[1]);
			int math = Integer.parseInt(ScoreToken[2]);
			int total = kor+eng+math;
			
			System.out.printf("국어 %d: %d점\n",i+1,kor);
			System.out.printf("영어 %d: %d점\n",i+1,eng);
			System.out.printf("수학 %d: %d점\n",i+1,math);
			System.out.printf("총점: %d점\n",total);
		}
		
		fscan.close();
		fis.close();
	}
	
}
package saturday;

import java.util.Scanner;

public class Exam {
	int kor;
	int eng;
	int math;
	int total;
	
	public int getKor() {
		return kor;
	}
	
	public int getEng() {
		return eng;
	}
	
	public int getMath() {
		return math;
	}
	
	public int getTotal() {
		total = kor+eng+math;
		return total;
	}
	
	
	//case 1-1. 성적 입력값 받는 함수
	public void input() {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("국어 성적을 입력하세요: ");
		this.kor = sc.nextInt();
		//kor,eng,math를 만든 이 클래스에서 입력값을 넣어줘야 하기 때문에 인풋 함수는 Exam클래스에 존재해야 한다
		//그러므로, this.를 사용해 입력값을 넣어줌
		System.out.println("영어 성적을 입력하세요: ");
		this.eng = sc.nextInt();
		System.out.println("수학 성적을 입력하세요: ");
		this.math = sc.nextInt();
		
	}
	
}

 

 

 

<코딩 연습을 위한 줄줄이 주석ver..>

package saturday;

import java.io.IOException;

public class ExamMain {
	public static void main(String[] args) throws IOException {

	ExamList list = new ExamList();
	//ExamList 객체 접근을 위한 
	list.initExamList();
	//초기화 함수 호출
	
	
	OUT: while(true) {
		int menu = list.inputMenu();
		
		switch(menu) {
		case 1:
			list.inputExamList();
			break;
		case 2:
			list.printExamList();
			break;
		case 3:
			list.saveExamList();
			break;
		case 4:
			list.loadExamList();
			break;
		case 5:
			System.out.println("종료");
			break OUT;
		}
		
	}
		
		
	}
}

 

package saturday;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;
public class ExamList {
	
	Exam[] exams;
	int index;
	
	//초기화 함수
	public void initExamList() {
		exams = new Exam[1];//어차피 배열 계속 늘어날거라서 최소로 설정
		index = 0;
	}
	

	//메뉴 선택 함수
	public int inputMenu() {
		
		System.out.println("<성적관리>");
		System.out.println("1.성적 입력\n2.성적 출력\n3.성적 저장\n4.성적 로드\n5.종료\n번호를 입력해주세요 >");
		
		Scanner sc = new Scanner(System.in);
		int menu = sc.nextInt();
		
		return menu;
	}
	
	
	
	
	
	//case 1. 성적 입력 배열 늘리는 함수
	public void inputExamList() {
		System.out.println("<성적입력>");
		
		while(true) {
			Exam exam = new Exam();
			//성적들이 Exam에 있으니까 접근을 위한 객체 생성
			if(index==exams.length) {
				Exam[] tmp = new Exam[exams.length*10];
				//Exam배열 길이 늘려서 tmp배열에 대입
					for(int i=0; i<exams.length; i++) {
						tmp[i] = exams[i];
						//exams배열의 값을 tmp배열에다가 넣어준다
						exams = tmp;
						//참조변수 변경
					}
			}		
					
			exam.input();
				
			exams[index]=exam;
			//호출한 exam객체를 exams배열 인덱스에 대입시켜준다 index의 값들을 이용할수 있게
			index++;
			//인덱스 다음칸으로 이동
			
			System.out.println("그만하시겠습니까? 1.예 2.아니오");
			Scanner sc = new Scanner(System.in);
			int subMenu = sc.nextInt();
			if(subMenu == 1)
				break;
		}
	}
	
	
	
	//case 2. 성적 출력 함수
	public void printExamList() {
		for(int i=0; i<index; i++) {
			Exam exam = exams[i];
			//출력을 위해 exams배열의 인덱스를 exam 객체가 참조하게함.exams인덱스에는 현재 성적입력값이 들어가있음
			int kor = exam.getKor();
			int eng = exam.getEng();
			int math = exam.getMath();
			int total = exam.getTotal();
			//getter를 이용하여 출력하기 깔끔하게 kor변수에 대입시켜라~
			
			System.out.printf("국어 %d: %d점\n",i+1,kor);
			System.out.printf("영어 %d: %d점\n",i+1,eng);
			System.out.printf("수학 %d: %d점\n",i+1,math);
			System.out.printf("총점: %d점\n",total);
		}
	}
	
	
	
	//case 3. 성적 저장 함수
	public void saveExamList() throws IOException {
		
		FileOutputStream fos = new FileOutputStream("res/exams.data");
		PrintStream ps = new PrintStream(fos);
		
		for(int i=0; i<index; i++) {
			Exam exam = exams[i];
			int kor = exam.getKor();
			int eng = exam.getEng();
			int math = exam.getMath();
			int total = exam.getTotal();
			
			ps.printf("%d %d %d", kor,eng,math);
			ps.println("");
			//ps.println("")은 출력 스트림인 ps를 통해 빈 문자열을 출력하는 코드입니다.
			//즉, ps.println("")는 빈 줄을 출력하는 코드라고 할 수 있습니다.
			//줄 나누기 위한 과정인가봄 각각 잘라주는거는 스플릿에서 하니까
	
		}
		ps.close();
		fos.close();
		
		System.out.println("성적 저장 완료");
	}
	
	
	//case 4. 성적 로드 함수
	public void loadExamList() throws IOException {
		
		FileInputStream fis = new FileInputStream("res/exams.data");
		Scanner fscan = new Scanner(fis);
		
		for(int i=0; i<index; i++) {
			Exam exam = new Exam();
			
			String scoreLine = fscan.nextLine();
			String[] ScoreToken = scoreLine.split(" ");
			
			int kor = Integer.parseInt(ScoreToken[0]);
			int eng = Integer.parseInt(ScoreToken[1]);
			int math = Integer.parseInt(ScoreToken[2]);
			//ScoreToken배열에 들어온 값을 정수형으로 변환해서 각과목 변수에 대입시켜준다

			int total = kor+eng+math;
			
			System.out.printf("국어 %d: %d점\n",i+1,kor);
			System.out.printf("영어 %d: %d점\n",i+1,eng);
			System.out.printf("수학 %d: %d점\n",i+1,math);
			System.out.printf("총점: %d점\n",total);
		}
		
		fscan.close();
		fis.close();
	}
	
}

 

package saturday;

import java.util.Scanner;

public class Exam {
	int kor;
	int eng;
	int math;
	int total;
	
	
//getter를 이용하시오~~
	public int getKor() {
		return kor;
	}
	
	public int getEng() {
		return eng;
	}
	
	public int getMath() {
		return math;
	}
	
	public int getTotal() {
		total = kor+eng+math;
		return total;
	}
	
	
	//case 1-1. 성적 입력값 받는 함수
	public void input() {
		Scanner sc = new Scanner(System.in);
		System.out.println("국어 성적을 입력하세요: ");
		this.kor = sc.nextInt();
		//kor,eng,math를 만든 이 클래스에서 입력값을 넣어줘야 하기 때문에 인풋 함수는 Exam클래스에 존재해야 한다
		//그러므로, this.를 사용해 입력값을 넣어줌
		System.out.println("영어 성적을 입력하세요: ");
		this.eng = sc.nextInt();
		System.out.println("수학 성적을 입력하세요: ");
		this.math = sc.nextInt();
		
	}
	
}

 

 

 

 

- nextInt()는 공백을 기준으로 나눈다

 

- 문자열을 같다고 표현하는 함수 .equals()

 

- ==는 조건을 나타내는거라서 for문안에서는 쓸수없다.(if문같은 조건문에서만 가능)

 

 

 

 

 

 

 

728x90