[Java] 로또 번호 만들기

2022. 7. 30. 21:39·Language/Java
728x90

로또번호는 1 ~ 45까지의 숫자가 중복되지 않으면서 출력되어야 한다.

public class Lotto {
	public static void main(String[] args) {
		// 1. 중복되지 않은 6개의 정수를 추출하여 배열에 저장한다.
		// 2. 오름차순으로 정렬하여 보여준다.
		int num = 6; // ball의 개수
		int[] ball = new int[num]; // 랜덤하게 추출한 정수를 저장할 변수
		int temp;
		for (int i = 0; i < num; i++) {
			ball[i] = (int) (Math.random() * 45 + 1);

			if (i > 0) {
				for (int j = 0; j < i; j++) {
					if (ball[i] == ball[j]) {
						i--;
						break;
					}
				}
			}
			System.out.print(ball[i] + "\t");
		}
		System.out.println();
		for (int i = 0; i < num; i++) {
			for (int j = 0; j < num - 1 - i; j++) {
				if (ball[j] > ball[j + 1]) {
					temp = ball[j];
					ball[j] = ball[j + 1];
					ball[j + 1] = temp;
				}
			}
		}
		for (int k = 0; k < num; k++) {
			System.out.print(ball[k] + "\t");
		}
	}
}

ball 배열에 첫번째 방부터 랜덤 한 숫자를 넣어준다.

이때 두번째 생성된 방부터는 앞서 생성된 방과 중복된 숫자가 나왔는지 비교해 주어야 한다.

if 문을 사용해 i가 0보다 클 경우, i번 방과 j번방을 비교해 중복 값이 없으면 넘어가고 중복된다면 i값을 줄여주고

if( i > 0)문 안쪽 for문을 break 해준다.

예를 들어 i가 4가 된다면 ball [4] == ball [0], ball [1], ball [2], ball [3] 이랑 비교해 중복되는 값이 있는지 확인하는 것이다.

중복이 나와 i값이 줄어들고, 다시 for문에 의해 i값이 늘어난 다음 새로운 랜덤값을 부여받는다. 그 후 다시 비교한다.

(j의 범위는 i보다 작음)

객체와 클래스

클래스 : 객체를 정의해 놓은것. 객체의 설계도

객체 : 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.

클래스 → 인스턴스화 → 인스턴스(객체)

[인스턴스 생성방법]
클래스명 참조변수명;		// 객체를 다루기 위한 참조변수를 선언한다.
참조변수명 = new 클래스명();	// 객체를 생성한 후에 생성된 객체의 주소를 참조 변수에 저장한다.
Tv t;
t = new Tv();
Tv t = new Tv();
sts
같은 패키지 안에 똑같은 파일명을 만들면 안된다.

Package Presentation →
Flat: 있는대로 보여줌
Hierarchical: 구조적인 형태로 보여줌
package object.tv1;
//-------------------------------------------
// class Tv
//-------------------------------------------
class Tv {
	// 멤버 변수
	String	color;		// 색깔
	boolean	power;		// on/off 스위치
	int 	channel;	// 채널
	
	// 기능
	void power()		{	power	=	!power;		} // TV를 켰다 껐다 하는 기능
	void channelUp() 	{	++channel;				} // 채널을 1 올린다.
	void channelDown()	{	--channel;				} // 채널을 1 내린다.
	// 기본적으로 멤버변수의 값이 바뀐다.
	
}	// End - class Tv

//-------------------------------------------
// public class TvExam
//-------------------------------------------

public class TvExam {

	public static void main(String[] args) {
		Tv t;		// Tv를 가리키는 참조변수를 선언한다.
		t = new Tv();	// Tv를 생성한다.
		
		t.channel = 11;
		System.out.println("현재 채널은 " + t.channel + "번 입니다."); // 11
		
		t.channelDown(); //메서드 호출
		System.out.println("현재 채널은 " + t.channel + "번 입니다."); // 10

	}

} // End - public class TvExam

참조변수에 생성자를 사용해서 객체를 만들면 새로운 메모리를 차지하게 된다.

Tv t1 = new Tv();

Tv t1 = new Tv();

package object.tv2;
//-------------------------------------------
// class Tv
//-------------------------------------------
class Tv {
	// 멤버 변수
	String	color;		// 색깔
	boolean	power;		// on/off 스위치
	int 	channel;	// 채널
	
	// 기능
	void power()		{	power	=	!power;		} // TV를 켰다 껐다 하는 기능
	void channelUp() 	{	++channel;				} // 채널을 1 올린다.
	void channelDown()	{	--channel;				} // 채널을 1 내린다.
	// 기본적으로 멤버변수의 값이 바뀐다.
	
}	// End - class Tv

//-------------------------------------------
// public class TvExam
//-------------------------------------------
public class TvExam {

