열심히 끝까지
[코딩 문제] - 6/23 강사님 문제 본문
-------------강사님 문제
ArrayList al 생성
al에 데이터 넣어주세요!
1~9까지 랜덤으로 값 생성
생성된 값 중에서 홀수인 것만 al에 저장
al의 요소의 개수가 5개가 되면 종료
종료되면 저장된 값 출력하고
저장된 값들의 총합 출력
나누기 2 까지 해주세요~
package class01;
import java.util.ArrayList;
import java.util.Random;
public class Test02 {
public static void main(String[] args) {
Random rand = new Random(); // 랜덤으로 숫자 생성
ArrayList al = new ArrayList();
int i = 0; // al의 배열 인덱스 지정
int sum = 0;
while(al.size() < 5) { // al.size가 5가 넘으면 종료
int a = rand.nextInt(9) + 1; // 1~9까지의 랜덤 숫자
if(a%2==1) { // a가 홀수면
al.add(i, a); // i번째 항에 a 저장
i++; // i를 늘려 다음에 저장
}
}
System.out.println(al);
for(int a = 0; a < al.size(); a++) {
sum += (int)al.get(a);
}
System.out.println("sum : " + sum);
System.out.println("sum/2 : " + sum*1.0/2);
}
}
---------------강사님 해결코드
package class01;
import java.util.ArrayList;
import java.util.Random;
public class Test021 {
public static void main(String[] args) {
ArrayList al = new ArrayList();
Random random = new Random();
while(al.size() < 5) {
int num = random.nextInt(9)+1;
if(num%2==1) {
al.add(num);
}
}
System.out.println(al);
int sum = 0;
for(int i = 0; i < al.size(); i++) {
sum += (int)al.get(i);
// 메서드를 쓸 때는 자료형을 잘 봐야한다!
// object에 맘대로 int를 넣은거다!
// input이 object이기에 output도 object다
// 객체를 연산자? 불가능하다! 그렇기에 강제 형변환을 사용한다!
}
System.out.println("sum = " + sum);
double res = sum*1.0/2;
System.out.println("sum/2 = " + res);
}
}
※ 여기서 주의깊게 볼 것
> for가 아니라 while
> 자료형 ArrayList는 int가 아닌 object로 받는다.(형변환 필요)
-----------강사님 문제
Drink //음료클래스
name //이름
price //가격
cnt // 재고
void use() // 사용자가 사용(구매 완료)
boolean check() -> 구매가 가능할 지 안될지
Drink("콜라", 900, 10);
Drink("사이다", 800); // 이렇게 되면 사이다 재고 0
syso(Drink 객체);
-> 콜라 900[10] 라고 출력
main()
좋아하는 음료 객체 3개 저장한 ArrayList data 만들 것
1. 메뉴 출력(누르면)(자판기 개념)
2. 입력 ex ) 1. 콜라, 2. 사이다 3. 웰치스 -> 꺼내서 제공
=> 필요하다고 생각되는 유효성 검사 진행 (2개)
3. 종료
--------작성
package class04;
import java.util.ArrayList;
import java.util.Scanner;
class Drink{
String name; // 음료 이름
int price; // 음료 가격
int cnt; // 음료 재고
void use() { // 사용자가 사용(구매)
check();
if(!this.check()) {
System.out.println("재고가 없습니다.");
System.out.println();
return;
}
this.cnt--; // 재고 감소
System.out.println(this.name + "구매가 완료되었습니다. 남은 재고 : " + this.cnt);
System.out.println();
}
Drink(String name, int price){ // 이름, 가격, 디폴트(0)
this(name, price, 0);
}
Drink(String name, int price, int cnt){ // 이름, 가격, 재고 기입
this.name = name;
this.price = price;
this.cnt = cnt;
}
boolean check() { // 만약 cnt == 0 return false
if(this.cnt == 0) {
return false;
}
return true;
}
@Override
public String toString() {
String msg = this.name +" ";
msg += this.price +"[";
msg += this.cnt + "]";
return msg;
}
}
public class Test031 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Drink> data = new ArrayList<Drink>(); // 음료 객체 저장하는 ArrayList data
data.add(new Drink("콜라", 900, 8));
data.add(new Drink("스프라이트", 900));
data.add(new Drink("실론티", 800, 4));
while(true) {
System.out.println("1. 메뉴 출력");
System.out.println("2. 입력");
System.out.println("3. 종료");
System.out.println();
System.out.print("번호 입력 : ");
int in = sc.nextInt(); // 입력
if(in < 1 || 3 < in) { // 유효성 검사
System.out.println("잘못된 입력입니다.");
continue;
}
else if(in == 1) { // 메뉴 출력
for(int i = 0; i < data.size(); i++) { // data의 크기만큼 출력
System.out.println(i+1 + ". " + data.get(i)); // 정보 출력
}
System.out.println();
}
else if(in == 2) {
System.out.print("음료 선택 : ");
int select = sc.nextInt(); // 구매할 음료 선택 숫자
if(select < 1 || data.size() < select) { // 1보다 작거나 데이터 크기값보다 크면
// 유효성 검사
System.out.println("1부터 " + data.size() + "의 숫자를 입력하세요.");
continue;
}
else { // 입력받은 숫자의 -1(인덱스 값)을 해 다음 음료 출력
data.get(select-1).use();
}
}
else {
break;
}
}
}
}
---------강사님 방법
package class01;
import java.util.ArrayList;
import java.util.Scanner;
class Drink{
String name;
int price;
int cnt;
void use(){
if(!this.check()) {
System.out.println(this.name + "재고없음!");
return;
}
this.cnt--;
System.out.println(this.name + "구매완료");
}
boolean check() {
if(this.cnt>0) {
return true;
}
return false;
}
Drink(String name, int price){
this(name, price, 0);
}
Drink(String name, int price, int cnt){
this.name = name;
this.price = price;
this.cnt = cnt;
}
@Override
public String toString() {
return this.name + " " + this.price + "원 [" + this.cnt + "]";
}
}
public class Test04 {
public static void main(String[] args) {
ArrayList<Drink> data = new ArrayList<Drink>();
data.add(new Drink("콜라", 900, 10));
data.add(new Drink("사이다", 800));
data.add(new Drink("웰치스", 1200, 2));
System.out.println(data);
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("1. 메뉴출력 2. 메뉴입력 3. 종료");
System.out.print("입력 : ");
int act = sc.nextInt();
if(act==1) {
for(int i = 0; i < data.size(); i++) {
System.out.println((i+1)+"번 메뉴 : " + data.get(i));
}
}
else if(act==2) {
int menu;
while(true) {
System.out.print("메뉴입력 : ");
menu = sc.nextInt();
if(0<menu && menu<=data.size()) {
break;
}
System.out.println("없는 메뉴 번호입니다! 확인 후 입력해주세요1");
}
data.get(menu-1).use();
}
else if(act==3) {
System.out.println("프로그램 종료...");
break;
}
else {
System.out.println("잘못된 act 입력입니다!");
}
}
}
}
--------강사님 방법 - String 입력
package class01;
import java.util.ArrayList;
import java.util.Scanner;
class Drink{
String name;
int price;
int cnt;
void use(){
if(!this.check()) {
System.out.println(this.name + "재고없음!");
return;
}
this.cnt--;
System.out.println(this.name + "구매완료");
}
boolean check() {
if(this.cnt>0) {
return true;
}
return false;
}
Drink(String name, int price){
this(name, price, 0);
}
Drink(String name, int price, int cnt){
this.name = name;
this.price = price;
this.cnt = cnt;
}
@Override
public String toString() {
return this.name + " " + this.price + "원 [" + this.cnt + "]";
}
@Override
public boolean equals(Object obj) {
if(this.name.equals(obj)) {
return true;
}
return false;
}
}
public class Test04 {
public static void main(String[] args) {
ArrayList<Drink> data = new ArrayList<Drink>();
data.add(new Drink("콜라", 900, 10));
data.add(new Drink("사이다", 800));
data.add(new Drink("웰치스", 1200, 2));
System.out.println(data);
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("1. 메뉴출력 2. 메뉴입력 3. 종료");
System.out.print("입력 : ");
int act = sc.nextInt();
if(act==1) {
for(int i = 0; i < data.size(); i++) {
System.out.println((i+1)+"번 메뉴 : " + data.get(i));
}
}
else if(act==2) {
System.out.print("메뉴입력 : ");
String name = sc.next();
boolean flag = true; // 제품이 없는 상태 T | 있는 상태 F
for(int i = 0; i < data.size(); i++) {
if(data.get(i).equals(name)) {
data.get(i).use();
flag = false;
}
}
if(flag) {
System.out.println(name + "는(은) 없습니다.");
}
}
else if(act==3) {
System.out.println("프로그램 종료...");
break;
}
else {
System.out.println("잘못된 act 입력입니다!");
}
}
}
}
act==2 의 다른 방법(클래스의 .equals() 오버라이딩 안쓰는 것)
for(int i = 0; i < data.size(); i++) {
if(name.equals(data.get(i).name)) {
data.get(i).use();
}
}
---간단한 문제
1~10까지 랜덤 숫자 생성
7개 생성 중복 안되게
package class06;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class Test051 {
public static void main(String[] args) {
Random random = new Random();
Set<Integer> s = new HashSet<Integer>();
int i = 0;
while(s.size() < 7) {
int num = random.nextInt(10)+1;
s.add(num);
i++;
}
System.out.println(s);
System.out.println("반복한 횟수 : " + i);
}
}
---------강사님 풀이
package class06;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class Test06 {
public static void main(String[] args) {
Random r = new Random();
Set<Integer> set = new HashSet<Integer>();
while(set.size()<7) {
int num = r.nextInt(10)+1;
set.add(num);
}
System.out.println(set);
}
}
------강사님 문제
Student
name
score
Student("홍길동");
-> 홍길동
-> 0~100 랜덤
=> 홍길동 90점
main()
학생부 => Map을 활용할 예정!
1001번부터 순서대로 번호 부여
1001
1003
1004 번호 유지
1) 추가 C 무한하게 제공
추가할 학생의 이름을 입력하세요
2) 출력 R
3) 삭제 D
같은 이름의 학생이 존재할 수 있다
삭제할 학생의 번호를 입력하세요!
4) 종료
package class07;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
class Student{ // 학생 클래스
Random rand = new Random();
String name; // 학생 이름
int score; // 학생 점수
Student(String name){
this.name = name;
this.score = rand.nextInt(100)+1; // 학생 점수를 랜덤으로 받기 1 ~ 100 점
}
@Override
public String toString() { // 오버라이딩으로 msg 값 돌려주기
String msg = this.name + " ";
msg += this.score + "점";
return msg;
}
}
public class Test09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Map<Integer, Student> map = new HashMap<Integer, Student>();
int num = 1001;
while(true) {
System.out.println("===학생부===");
System.out.println("1) 추가");
System.out.println("2) 출력");
System.out.println("3) 삭제");
System.out.println("4) 종료");
System.out.print("이용할 서비스 번호 입력 : ");
int button = sc.nextInt();
if(button == 1) { // 버튼으로 1이 눌리면 학생 추가
System.out.println("===학생 추가===");
System.out.print("추가할 학생의 이름을 입력하세요 : ");
String name = sc.next();
map.put(num, new Student(name)); // map에 학생 이름과 번호 저장
System.out.println(num + "에 입력완료!");
num++; // 한명씩 저장될 수록 번호 늘리기
}
else if(button == 2) { // 2가 눌리면 학생부 출력
if(map.isEmpty()) { // 만약 최초 번호인 인덱스에 저장된 값이 없는 경우
System.out.println("등록된 학생이 없습니다.");
continue;
}
System.out.println("===학생부 출력===");
System.out.println(map); // 학생부 번호와 학생이름, 점수 출력
System.out.print("찾고싶은 학생 번호 입력! : ");
int find = sc.nextInt();
System.out.println(map.get(find));
}
else if(button == 3) { // 3이 눌리면 학생 삭제
if(map.isEmpty()) { // 만약 최초 번호인 인덱스에 저장된 값이 없는 경우
System.out.println("삭제할 학생이 없습니다.");
continue;
}
System.out.println("===학생 삭제===");
int delete;
while(true) {
System.out.println(map);
System.out.print("삭제할 학생의 번호를 입력하세요. : ");
delete = sc.nextInt();
if(map.get(delete) == null) { // 1001번보다 작거나 num의 숫자보다 큰 경우
System.out.println("존재하지 않는 번호입니다.");
continue;
}
break;
}
map.remove(delete);// 삭제하는 방법
System.out.println("삭제했습니다.");
System.out.println("===삭제 후 학생부===");
System.out.println(map);
}
else if(button == 4) { // 4를 입력하면 프로그램 종료
System.out.print("===학생부 프로그램을 종료합니다.===");
break;
}
else { // 다른 번호를 입력하면 다시 입력
System.out.println("잘못된 입력입니다. 다시 입력하세요");
continue;
}
} // while문 종료
}
}
--------강사님 코딩
package class01;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
class Student{
private String name;
private int score;
// 죽어도 멤버변수에 접근해야한다? 그때 getter setter!!
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
Student(String name){
this.name = name;
Random random = new Random();
this.score = random.nextInt(101); // 0~100
System.out.println(this.name + "학생 " + this.score + "점으로 등록되었습니다.");
}
@Override
public String toString() {
return name + "학생 " + score + "점";
}
}
public class Test01 {
public static void main(String[] args) {
Map<Integer, Student> data = new HashMap<Integer, Student>();
final int PK_START = 1001; // 의미를 갖는 수
// final 키워드 PK_START 값을 변경하지 못하게 막는다 == "상수화"
final int PK_MAX = 2000;
int PK = PK_START; // 1001번 보다 더 완벽하게 하는 방법
// PK는 무조건 프로그램이 부여
// 사람이 만드는 PK = ID -> 중복확인
// 유일하게 만들어야 하기 때문에 중복확인이 들어간다!
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println();
System.out.println("1.등록 2.출력 3.삭제 4.종료");
System.out.print("입력) ");
int act = sc.nextInt();
if(act==1) {
// 추가할 학생의 이름을 입력하세요
// 사용자가 학생이름 입력
// 학생 객체를 생성
// 생성한 객체 map에 저장
System.out.print("학생 이름 입력 ) ");
String name = sc.next();
data.put(PK, new Student(name));
// data.get(PK).score = 100; // << 이 것이 가능해진다...ㅠㅠ
// 지금처럼 멤버변수로 직접 접근하는 것을 막아둔다! class에 멤버변수에 private 건다!
// 멤버변수를 hiding(private) 했는데 main에 줄이 그어진다? 그러면 문제가 있다는 뜻!
PK++;
}
else if(act==2) {
if(data.size()==0) {
System.out.println("저장된 데이터가 없습니다!");
continue;
}
for(int i = PK_START; i < PK; i++) { // 초기값 1001을 쓰면
Student stu = data.get(i);
if(stu==null) { // 없으면 아래로 내려가게 반환!
continue;
}
System.out.println(i + "번 : " + data.get(i));
// 없는 값을 반환하려고 하면 null값이 반환된다
// data.get(i)
}
}
else if(act==3) {
if(data.size()==0) {
System.out.println("저장된 데이터가 없습니다!");
continue;
}
System.out.print("삭제할 번호 입력) ");
int key = sc.nextInt();
/*
if(data.containsKey(key)) {
// 만약 이 메서드가 있었다는 것을 알았다면...
// 임시변수 필요 없고 간략한 코딩 가능
// 어떤 메서드가 있는지
System.out.println("번호를 다시 확인하시고 입력해주세요!");
continue;
}
*/
if(key<PK_START || PK_MAX < key) { //
System.out.println("번호를 다시 확인하시고 입력해주세요!");
continue;
}
Student stu = data.remove(key); // 삭제한 값을 잠깐(일시적) 저장 후 출력
System.out.println("로깅기법 확인 : " + stu); // 데이터 삭제(key값 받아서 삭제)
// remove값은 학생... 없으면 null값 출력
// 출력 문구로 확인 로깅..
// 로그 기법(로그를 찍어낼 수 있어야 한다!) 궁금한 값을 찍어서 보는 것(콘솔 확인)
// ★ 로그를 보여주면서
// >> 에러 원인 분석, 에러원인 찾고, 해결방안 설명하기
// 로그를 띄우면서 이미 null을 삭제했기 때문에 다음 턴에서 못본다
if(stu == null) { // key값에 대한 학생이 없다면
System.out.println("존재하지 않는 학생번호입니다.");
continue;
}
System.out.println(stu + "삭제완료!");
// 1. 삭제 실패했을 때 멘트 해결!
// 2. 삭제성공 이후에 null 출력 해결!
}
else if(act==4) {
System.out.println("프로그램 종료...");
break;
}
else {
System.out.println("다시 입력해주세요.");
}
}
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)' 카테고리의 다른 글
[능력단위평가] - 6/27 문제 답안 (0) | 2022.06.27 |
---|---|
[코딩 문제] - 6/24 강사님 문제 (0) | 2022.06.24 |
[설계 문제] - 6/22 치킨집 프렌차이즈 (0) | 2022.06.22 |
[코딩 문제] - 6/21 포켓몬과제 (0) | 2022.06.22 |
[코딩문제] - 6/20 카드 사용 문제 (0) | 2022.06.20 |