본문 바로가기

수업내용

[Day4][Java] wrapper클래스 / 제어문(if) / 스캐너(Scanner) / 반올림(round) / 학점 프로그램

 

Ⅰ. wrapper 클래스

 

-- 기본자료형(원시형)은 데이터 저장 및 4칙연산 에서만 사용하는 것이고, wrapper 클래스는 데이터 저장 및 4칙연산 뿐만아니라 아주 다양한 기능의 메소드가 제공되므로 다방면으로 사용되어진다.

 

기본자료형

(원시형, primitive)

wrapper 클래스

byte

Byte

short

Short

int

Integer

long

Long

char

Character

float

Float

double

Double

boolean

Boolean

 

-- int와 char를 제외하면 첫 글자만 대문자로 바꾸면 된다.

 


 

Character.toUpperCase();를 사용하여 대문자를 소문자로, 소문자를 대문자로 바꾸어 보자.

 

 

 

System.out.println(Character.toUpperCase('b'));
//Character.toUpperCase('b');은 'b'를 대문자 'B'로 바꾸어서 반환해 준다.

System.out.println(Character.toLowerCase('T'));
//Character.toLowerCase('T');은 'T'를 소문자 't'로 바꾸어서 반환해 준다.

 

 

 

▷결과

B

t

 


 

-- String(문자열)을 int(정수형) 타입으로 바꾸어 보자.

 

 

 

String str1 = "12";
String str2 = "34";
		
System.out.println(str1 + " + " + str2 + " = " + (str1+str2));

 

 

 

▷결과

12 + 34 = 1234

 

 

 

int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
	
System.out.println(str1 + " + " + str2 + " = " + (num1+num2));

 

 

 

-- Integer.parseInt : 정수로 되어진 문자열

-- 정수로 되어진 문자열을 실제 정수로 변환시켜 주는 것이다.

 

▷결과

12 + 34 = 46

 


 

int(정수형)을 String(문자열)로 바꾸어 보자.

 

 

 

int a = 98;
int b = 76;
		
String stra = Integer.toString(a);
String strb = String.valueOf(b);
		
System.out.println(a + " + " + b + " = " + (stra+strb));

 

 

 

-- Integer.toString();을 사용할 수도 있고, String.valueOf();를 사용할 수도 있다.

 

▷결과

98 + 76 = 9876

 


 

double(실수형)을 String(문자열)로 바꾸어 보자.

 

 

 

String str3 = "12.34";
String str4 = "45.67";
		
System.out.println(str3 + " + " + str4 + " = " + (str3+str4));

 

 

 

▷결과

12.34 + 45.67 = 12.3445.67

 

 

 

double num3 = Double.parseDouble(str3);
double num4 = Double.parseDouble(str4);

System.out.println(str3 + " + " + str4 + " = " + (num3+num4));

 

 

 

-- Double.parseDouble : 실수로 되어진 문자열

-- 실수로 되어진 문자열을 실제 실수로 변환시켜 주는 것이다.

 

▷결과

12.34 + 45.67 = 58.010000000000005

 


 

double(실수형)을 String(문자열)로 바꾸어 보자.

 

 

 

double c = 98.76;
double d = 54.32;
		
String strc = Double.toString(c);
String strd = String.valueOf(d);
		
System.out.println(c + " + " + d + " = " + (strc+strd));

 

 

 

-- Double.toString(); 을 사용할 수도 있고, String.valueOf();를 사용할 수도 있다.

 

▷결과

98.76 + 54.32 = 98.7654.32

 


 

Ⅱ. 제어문 (if)

 

▷ if(조건식1) {

// 조건식1 이 참(true)이라면

// 실행명령문1;을 실행하고서 끝낸다.

실행명령문1;

}

else if(조건식2) {

// 조건식2 이 참(true)이라면

// 실행명령문2;을 실행하고서 끝낸다.

실행명령문2;

}

else if(조건식3) {

// 조건식3 이 참(true)이라면

// 실행명령문3;을 실행하고서 끝낸다.

실행명령문3;

}

else {

// 조건식1, 조건식2, 조건식3 이 모두 거짓(false)이라면 

// 실행명령문4;을 실행하고서 끝낸다.

실행명령문4;

}

 

 

 

int no = 30;
		
		if(50-10 == no) {
			System.out.println("50-10 = 30 입니다.");
		}
		else if (50-40 == no) {
			System.out.println("50-40 = 30 입니다.");
		}
		else if (50-20 == no) {
			System.out.println("50-20 = 30 입니다.");
		}
		else {
			System.out.println("나는 수학을 몰라요 ㅜㅜ");
		}

 

 

 

