배열 개념
package day0913;
/*배열[Array]
* 배열이란 우리가 지정한 갯수만큼의 똑같은 데이터타입의 변수들을
* 한개의 이름으로 묶어서 처리를 하는 자료형이다.
*
* 예를 들어서, 우리가 점수 4개를 score1, score2, score3, score4 이렇게
* 따로따로 변수를 만드는 것이 아니라 길이가 4인 int 배열을 만들어서
* 0번쨰 칸, 1번째칸, 2번째칸, 3번째 칸에 각각 값을 저장하거나 호출하는 방식으로 사용하겠다 라는 의미가 된다.
*
* 배열의 경우, 참조형 데이터타입이므로 다음과 같은 방법으로 초기화해야한다.
* 데이터타입[] 배열이름 = new 데이터타입[길이];
* new 라는 키워트는 heap영역에
* 공간을 배정한다는 의미이다.
*/
public class Ex02Array {
public static void main(String[] args) {
//int 배열 intArray를 선언해보자
int[] intArray;
/*배열을 초기화 할때에는 해당 배열이
* 총 몇개의 변수를 관리할 것인지를 반드시 지정해주어야 한다.
* 좀 더 쉬운 표현으론 총 몇칸짜리 배열인지를 지정해주어야 한다.
*/
//intArray를 3칸짜리 배열로 초기화해보자
intArray = new int[3];
/*우리가 일반적인 int 변수는
* 각각의 int 변수의 이름을 호출하여 고나리하였지만
* 배열일 댸에는 이름이 아니라 칸의 번호를 호출하여 관리한다.
* 칸의 번호는 0부터 시작하여 총 길이 -1 이 마지막 칸의 번호가 된다.
*
* 지금 우리 intArray는 총 길이가 3이므로
* 0, 1, 2가 칸의 번호가 된다.
* 이 칸의 번호는 우리가 앞으로 인덱스라고 부르게 된다.
*
* 배열에 특정 인덱스번 칸에 값을 넣을 때에는
* 배열이름[인덱스] = 값;
* 으로 넣을 수 있다.
*/
intArray[0] = 40;
intArray[1] = 27;
intArray[2] = 33;
/*배열에 특정 인덱스번 칸에 있는 값을 호출할 때에는
* 배열이름[인덱스]로 호출할 수 있다.
*/
System.out.println("intArray[0]: "+intArray[0]);
System.out.println("intArray[1]: "+intArray[1]);
System.out.println("intArray[2]: "+intArray[2]);
/*배열에 관한 팁들 */
//1. 초기화 시에 크기는 우리가 다른 변수를 사용하여 초기화해줄 수 있다.
int size = 4;
intArray = new int[size];
// 2. 해당 배열의 길이는
// 배열이름.length로 알아볼 수 있다.
System.out.println("intArray.length: "+intArray.length);
// 3. 우리가 특정 인덱스의 값을 출력하거나 값을 저장할 떄에는
// 인덱스의 값을 직접 써줘도 되지만 int 변수를 적어주어도 된다.
// 특히, 배열 전체의 인덱스를 차례대로 호출 할 때에는
// 우리가 for문을 사용하면 된다!
for(int i = 0; i < intArray.length; i++) {
System.out.printf("intArray[%d]: %d\n", i, intArray[i]);
}
// 4. 만약 존재하지 많는 인덱스를 호출하면
// 당연히 에러가 발생한다.
//System.out.println("intArray[-1]: "+intArray[-1]); //범위를 벗어나는 인덱스. 인덱스는 0부터 시작!
//System.out.println("intArray[5]: "+intArray[5]); //정해둔 인덱스 범위를 벗어남
// 5. 기본형 데이터타입의 배열일 경우 초기화하면 모든 인덱스가 0으로 초기화된다.
// 참조형 데이터타입의 배열일 경우 초기화하면 모든 인덱스가 null로 초기화된다.
// null이란, 참조형 데이터타입에서만 발견되는 특수한 상태로써
// 주소값은 부여가 되어있지만 해당 주소값을 참조하여 heap 영역으로 가면
// 아직 해당 공간이 확보가 안되어있는 상태이다.
// null일 때에는 아무것도 실행시킬 수 없다.
}
}
다차원 배열
package day0914;
/*다차원 배열
*배열은 똑같은 데이터타입을 모아둔 하나의 데이터타입이다.
*그렇기 때문에 배열을 모아둔 배열도 가능하다.
*이렇게 배열을 모아둔 배열을 우리는 이차원 혹은 다차원 배열이라고 한다.
*
*2차원 배열을 좀더 쉽게 이해하려면
*표를 그려본다고 생각하면 좋다.
*
*2차원 배열의 선언과 초기화는 다음과 같다.
*int[][] 배열이름 = new int[배열의 갯수][각 배열의 칸수]
*
*/
public class Ex03MultiArray {
public static void main(String[] args) {
int[][] arr = new int[3][2];
//위의 int 2차원 배열 arr은
//int가 2개 모여있는 배열이
//3개 모여있는 2차원 배열이란 의미가 된다!
//만약 우리가 0번째 배열에 1번째 칸에
//값을 넣을 떄에는
arr[0][1] = 40;
//으로 넣어줄 수 있다.
//주의!
//arr[1] = 4;
//당연히 에러!
}
}
다차원배열 문제
/*퀴즈 제한시간 15분
* 구구단을 출력하는 프로그램을 작성하시오.
* 단, 2차원 배열을 사용하여
* 각 단의 결과값을 배열에 저장하시오
*
*/
package day0914;
public class Ex04Gugudan {
public static void main(String[] args) {
//썜이 한거
int[][] gugudan = new int[8][9];
for(int i = 0; i<gugudan.length; i++) { //gugudan.length는 [8]을
for(int j = 0; j<gugudan[i].length; j++) { //gugudan[i].length는 [9]를 뜻한다.
int left = i+2; // 2*1에 2왼쪽
int right = j+1;// 2*1에 1오른쪽
gugudan[i][j] = left * right;
}
}
for(int i = 0; i < gugudan.length; i++) {
for(int j = 0; j<gugudan[i].length; j++) {
System.out.println(gugudan[i][j]);
}
}
}
}
배열의 동적할당과 정적할당
/*배열의 동적 할당 (Dynamic Allocation)
* 우리가 기존에 배열은 크기를 지정하여
* 해당 크기만 사용을 하였다.
* 예시: 크기가 4인 int 배열 ->int[] arr = new int[4]
*
* 크기가 고정되어있는 정적 할당 배열의 경우,
* 만약 우리가 지정된 크기보다 많은 값을 넣고 싶어도 넣을 수 없다.
* 또한, 기본형 데이터타입의 배열일 경우 0으로, 참조형 데이터타입의 배열일 경우 null로 초기화가 되지만
* 우리가 몇개의 값을 배열에 저장했는지 알아내기 위해서는 추가적으로 작업을 해서
* 특이한 값으로 초기화된 배열에 칸이 몇개인지 알아야 한다!
*
* 이러한 문제점을 해결하기 위해서 나온 개념이 바로 동적 할당이다.
* 동적 할당 배열의 경우, 배열의 크기가 우리가 새로운 요소를 추가하면 늘어나고
* 요소를 제거하면 줄어드는 자유로운 크기를 가지게 된다.
*
* 단, 동적 할당의 경우, 기존 배열을 주소값을 유지한 채 바꾸는 것이 아니라
* 새로운 배열을 만들어서 변경을 가한 후 해당 배열을 리턴 시켜서
* 기존 배열에 덮어씌우는 방법을 사용하게 된다!
*
*/
package day0915;
import util.ArrayUtil;
public class Ex07DynamicAlloc {
public static void main(String[] args) {
// //개념
// int[] arr = new int[3]; //지금 배열의 크기는 3
//
// arr[0] = 4;
// arr[1] = 3;
// arr[2] = 5;
//
// //배열에 새로운 값을 넣으려고 한칸을 추가
// arr = new int[4];
//
// System.out.println(arr[0]); //원하는 출력값은 4
// //그런데 날라가서 값은 0이 출력됨.
// // 날라가면 안되지?-> 그래서 동적할당의 개념이 나옴!
//
// //ArrayUtil.java 클래스 작성하고 옴.
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 3;
arr[2] = 1;
// 1. size()
System.out.println("1. size()");
System.out.println("ArrayUtil.size(arr): "+ArrayUtil.size(arr));
System.out.println();
// 2. isEmpty()
System.out.println("2. isEmpty()");
System.out.println("ArrayUtil.isEmpty(arr): "+ArrayUtil.isEmpty(arr));
System.out.println();
// 3. contains()
System.out.println("3. contains()");
System.out.println("ArrayUtil.contains(arr, 3): "+ArrayUtil.contains(arr, 3));
System.out.println("ArrayUtil.contains(arr, 50): "+ArrayUtil.contains(arr, 50));
System.out.println();
// 4. indexOf()
System.out.println("4. indexOf()");
System.out.println("ArrayUtil.indexOf(arr, 1): "+ArrayUtil.indexOf(arr, 1));
System.out.println("ArrayUtil.indexOf(arr, 50): "+ArrayUtil.indexOf(arr, 50));
System.out.println();
// 5. lastIndexOF()
System.out.println("5. lastIndexOf()");
System.out.println("ArrayUtil.lastIndexOf(arr, 1): "+ArrayUtil.lastIndexOf(arr, 1));
System.out.println("ArrayUtil.lastIndexOf(arr, 50): "+ArrayUtil.lastIndexOf(arr, 50));
System.out.println();
// 6. get()
System.out.println("6. get()");
System.out.println("ArrayUtil.get(arr, 1): "+ArrayUtil.get(arr, 1));
System.out.println();
//=============
// 7. add() //배열 크기 늘리기
//arr 크기를 늘릴때 arr.length += 1 이따위로 하면 안됨. length함부로 건들면 안되
System.out.println("7. add()");
System.out.println("add() 전 ArrayUtil.size(arr): "+ArrayUtil.size(arr));
arr = ArrayUtil.add(arr, 30);
System.out.println("add() 후 ArrayUtil.size(arr): "+ArrayUtil.size(arr));
System.out.println("add() 후 ArrayUtil.get(arr, 3): "+ArrayUtil.get(arr, 3));
System.out.println();
// 8. add(index)
System.out.println("8. add(index)");
System.out.println("add() 전 ArrayUtil.size(arr): " + ArrayUtil.size(arr));
System.out.println("add() 전 ArrayUtil.get(arr, 2): " + ArrayUtil.get(arr, 2));
arr = ArrayUtil.add(arr, 2, 100);
System.out.println("add() 후 ArrayUtil.size(arr): " + ArrayUtil.size(arr));
System.out.println("add() 후 ArrayUtil.get(arr, 2): " + ArrayUtil.get(arr, 2));
System.out.println();
// 9. set()
System.out.println("9. set()");
System.out.println("set() 전 ArrayUtil.get(arr,2): "+ ArrayUtil.get(arr, 2));
int temp = ArrayUtil.set(arr, 2, 300);
System.out.println("set() 후 ArrayUtil.get(arr,2): "+ ArrayUtil.get(arr, 2));
System.out.println("set() 후 원래 2번 인덱스에 있던 값: "+temp);
System.out.println();
// 10. removeByIndex()
System.out.println("10. removeByIndex()");
System.out.println("removeByIndex() 전 ArrayUtil.size(arr): " +ArrayUtil.size(arr));
System.out.println("removeByIndex() 전 ArrayUtil.indexOf(arr, 300): " +ArrayUtil.indexOf(arr, 300));
System.out.println("-----유효 인덱스인 경우-----");
arr = ArrayUtil.removeByIndex(arr, 2);
System.out.println("removeByIndex() 후 ArrayUtil.size(arr): " +ArrayUtil.size(arr));
System.out.println("removeByIndex() 후 ArrayUtil.indexOf(arr, 300): " +ArrayUtil.indexOf(arr, 300));
System.out.println("-----유효 인덱스가 아닌 경우-----");
System.out.println("removeByIndex() 전 ArrayUtil.size(arr): " +ArrayUtil.size(arr));
arr = ArrayUtil.removeByIndex(arr, 3000);
System.out.println("removeByIndex() 후 ArrayUtil.size(arr): " +ArrayUtil.size(arr));
System.out.println();
// 11. removeByElement()
System.out.println("11. removoeByElement()");
System.out.println("removoeByElement() 전 ArrayUtil.indexOf(arr, 3): "+ArrayUtil.indexOf(arr, 3));
arr = ArrayUtil.removeByElement(arr, 3);
System.out.println("removoeByElement() 후 ArrayUtil.indexOf(arr, 3): "+ArrayUtil.indexOf(arr, 3));
System.out.println();
}
}
ArrayList 개념
package day0917;
/* ArrayList
*동적 할당 배열이 정적 할당 배열보다 사용하기 편하다는 것을 배웠지만
*문제는, 우리가 새로운 데이터타입을 만들 때마다
*ArrayUtil에 동적할당 메소드를 매번 새롭게 만들어야 했다.
*
*하지만 객체지향 프로그래밍의 관점에서는
*우리가 많은 클래스를 만들어서
*해당 클래스의 객체들로 우리가 프로그램을 만들게 되는데,
*그렇다면 그때마다 매번 동적할당 메소드를 만들어주어야할까?
*
* 정답은 당연히 아니다 이다.
*
*자바에서 기본적으로 동적할당의 개념이 구현되어있는
*클래스를 제공해준다.
*
*ArrayList로 대표되는 Collection 라는 클래스들인데
*해당 클래스들 안에는 그게 3가지 분류가 있다.
* 1. List: 리스트는 배열과 같이 우리가 추가하는 대로 차례대로 객체가 추가되는 형태로써,
* 순서가 존재하고 중복된 값을 추가할 수 있다.
* 즉, 우리의 ArrayUtil 안에 구현되어있는 동적 할당 배열과 가장 유사한 형태이다.
* 2. Set: 셋은 어레이리스트와 유사하게 순서가 존재하는 형태이지만
* 단, 중복된 값은 추가할 수 없다.
* 3. Map: 맵은 추가되는 요소가 순서가 존재하지 않고, 대신 해당 요소를 호출할 때에는
* 우리가 미리 지정한 키 값을 통해서 호출해야 한다.
*
*
* 우리가 여기서 배울 것은 List 중에서 가장 많이 사용되는 ArrayList이다.
*
*/
import java.util.ArrayList;
public class Ex04ArrayList {
public static void main(String[] args) {
// ArrayList 클래스 객체를 우리가 선언과 초기화를 해주어야 하는데
// 배열에서처럼, 우리가 해당 객체가 어떤 클래스의 모음인지를 다음과 같은 방법으로 명시해야한다.
// ArrayList<클래스 이름> 리스트객체의 이름 = new ArrayList<>();
// 그렇다면 만약 우리가 int를 모아둔 ArrayList가 필요할 때에는?
// 이런 경우를 대비해서 자바는 "Wrapper Class"가 존재한다.
// Wrapper 클래스란 기본형 데이터타입을 클래스로 구현해둔 "포장 클래스"이다.
// int는 Integer, double Double .....
// 만약 기본형 데이터타입의 클래스 버전이 필요할 때에는
// 해당 포장 클래스를 사용하면 된다!
// String 클래스를 모아둔 ArrayList 객체 list를 만들어보자
ArrayList<String> list = new ArrayList<>();
// String 객체를 5개 만들어보자
String s1 = new String("a1");
String s2 = new String("a2");
String s3 = new String("a3");
String s4 = new String("a4");
String s5 = new String("a5");
// 1. add(e)
// 어레이리스트 객체에 새로운 요소를 추가할 때에는 add() 메소드를 실행하면 된다.
list.add(s1);
list.add(s2);
list.add(s3);
list.add("a4");
// 2. get(index)
// 어레이리스트 객체에 특정 인덱스에 있는 요소를 호출할 때에는 get() 메소드를 실행하면 된다.
System.out.println("2. get(index)");
System.out.println("list.get(0): "+list.get(0));
//단, 잘못된 인덱스를 호출할 시에는 당연히 에러가 발생된다.
//System.out.println("list.get(55): "+list.get(55));
System.out.println("--------------------\n");
// 3. add(index, e)
// 어레이리스트 객체에 특정 인덱스에 새로운 값을 끼어넣고 싶을 때에는 add(index, e) 메소드를 실행하면 된다.
System.out.println("3. get(index, e)");
System.out.println("add() 전 list.get(1): "+list.get(1));
System.out.println("set() 전 list.size()의 값: "+list.size());
list.add(1, s1);
System.out.println("add() 후 list.get(1): "+list.get(1));
System.out.println("set() 전 list.size()의 값: "+list.size());
System.out.println("--------------------\n");
// 4. size()
// 어레이리스트 객체 안에 추가되어있는 요소의 갯수를 알고 싶을 때에는 size() 메소드를 실행하면 된다.
System.out.println("4. size()");
System.out.println("list.size(): " +list.size());
System.out.println("---------------------\n");
// 5. isEmpty()
// 어레이리스트 객체 안에 요소가 존재하지 않으면 true, 존재하면 false인지 알고 싶을 때에는
// isEmpty() 메소드를 실행하면 된다.
System.out.println("5. isEmpty()");
System.out.println("list.isEmpty(): " +list.isEmpty() );
System.out.println("---------------------\n");
// 6. set(index, e)
// 특정 인덱스에 새로운 값을 끼어 넣을때에는 set(index, e) 메소드를 실행하면 된다.
// 기존에 있던 값은 리턴된다.
System.out.println("6. set(index, e");
String temp = "abcd3ef";
System.out.println("set() 전 temp의 값: " +temp);
System.out.println("set() 전 list.get(0)의 값: "+list.get(0));
System.out.println("set() 전 list.size()의 값: "+list.size());
temp = list.set(0, s2);
System.out.println("set() 후 temp의 값: " +temp);
System.out.println("set() 후 list.get(0)의 값: "+list.get(0));
System.out.println("set() 전 list.size()의 값: "+list.size());
System.out.println("---------------------\n");
// 7. clear()
// 현재 어레이리스트 객체의 내용을 싹 다 비우고 싶다면
// clear() 메소드를 실행하면 된다.
System.out.println("7. clear()");
System.out.println("clear() 전 list.isEmpty(): "+list.isEmpty());
list.clear();
System.out.println("clear() 후 list.isEmpty(): "+list.isEmpty());
System.out.println("--------------------\n");
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
list.add("a4");
//여기서부터는 <> 안에 클래스에 equals() 메소드가
//정확하게 구현되어있어야 정상적으로 실행이 된다.
// 8. contains(e)
// 어레이리스트가 해당 객체와 equals()가 true가 나오는 요소를 가지고 있는지 알고 싶다면
// contains(e)를 실행하면 된다.
System.out.println("8. contains(e)");
System.out.println("list.contains(s1): " +list.contains(s1));
System.out.println("list.contains(s4): " +list.contains(s4));
System.out.println("list.contains(s5): " +list.contains(s5));
System.out.println("--------------------\n");
// 9. indexOf(e)
// 어레이리스트에서 해당 요소와 일치하는 객체의 가장 먼저 등장하는 인덱스를 알고 싶다면
// index(e)를 실행하면 된다.
// 만약 해당 객체와 일치하는 요소가 없을 경우 -1이 리턴된다. System.out.println("8. contains(e)");
System.out.println("9. indexOf(e)");
System.out.println("list.indexOf(s1): " +list.indexOf(s1));
System.out.println("list.indexOf(s4): " +list.indexOf(s4));
System.out.println("list.indexOf(s5): " +list.indexOf(s5));
System.out.println("--------------------\n");
// 10. lastIndexOf(e)
// 어레이리스트에서 해당 요소와 일치하는 객체의 가장 마지막에 등장하는 인덱스를 알고 싶다면
// lastIndex(e)를 실행하면 된다.
// 만약 해당 객체와 일치하는 요소가 없을 경우 -1이 리턴된다.
System.out.println("10. lastIndexOf(e)");
System.out.println("list.lastIndexOf(s1): " +list.lastIndexOf(s1));
System.out.println("list.lastIndexOf(s4): " +list.lastIndexOf(s4));
System.out.println("list.lastIndexOf(s5): " +list.lastIndexOf(s5));
System.out.println("--------------------\n");
// 11. remove(index)
// 어레이리스트에서 특정 인덱스의 값을 삭제할 때에는 remove(index)를 실행하면 된다.
System.out.println("11. remove(index)");
System.out.println("remove(index) 전 list.get(0): " + list.get(0));
list.remove(0);
System.out.println("remove(index) 후 list.get(0): " + list.get(0));
System.out.println("--------------------\n");
// 12. remove(e)
// 어레이리슽에서 가장 먼저 특정 객체와 일치하는 요소를 삭제할 때에는
// remove(e)를 실행하면 된다.
// 만약 일치하는 요소가 존재하지 않으면 아무일도 발생하지 않는다.
System.out.println("12. remove(e)");
System.out.println("remove(e) 전 list.contains(s1): " + list.contains(s1));
System.out.println("remove(e) 전 list.contains(s4): " + list.contains(s4));
System.out.println("remove(e) 전 list.size(): " + list.size());
list.remove(s1);
list.remove(s4);
list.remove(s5);
System.out.println("remove(e) 후 list.contains(s1): " + list.contains(s1));
System.out.println("remove(e) 후 list.contains(s4): " + list.contains(s4));
System.out.println("remove(e) 후 list.size(): " + list.size());
System.out.println("--------------------\n");
}
}
문제 1. ArrayUtil을 사용한 로또 번호 제작 프로그램
package day0915;
// ArrayUtil 을 사용한 로또 번호 제작기
import java.util.Random;
import util.ArrayUtil;
public class Ex08Lotto04 {
public static void main(String[] args) {
Random random = new Random();
int[] numbers = new int[0];
while(ArrayUtil.size(numbers) < 6) {
int num = random.nextInt(45) +1;
if(!ArrayUtil.contains(numbers, num)) {
numbers = ArrayUtil.add(numbers, num);
}
}
for(int i = 0; i < ArrayUtil.size(numbers); i++) {
System.out.println(ArrayUtil.get(numbers, i));
}
}
}
문제
1.
/*퀴즈
* 사용자로부터 5개의 숫자를 입력받아서
* 사용자가 입력한 순서대로 출력하는 프로그램을 작성하시오.
* 단, 5개의 변수를 따로 만드는 것이 아니라
* 배열을 사용하여 처리하도록 하시오.
*
* 제한시간 10분
*/
package day0913;
import java.util.Scanner;
public class Ex03Array2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// //내가한거
// System.out.println("숫자를 5개 입력하세요");
// System.out.println("> ");
// int num1 = scanner.nextInt();
// int num2 = scanner.nextInt();
// int num3 = scanner.nextInt();
// int num4 = scanner.nextInt();
// int num5 = scanner.nextInt();
//
// int[] intArray;
// intArray = new int[6];
//
// intArray[0] = num1;
// intArray[1] = num2;
// intArray[2] = num3;
// intArray[3] = num4;
// intArray[4] = num5;
//
// System.out.println("당신의 배열: "+intArray[0]+intArray[1]+intArray[2]+intArray[3]+intArray[4]);
//썜이 한거
int size = 5;
int[] array = new int[size];
// System.out.println("1번쨰 값을 입력해주세요.");
// System.out.println("> ");
// array[0] = scanner.nextInt();
//
// System.out.println("2번쨰 값을 입력해주세요.");
// System.out.println("> ");
// array[1] = scanner.nextInt();
// //....
//입력
for(int i = 0; i<array.length; i++) {
System.out.println(i+"번째 숫자를 입력해주세요.");
System.out.println("> ");
array[i] = scanner.nextInt();
}
//출력
for(int i = 0; i<array.length;i++) {
System.out.printf("array[%d]: %d\n", i, array[i]);
}
scanner.close();
}
}
2. 로또게임
/*퀴즈 제한시간 15분
* 로또 시뮬레이터 1번
* 1부터 45사이의 6개의 랜덤한 숫자를 뽑아서
* 배열에 저장하고 출력하는 프로그램을 작성하시오
*/
package day0913;
import java.util.Random;
public class LottoGame01 {
public static void main(String[] args) {
Random random = new Random();
//내가 한거
// int size = 6;
// int[] array = new int[size];
//
// for(int i = 0; i<array.length;i++) {
// array[i] = random.nextInt(45)+1;
// System.out.printf("array[%d]: %d\n", i, array[i]);
// }
//쌤이 한거
//상수
final int SIZE = 6;
final int NUMBER_MAX = 45;
//번호를 저장할 배열
int[] numbers = new int[SIZE];
//for문을 사용하여
//int 배열 numbers의 각 인덱스번 칸에
// 랜덤한 숫자를 넣어준다.
for(int i = 0; i<numbers.length; i++) {
numbers[i] = random.nextInt(NUMBER_MAX) +1;
}
//for문을 사용하여
//각 인덱스의 저장된 값을 출력한다.
for(int i = 0; i < numbers.length; i++) {
System.out.printf("numbers[%d]: %d\n", i, numbers[i]);
}
}
}
+ 난이도 상승..
* 중복을 제거하고 정렬한 버전 만들기
3.
/*퀴즈 제한시간 30분
* 사용자로부터 1~45까지의 숫자 6개를 입력받아서
* 정렬하여 출력하는 프로그램.
* 단, 사용자가 잘못된 숫자나 중복된 숫자를 입력하는 경우, 올바른 숫자가
* 입력하도록 다시 입력 받도록 코드를 작성하시오.
*/
package day0913;
import java.util.Scanner;
public class LottoGame04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//쌤이 한거
//상수
//입력가능한 최소 값
//입력가능한 최대 값
//배열의 길이
final int NUMBER_MIN = 1;
final int NUMBER_MAX = 45;
final int LENGTH_MAX = 6;
int[] array = new int[LENGTH_MAX];
//배열에 각 인덱스에 숫자를 넣는다.
for(int i = 0; i<array.length; i++) {
System.out.printf("%d번째 숫자\n", i+1);
System.out.println("1~45 사이의 숫자를 입력해주세요.");
System.out.println("> ");
int num = scanner.nextInt();
// 만약 문제가 없으면 true;
// 문제가 있으면 false를 저장할
// boolean 변수를 만든다.
boolean inputSwitch = true;
//사용자가 입력한 값이 1~45가 아닐 경우에
//inputSwitch에 false를 저장하고 그 외는 true를 저장하자
inputSwitch = num >= NUMBER_MIN && num <= NUMBER_MAX;
//array 전체를 확인하여
//만약 i번 칸의 저장된 값이
//num과 같으면, inputSwitch를 false로 저장한다.
for(int j = 0; j<array.length; j++) {
if(array[j] == num) {
inputSwitch = false;
}
}
if(inputSwitch) {
//아무런 문제가 없었으므로
//i번째 인덱스에 num을 저장한다.
array[i] = num;
} else {
System.out.println("잘못입력하셨습니다.");
i--;
}
}
//배열을 정렬한다.
for(int i = 0; i<array.length-1; i++) {
if(array[i] > array[i+1]) {
int temp = array[i];
array[i] = array[i];
array[i+1] = temp;
i = -1; //i++이 무조건 실행되기 때문에 증가된 i값을 하나 줄여서 정확한 i의 값을 나타내주기 위해서
}
}
//출력한다.
for(int i = 0; i<array.length; i++) {
System.out.printf("array[%d]: [%d]\n", i, array[i]);
}
scanner.close();
}
}
4. /*퀴즈 제한시간:15분
* 사용자로부터 자동으로 할지 수동으로 할지 입력을 받아서
* 자동으로 한다고 하면 자동으로 숫자 6개를 뽑고
* 수동으로 한다고 하면 수동으로 숫자 6개를 뽑아
* 정렬하여 출력하는 로또 프로그램을 작성하시오.
*/
5. /*퀴즈 제한시간 20분
* 컴퓨터의 숫자 6개를 랜덤으로 뽑고,
* 사용자의 숫자 6개는 수동 혹은 자동으로 학지 입력받아서
* 사용자의 선택에 맞추어 6개의 숫자를 뽑아서
* 컴퓨터 숫자 6개와 사용자 숫자 6개 중
* 일치하는 숫자가 총 몇개인지 구하여 출력하는 프로그램을 작성하시오.
*/
6. /*퀴즈 제한시간 20분
* 컴퓨터의 숫자 6개를 랜덤으로 뽑고,
* 사용자의 숫자 6개는 수동 혹은 자동으로 학지 입력바다서
* 사용자의 선택에 맞추어 6개의 숫자를 뽑아서
* 컴퓨터 숫자 6개와 사용자 숫자 6개 중
* 일치하는 숫자가 총 몇개인지 구하여 출력하는 프로그램.
*/
'STUDY > languages' 카테고리의 다른 글
자바 버전 관리 (0) | 2023.05.05 |
---|---|
[자바] 메소드, 클래스 정리 (0) | 2021.11.17 |
[자바] 반복문 개념정리, 문제 모음 (0) | 2021.11.17 |
[자바] 조건문 개념정리, 문제 모음 (0) | 2021.11.17 |
[자바] 치매방지 기초모음 (0) | 2021.11.17 |