HashSet

- 자바 Collection 중 Set의 파생클래스

- 중복원소를 허용하지 않음

- 순서 개념이 없음 (정렬을 하고 싶으면 리스트로 변환해야함)

 

import java.util.HashSet;

public class Main{
	public static void main(String[] args){
	
    		HashSet<Integer> hs = new HashSet<Integer>();
        
	}
}

 

HashSet method

● HashSet.add() 

   - HashSet에 어떠한 값을 저장함

   - HashSet<Integer> : HashSet의 타입을 Integer로 선언 -> int형 또는 Integer 객체를 대입해야함

 

● HashSet.size()

   - HashSet에 저장되어 있는 원소의 개수 반환

 

 

BASIC REQUIREMENT

 

Newyork : 7 million miles  Manila: 4 million miles   London:12 million miles

 

The price is
• 5 million miles or less: 1 million won
8 million miles or less: 1.5 million won
• Over 10 million miles: 2 million won

 

Peak Season: May 1st through July 31st, the peak season price is added by 500,000 won from the existing price.

Implement the limitation that each ticket can only be purchased for two tickets at a time because there are many bookings.

Enter the above data in an array, and enter the city and departure date when you run the program so that the price is printed.

 

 

import java.util.Scanner;
public class Flight {
	public static void main(String[] args) {
		String m; String des; 	// 사용자가 입력할 출발일 (월:m), 도착지(des)
		int cost = 0; int Ticket=0;	 // 사용자가 지불할 가격(cost), 티켓의 개수(Ticket)	
		Scanner scanner = new Scanner(System.in);
		String Month[]= {"May","June","July"};	//성수기에 해당하는 달

		//출발일 입력
		System.out.println("출발일을 입력하세요");
		String StartDay = scanner.nextLine();
		int index = StartDay.indexOf("/");
		m = StartDay.substring(index+1);
		
		//구매할 티켓의 개수 입력
		System.out.println("몇장의 티켓을 구매하겠습니까?");
		Ticket = scanner.nextInt();
		while (Ticket>2){
			System.out.println("티켓이 없습니다. 2명 이하로 다시입력하세요.");
			Ticket=scanner.nextInt();
		}
		scanner.nextLine();
		
		//도착지 입력
		System.out.println("도착지를 입력하세요.");
		des=scanner.nextLine();
		
		//가격 계산
		for (int i=0;i<3;i++) {
			if (m.equals(Month[i])) {		//성수기일때 가격
				cost=CityCost(des)+500000;
				break;
			}
			else cost=CityCost(des);	//비수기 일때 가격		
		}
		
		System.out.println("성공적으로 티켓을 구매하셨습니다. 가격은"+cost*Ticket+"입니다.");
		scanner.close();
		
	}
	
	public static int CityCost(String des) {	//도시 별 가격
		String City[]= {"Newyork","Manila","London"};
		int Ocost=0;
		if(des.equals(City[0])) Ocost=1500000;
		else if (des.equals(City[1])) Ocost=1000000;
		else Ocost=2000000;
		
		return Ocost;
	}

}

 

메모리 영역(Runtime Data Area)

1. 메소드(Method) 영역

- 코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메소드(method)데이터, 메소드 코드, 생성자(constructor)코드 등을 분류해서 저장

- JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역

 

2. 힙(Heap) 영역

- 객체와 배열이 생성되는 영역

 (객체 & 배열 : JVM 스택 영역의 변수나 다른 객체의 필드에서 참조)

- JVM은 Garbage Collector를 실행시켜 (참조하는 변수나 필드가 없는 의미 없는 객체를 쓰레기로 취급함)쓰레기 객체를 힙 영역에서 자동으로 제거

 

3. JVM 스택(Stack) 영역

- 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당됨

- 메소드가 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)함

- 프레임 내부에는 로컬 변수 스택이 있는데, 기본타입변수나 참조 타입 변수가 push/pop됨

 

자바의 데이터타입

(1) 원시 타입(primitive type) - 정수, 실수, 문자, 논리 리터럴 저장하는 타입 

                                     - (byte, char, short, int, long, float, double, boolean)

                                     - 실제 값을 변수 안에 저장

(2) 참조 타입(reference type) - 객체(Object)의 번지를 참조하는 타입 (번지를 통해 객체를 참조)

                                       - 배열, 열거, 클래스, 인터페이스 타입

                                       - 메모리의 번지를 값으로 가짐

 

//기본 타입 변수 
int age = 22;

//참조 타입 변수
String name = "kbs";

int형 변수 age : 22라는 값을 "직접" 저장하고 있음

String 클래스 변수 name : "힙(heap)영역의 String 객체 주소 값"을 가지고 있음 

                                 - 주소를 통해 객체를 참조 

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

[JAVA] Airline Booking Engine  (0) 2020.07.12
[JAVA] 메모리 사용 영역(Runtime Data Area)  (0) 2020.07.02
[JAVA] break문 사용  (0) 2020.06.01
[JAVA] 키보드로부터 입력받기  (0) 2020.06.01
[JAVA] 임의의 정수 뽑기  (0) 2020.06.01

break문 사용

- if문과 같이 사용

- for문과 while문을 종료할 때 if문의 조건식과 함께 사용

 