	public static void main(String[] args) {
		Tv t1 = new Tv();
		Tv t2 = new Tv();	// 둘은 전혀 다른 객체. 메모리 별도로 잡고있음
		System.out.println("t1의 채널 : " + t1.channel);	// 0
		System.out.println("t2의 채널 : " + t2.channel);	// 0
		
		t1.channel = 8;
		System.out.println("t1의 채널 : " + t1.channel);	// 8
		System.out.println("t2의 채널 : " + t2.channel);	// 0

	}

}	// End - public class TvExam
package object.tv3;
//-------------------------------------------
// class Tv
//-------------------------------------------
class Tv {
	// 멤버 변수
	String	color;		// 색깔
	boolean	power;		// on/off 스위치
	int 	channel;	// 채널
	
	// 기능
	void power()		{	power	=	!power;		} // TV를 켰다 껐다 하는 기능
	void channelUp() 	{	++channel;				} // 채널을 1 올린다.
	void channelDown()	{	--channel;				} // 채널을 1 내린다.
	// 기본적으로 멤버변수의 값이 바뀐다.
	
}	// End - class Tv

//-------------------------------------------
// public class TvExam
//-------------------------------------------
public class TvExam {

	public static void main(String[] args) {

		Tv t1 = new Tv();
		Tv t2 = new Tv();
		System.out.println("t1의 채널 : " + t1.channel);
		System.out.println("t2의 채널 : " + t2.channel);
		
		t2= t1;
		t1.channel = 11;
		System.out.println("t1의 채널 : " + t1.channel);	// 11
		System.out.println("t2의 채널 : " + t2.channel);	// 11

	}

}	// End - public class TvExam

t1.channel 값만 바꿨는데 왜 t2의 채널도 바뀌었을까?

t1과 t2는 둘 다 참조변수이다. (같은 주소값을 가리키고있다)

서로 다른 메모리 주소값을 가리키고 있었는데 t2 = t1; 이라는 대입을 만나 같은 주소값을 가리키게 된다.

같은 주소값을 가리키고 있게 되었으니 t2의 값을 바꿔도 t1도 같이 바뀐다. (그냥 둘이 아예 똑같아진다.)

비어있는 삼각형 : 내가 만든 클래스의 멤버 변수

색이 들어있는 삼각형 : 내가 만든 클래스의  메서드

원 : 자바의 기본 메서드

변수의 종류

변수의 종류 선언위치 생성시기
클래스 변수 (static) 클래스 영역 클래스가 메모리에 올라갈 때
인스턴스 변수 클래스 영역 인스턴스가 생성될 때
지역변수 지역 영역 변수 선언문이 실행될 때
package object.card1;
//-------------------------------------------
//class Card
//-------------------------------------------
class Card {
	String		kind;			// 카드의 무늬 - 인스턴스 변수
	int		number;			// 카드의 숫자 - 인스턴스 변수
	static	int	width	=	120;	// 카드의 폭 - 클래스 변수
	static	int	height	=	260;	// 카드의 높이 - 클래스 변수
} // End - class Card

//-------------------------------------------
//public class CardExam
//-------------------------------------------
public class CardExam {

	public static void main(String[] args) {

		System.out.println("카드의 폭 : " + Card.width);
		System.out.println("카드의 높이 : " + Card.height);
		// System.out.println("카드의 숫자 : " + Card.number);	에러
		Card c1 = new Card();
		c1.kind = "Heart";
		c1.number = 4;
		
		Card c2 = new Card();
		c2.kind = "Diamond";
		c2.number = 9;
		
	System.out.println("C1 => " + c1.kind + ", " + c1.number + ", " + c1.width + ", " + c1.height);
	System.out.println("C2 => " + c2.kind + ", " + c2.number + ", " + c2.width + ", " + c2.height);
		
		c1.width = 200;
		c2.height = 400;

	System.out.println("C1 => " + c1.kind + ", " + c1.number + ", " + c1.width + ", " + c1.height);
	System.out.println("C2 => " + c2.kind + ", " + c2.number + ", " + c2.width + ", " + c2.height);
	}

} // End - public class CardExam

출력 결과

인스턴스 변수를 사용하려면 참조 변수 생성이 필요하다.

클래스(static) 변수의 값은 객체에서도 바꿀 수 있다. (해당 클래스를 사용하는 모든 객체의 static 변수 값은 바뀌게 된다.)

'Language > Java' 카테고리의 다른 글

[Java] 명명 규칙  (0) 2022.07.31
[Java] 자바 기초  (0) 2022.07.31
[Java] 배열 (Array) 기초  (0) 2022.07.30
[Java] Java기초  (0) 2022.07.30
[Java] 자바소스와 컴파일  (0) 2022.07.30
'Language/Java' 카테고리의 다른 글
  • [Java] 명명 규칙
  • [Java] 자바 기초
  • [Java] 배열 (Array) 기초
  • [Java] Java기초
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    next.js
    타입스크립트
    Java
    리액트
    제어문
    event
    MySQL
    react
    객체
    Python
    자바스크립트
    TypeScript
    object
    JavaScript
    web
    HTML
    파이썬
    CSS
    array
    변수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Java] 로또 번호 만들기
상단으로

티스토리툴바