▷결과

50-20 = 30 입니다.

 


 

변수 ch1 값이 '9' 일 때 영문 대문자, 영문 소문자, 숫자, 특수문자를 구분하는 if문을 만들어 보자.

 

▷첫 번째 방법

 

 

 

if(65 <= (int)ch1 && (int)ch1 <= 90) {
			System.out.println(ch1 + "는 영문 대문자 입니다.");
		} 
		else if(97 <= (int)ch1 && (int)ch1 <= 122) {
			System.out.println(ch1 + "는 영문 소문자 입니다.");
		}
		else if(48 <= (int)ch1 && (int)ch1 <= 57) {
			System.out.println(ch1 + "는 숫자입니다.");
		} else {
			System.out.println(ch1 + "는 특수문자입니다.");

 

 

 

▷두 번째 방법

 

 

 

f('A' <= ch1 && ch1 <= 'Z') {
			System.out.println(ch1 + "는 영문 대문자 입니다.");
		} 
		else if('a' <= ch1 && ch1 <= 'z') {
			System.out.println(ch1 + "는 영문 소문자 입니다.");
		}
		else if('0' <= ch1 && ch1 <= '9') {
			System.out.println(ch1 + "는 숫자입니다.");
		} else {
			System.out.println(ch1 + "는 특수문자입니다.");
		}

 

 

 

▷세 번째 방법

 

 

 

if(Character.isUpperCase(ch1)) {
			System.out.println(ch1 + "는 영문 대문자 입니다.");
		} 
		else if(Character.isLowerCase(ch1)) {
			System.out.println(ch1 + "는 영문 소문자 입니다.");
		}
		else if(Character.isDigit(ch1)) {
			System.out.println(ch1 + "는 숫자입니다.");
		} else {
			System.out.println(ch1 + "는 특수문자입니다.");
		}

 

 

 

-- 결과는 모두 "9는 숫자입니다" 라고 나온다.

 

 


 

Ⅲ. Scanner(스캐너)

 

 

 

Scanner sc = new Scanner(System.in);
// System.in 은 키보드라고 생각하면 된다.
sc.close();
// 사용 후에는 닫아주도록 한다.
// main 메소드 닫히기 전

 

 

 

-- 입력한 값을 받아오기 위한 스캐너 객체를 생성한다.

 

 

 

System.out.print("문장을 입력하세요 => ");
String inputStr = sc.nextLine();

 

 

 

-- sc.nextLine();은 입력한 문장을 읽어온다.

-- 엔터까지 모두 읽어온 후 스캐너 버퍼에 아무것도 남기지 않는다.

 

 

 

 

System.out.print("정수를 입력하세요 => ");
int inputNum = sc.nextInt();

 

 

 

-- sc.nextInt();는 입력한 정수를 읽어온다.

-- 종결자가 공백 또는 엔터이기 때문에 종결자(공백 또는 엔터) 앞까지의 입력해 준 정수를 읽어온다.

-- 스캐너 버퍼에는 종결자가 삭제되는 것이 아니라 그대로 남아 있게 된다.

 

 

 

double inputDbl = sc.nextDouble();
sc.nextDouble();
sc.nextLine();
System.out.println("입력한 실수 : " + inputDbl);

 

 

 

-- sc.nextDouble();는 실수를 읽어온다.

 

 

 

System.out.print("단어를 입력하세요 => ");
		inputStr = sc.next();

 

 

 

-- sc.next();은 다음에 입력한 단어를 읽어온다.

-- sc.nextInt();와 마찬가지로 종결자가 공백 또는 엔터이기 때문에 스캐너 버퍼에는 종결자가 삭제되는 것이 아니라 그대로 남아 있다.

 

-- 따라서 next(), nextInt()를 사용할 경우 스캐너 버퍼를 따로 초기화 시켜 주어야 하기 때문에 nextLine()을 한 줄 더 쓰게 되므로

nextLine()을 처음부터 쓰는 것이 좋다.

 


 

Ⅳ. round(반올림)

 

 

 

double db1=93.45678, db2=86.87654;
		
System.out.println("=== 반올림 하기 전 ===");
System.out.println("db1 => " + db1 + ", db2 => " + db2);

 

 

 

▷결과

=== 반올림 하기 전 ===

db1 => 93.45678, db2 => 86.87654

 

 

 

System.out.println("\n=== 반올림 한 후 ===");
System.out.println("db1 => " + Math.round(db1) + ", db2 => " + Math.round(db2));

 

 

 

▷결과

=== 반올림 한 후 ===

db1 => 93, db2 => 87

 

-- Math.round(실수) : 입력한 실수의 정수 일의 자리까지만 보여주고 나머지 소수부는 반올림하면서 삭제된다.

-- db1 => 93.45678 소수부 첫 번째 자리는 4이므로 올림이 안 된다. 즉, 93이 된다.

-- db2 => 86.87654 소수부 첫 번째 자리는 8이므로 올림이 된다. 즉, 87이 된다.

 

 


 

특정 소수부 자리에서 반올림을 해 보자.

-- Math.round()는 정수의 반올림만 되므로 원하는 소수부 자리까지 정수가 되도록 곱해 준 후, 반올림을 하고 다시 나누어 준다.

 

db1과 db2를 소수 첫째 자리까지 나타내어주는 반올림을 해 보자.

 

 

 

System.out.println("\n=== 소수부 첫째자리까지 나타내어 주는 반올림 한 후 ===");
System.out.println("db1 => " + Math.round(db1*10)/10.0 + ", db2 => " + Math.round(db2*10)/10.0);

 

 

 

-- db1 ==> 93.45678 × 10 ==> 934.5678 ==> Math.round(934.5678) ==> 935 ==> 935 / 10.0 ==> 93.5

-- db2 ==> 86.87654 × 10 ==> 868.7654 ==> Math.round(868.7654) ==> 869 ==> 869 / 10.0 ==> 86.9

-- 나누어 줄 때 10으로 나누면 정수/정수=정수가 되므로 실수인 10.0으로 나누어 주어야 한다.

 

▷결과

=== 소수부 첫째자리까지 나타내어 주는 반올림 한 후 ===

db1 => 93.5, db2 => 86.9

 


 

db1과 db2를 소수 둘째 자리까지 나타내어주는 반올림을 해 보자.

 

 

 

System.out.println("\n=== 소수부 첫째자리까지 나타내어 주는 반올림 한 후 ===");
System.out.println("db1 => " + Math.round(db1*100)/100.0 + ", db2 => " + Math.round(db2*100)/100.0);

 

 

 

-- db1 ==> 93.45678 × 100 ==> 9345.678 ==> Math.round(9345.678) ==> 9346 ==> 9346 / 100.0 ==> 93.46

-- db2 ==> 86.87654 × 100 ==> 8687.654 ==> Math.round(8687.654) ==> 8688 ==> 8688 / 100.0 ==> 86.88

-- 나누어 줄 때 10으로 나누면 정수/정수=정수가 되므로 실수인 10.0으로 나누어 주어야 한다.

 

▷결과

=== 소수부 첫째자리까지 나타내어 주는 반올림 한 후 ===

db1 => 93.46, db2 => 86.88

 


 

 

국어, 영어, 수학 점수를 받아 총점, 평균, 평균에 따른 학점을 나타내는 프로그램을 만들어 보자.

day4.zip
0.00MB

 


 

-- 스캐너를 받아와서 학생명, 국어점수, 영어점수, 수학명을 입력 받아 나타내어 주는 함수를 만들어 보자.

 

 

 

package my.day4.e.sungjuk;

import java.util.Scanner;

public class MainQuiz {
	
	Sungjuk makeSungjuk(Scanner sc) {
		Sungjuk result = null;
		
		System.out.println("== 학생성적 등록하기 ==");
		System.out.print("1.학생명 : ");
		String name = sc.nextLine();

		System.out.print("2.국어점수 : ");
		String strKor = sc.nextLine();
		
		System.out.print("3.영어점수 : ");
		String strEng = sc.nextLine();
		
		System.out.print("4.수학점수 : ");
		String strMath = sc.nextLine();
		
		result = new Sungjuk(name, Integer.parseInt(strKor), Integer.parseInt(strEng), Integer.parseInt(strMath));
		
		return result;
		
	}
	
	public static void main(String[] args) {
		 
		Scanner sc = new Scanner(System.in);
		
		
		MainQuiz maq = new MainQuiz();
		//MainQuiz의 인스턴스
		
		Sungjuk sungjuk1 = maq.makeSungjuk(sc); // makeSungjuk()에 스캐너를 받아와서 그대로 쓸 수 있음
		// makeSungjuk 메소드를 통해서 sungjuk1인 인스턴스를 만들 수 있다
		// 클래스와 이름이 같으면 생성자, 이름이 같지 않으면 메소드
		
		sungjuk1.showInfo();
		
		sc.close();
	} // end of main()-------------------------------------------


}