중첩 for문에서 바깥쪽 for 문까지 빠져나오는 방법

-> 바깥쪽 반복문에 이름 붙이고, if문 안에 " break 이름; "사용

 

public class BreakOutter {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Outter:for(char upper='A';upper<='Z';upper++) {
			for(char lower='a';lower<='z';lower++) {
				System.out.println(upper+"-"+lower);
				if(lower=='g') {
					break Outter;
				}
			}
		}
	
	System.out.println("close");
	}
}

 

 System.in

- 키보드로부터 직접 읽는 자바의 표준 입력 스트림

- 키보드로부터 키를 입력받는 메소드 

- 키 값을 바이트(문자 아님)로 리턴

 

하지만 키 값을 바이트 데이터로 넘겨주므로 응용프로그램이 문자 정보로 변환해야한다는 단점이 있음!

 

System.in.read( )

int keyCode = System.in.read();
public class WhileKeyControlExample {
	public static void main(String[] args) throws Exception{	
		//throws Exception : System.in.read()메소드에 대한 예외처리코드
	
		int speed =0;
		int keyCode =0;
		
		while(true) {
			if(keyCode!=13 && keyCode !=10) {	
				//즉, enter키가 입력되면 아래 문장들을 실행시키지 않는다.
                System.out.println("1.증속 | 2. 갑속 | 3. 중지");
				System.out.println("choice");
			}
			keyCode=System.in.read();//키보드의 키 코드를 읽음
			
			if (keyCode==49) {	//1을 읽었을 경우
				speed++;
				System.out.println("현재속도 : "+speed);
			}
			else if(keyCode==50) {	//2를 읽었을 경우
				speed--;
				System.out.println("현재속도 : "+speed);
			}
			else if (keyCode==51) break;	//3을 읽었을 경우
			//break: while문 탈출
		}
		
		System.out.println("close");
	}
}

 

Scanner 클래스 (java.util.Scanner 클래스)

- System.in 에게 키를 읽게 하고, 읽은 바이트를 문자, 정수, 실수, boolean, 문자열 등 다양한 타입으로 변환하여 리턴

- Scanner는 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽음

- 개발자가 원하는 다양한 타입의 값으로 바꾸어 읽을 수 있음

 

※ 객체 생성

//import 문 필요
import java.util.Scanner;
...
Scanner sc = new Scanner(System.in);  //Scanner 객체 생성

 

 공백문자

- \t, \f, \r, ' ', \n

Scanner sc = new Scanner(System.in);

String name = sc.next();
String city = sc.next();
int age = sc.nextInt();
double weight = sc.nextDouble();
boolean single = sc.nextBoolean();

 

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

[JAVA] 데이터타입 - 참조 타입  (0) 2020.06.04
[JAVA] break문 사용  (0) 2020.06.01
[JAVA] 임의의 정수 뽑기  (0) 2020.06.01
[JAVA] 제어문  (0) 2020.05.30
[JAVA] 연산자 - 삼항연산자  (0) 2020.05.28

자바에서 임의의 실수를 뽑는 메소드

Math.random( )

- 0.0과 1.0 사이에 속하는 double 타입의 난수 하나를 리턴함(0.0포함, 1.0 미포함)

   0.0 < = Math.random() < 1.0

 

임의의 정수 뽑기

-임의의 실수를 뽑는 메소드를 활용해서 임의의 정수 뽑기

 

1. 위의 식에서 각 변에 10을 곱하기

    0.0 * 10 < = Math.random( ) * 10 < 1.0 * 10

    0.0 < = Math.random( ) * 10 < 10.0

   위의 범위에 속하는 하나의 double타입의 값을 얻을 수 있음

 

2. 각 변을 int 타입으로 강제 타입변환

    (int) 0.0 < = (int) Math.random( ) * 10 < (int) 10.0

    0 < = (int) Math.random() * 10 < 10

    위의 범위에 속하는 하나의 정수값을 얻을 수 있음

 

3. 각 변에 1을 더하면 1~10까지의 정수 중에서 하나의 정수를 얻을 수 있음

    1 < = (int) Math.random() * 10 +1 < 11

 

이 원리를 이용하면 다음과 같이 정리할 수 있다.

start부터 시작하는 n개의 정수 중에서 임의의 정수 하나를 얻기위한 연산식

int num = (int)(Math.random()*n)+start;

ex) 로또 번호 하나 뽑기

int num = (int)(Math.random()*45)+1;

 

ex) 주사위 번호 하나뽑기

int num = (int)(Math.random()*6)+1;

 

public class IfDiceExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num = (int)(Math.random()*6)+1;
		
		if(num==1)	System.out.println("1");
		else if(num==2)	System.out.println("2");
		else if(num==3)	System.out.println("3");
		else if(num==4)	System.out.println("4");
		else if(num==5)	System.out.println("5");
		else System.out.println("6");
	}

}

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

[JAVA] break문 사용  (0) 2020.06.01
[JAVA] 키보드로부터 입력받기  (0) 2020.06.01
[JAVA] 제어문  (0) 2020.05.30
[JAVA] 연산자 - 삼항연산자  (0) 2020.05.28
[JAVA] 연산자- 이항연산자  (0) 2020.05.28

+ Recent posts