Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- database
- Java try-catch
- Express
- db
- 자바 예제
- DBMS
- 자바 String클래스
- oracle
- 자바 Wrapper클래스
- 데이터베이스
- Java추상클래스
- Java 내부 클래스
- 자바 제어문
- java super( )
- 자바 Random클래스
- Java 추상 메서드
- Java객체배열
- 오라클
- 자바 내부 클래스
- 자바 추상메서드
- Java다운캐스팅
- Java문자열 클래스
- 코딩
- Java thorw
- 자바 try-catch
- 자바 문자열 클래스
- Java업캐스팅
- nodejs
- 자바 스트링클래스
- dbeaver
Archives
- Today
- Total
코딩이란 무엇일까
Java/자바[15일차](2)-ArrayList 예제 본문
👽글을 읽기 전 필자는 아직 코딩을 배우는 단계이므로 글의 내용이 부정확할 수 있습니다.
여러 가지 글과 책, 수업을 바탕으로 정리한 내용이니 알맞지 않은 내용이 있다면 댓글 남겨주시면 수정하겠습니다.
ArrayList를 활용한 문제
사용자에게 +,-,*,/를 입력받아 랜덤 값으로 숫자가 나와
사용자가 입력한 기호에 맞게 5개의 문제를 내는 클래스를 만듭니다.
이 클래스를 ArrayList의 객체로 담아 사용자가 정답을 입력하면
틀린 문제와 맞은 점수를 출력해줍니다.
클래스 부분
import java.util.Random;
public class RedPen {
private int n1; //랜덤
private int n2; //랜덤
private char op; // + , - , * , / 중 하나를 저장
private boolean isCorrect; //기본값 false. 정답여부
//생성자 op값을 초기화
public RedPen(char op) {
this.op = op; //op 필드(연산자)만 초기화하는 생성자
}
public boolean isCorrect() {
return isCorrect;
}
public void setCorrect(boolean isCorrect) {
this.isCorrect = isCorrect;
}
public void make() { //n1,n2 필드값을 난수로 생성
Random r = new Random();
//난수범위 n1은 min1~max1 , n2는 min2~max2
int max1=0,min1=0,max2=0,min2=0;
//연산자에 따라 n1,n2 난수 범위를 다르게 합시다.
switch (op) {
case '+':
max1=99;max2=99;min1=11;min2=11;
break;
case '-':
max1=99;max2=99;min1=11;min2=11;
break;
case '*': //n2의 값이 곱해지는 값을 작게
max1=77;max2=11;min1=11;min2=3;
break;
case '/': //n1 나눠지는 값을 크게 , n2 값은 작게
max1=99;max2=30;min1=50;min2=30;
break;
}
//난수 생성
n1 = r.nextInt(max1-min1+1)+min1;
n2 = r.nextInt(max2-min2+1)+min2;
}
//문제를 반환할 메서드 problem
public String problem() { //문제를 문자열로 리턴.
return n1 + " " + op + " " + n2 + " = ";
}
//정답 값을 담을 메서드 answer( )
public int answer() { //연산결과 int 리턴
int result;
switch (op) {
case '+':
result = n1+n2;
break;
case '-':
result = n1-n2;
break;
case '*':
result = n1*n2;
break;
case '/':
result = n1/n2;
break;
default:
result = 99999999; //잘못된 연산자 result
System.out.println("잘못된 연산자이므로 처리 못합니다.");
break;
}
return result;
}
//toString 메서드 재정의
@Override
public String toString() {
return "RedPen [n1=" + n1 + ", n2=" + n2 + ", op=" + op +
", isCorrect=" + (isCorrect? "정답":"오답") + "]";
}
}
메인 메서드
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class C68RedPenList {
public static void main(String[] args) {
int count=0;
Scanner sc= new Scanner(System.in);
List<RedPen> probs= new ArrayList<>();
System.out.println("-------------------------");
System.out.println("빨간펜 수학 2자리 덧셈 문제 풀기");
System.out.println("-------------------------");
System.out.println("시작합니다.");
for(int i=0;i<5;i++) {
RedPen red= new RedPen('+');
probs.add(red);
red.make();
System.out.print("문제"+(i+1)+"."+red.problem());
System.out.print("답 입력=>");
int answer=Integer.parseInt(sc.nextLine());
if(answer==probs.get(i).answer()) {
count++;
red.setCorrect(true);
}
}
System.out.println("------------------------");
System.out.println("채점합니다. 맞은 갯수 "+count+"("+(count*20)+")점");
System.out.println(":::틀린 문제 정답보기:::");
for(int i=0;i<probs.size();i++) {
if(!probs.get(i).isCorrect())
System.out.println("문제"+(i+1)+"."+probs.get(i).problem()+probs.get(i).answer());
}
}
가장 헷갈렸던 부분은
RedPen red= new RedPen('+');
probs.add(red);
위의 부분인데 RedPen타입으로 변수 red를 만든 뒤 객체를 생성해주었습니다.
probs.add(red) add안에 red를 넣어주었는데 for문이 반복함에 따라
new 연산자로 인해서 생성된 객체를
red변수로 참조하게 됩니다.
따라서 변수의 이름이 같더라도 각각의 인덱스 번호는 다른 번지를 참조하게 됩니다.
결국에는 인덱스 별로 새로운 객체를 생성하고
인덱스 번호에는 객체의 참조 값을 리스트에 추가하게 됩니다.
그 뒤로는 red라는 변수로 객체의 필드와 메서드에 접근할 수 있게 됩니다.
출력 결과
'국비지원수업' 카테고리의 다른 글
Java/자바[17일차] 인터페이스(Interface) (0) | 2022.11.12 |
---|---|
Java/자바[16일차]Map컬렉션 (0) | 2022.11.10 |
Java/자바 [15일차] (1)-컬렉션 프레임워크 , List (0) | 2022.11.09 |
Java/자바 [14일차] (2)-Object 클래스 (0) | 2022.11.08 |
Java/자바 [14일차] (1)-추상 클래스,추상 메서드 (0) | 2022.11.08 |
Comments