본문 바로가기

Language/JAVA

[JAVA]명품 자바 에센셜 예제 2장

 

예제 2-1 : Hello, 자바 프로그램의 기본 구조

package chap02;

//예제 2-1 : Hello, 자바 프로그램의 기본 구조

public class Hello { //Hello 이름의 클래스 선언, public이므로 다른 패키지에서도 접근 가능

	public static int sum(int n, int m) { //정수 n과 m을 매개변수로 하는 메서드 sum선언
		//public=공개 static=정적 메서드 의미
		return n+m; //리턴값은 매개변수 n과 m을 더한 값
	}
	
	//main() 메소드 선언
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int i=20; //정수형 변수 i선언과 동시에 정수 20의 값 저장
		int s; //정수형 변수 s 선언
		char a; //문자열 a변수 선언
		
		s=sum(i,10); //sum()메소드 호출, 앞서 선언된 i=20을 통해 20+10=30의 값 출력
		a='?'; //a변수에 '?'문자열 저장
		System.out.println(a); //문자 '?'화면 출력
		System.out.println("Hello"); // Hello 문자열 화면 출력 
		System.out.println(s);//정수 s 값 화면 출력
	}

}

 

예제 2-2 : var 키워드를 사용하여 변수 선언

package chap02;

public class Var {//Var라는 이름의 클래스 선언, public이므로 다른 패키지에서도 접근 가능

	//main메서드 선언
	public static void main(String[] args) {
		////public=공개 static=정적 메서드 의미
		// TODO Auto-generated method stub

		
		
		var price=200; //price는 int 타입으로 지정
		var name="kitae";//name은 String 타입으로 결정
		var pi=3.14; // pi는 double 타입으로 결정
		
		System.out.println("price="+(price+1000)); //기존에 저장된 price(200)과 1000을 더한 연산의 값 출력, 출력은 문자열 형태
		System.out.println("name="+name); //name에 저장된 String문자열(kitae) 출력, 출력은 문자열 형태
		System.out.println("pi="+pi*10);//pi에 저장되었던 3.14*10의 결과(31.4) 출력, 출력은 문자열 형태
	}

}
//출력결과
price=1200
name=kitae
pi=31.4

 

예제 2-3 : 변수, 리터럴, 상수 사용하기
문제: 원의 면적을 계산하여 출력하는 프로그램을 작성하라

package chap02;
//원의 면적을 계산하여 출력하는 프로그램을 작성하라

public class CircleArea { //CircleArea 이름의 클래스 선언

	//main()메서드 선언
	public static void main(String[] args) { 
		// TODO Auto-generated method stub

		
		final double PI=3.14; //final로 상수 지정, double형의 실수형 상수 PI 선언과 동시에 3.14 값 저장 
		double radius=10.2; // 실수형의 반지름(radius)선언과 동시에 10.2 값 저장 
		double circleArea=radius*radius*PI; //실수형의 원의 넓이(circleArea)선언과 동시에 위 라인에서 PI와 radius에서 저장한 값을 토대로 반지름*반지름*원주율 값 저장 
		
		System.out.print("반지름"+radius+","); //radius에 저장된 값 출력, 출력은 문자열 형태
		System.out.println("원의 면적="+circleArea); // circleArea에 저장된 값 출력, 출력은 문자열 형태
	}

}
//출력결과
반지름 10.2, 원의 면적 = 326.68559999999997

 

예제 2-4: 타입 변환
문제: 자동 타입 변환과 강제 타입 변환이 들어 있는 코드다. 실행 결과는 무엇인가?

package chap02;

public class TypeConversion {
//예제 2-4 타입변환
	public static void main(String[] args) {
		byte b=127;
		int i=100;
		
		System.out.println(b+i); //b가 int 타입으로 자동 변환
		System.out.println(10/4); //10을 4로 나눈 몫
		System.out.println(10.0/4);	//4가 4.0으로 자동 변환
		System.out.println((char)0x12340041); //0x로 시작한 16진수 데이터에서 char형으로 캐스팅 되고있다. char형은 2바이트, 해당 데이터의 하위 2바이트 까지만 읽을수 있으므로 0041의 아스키 코드 값 65는 문자 A
		System.out.println((byte)(b+i)); //해당 데이터는 int형으로 저장되지만 byte로 캐스팅 되므로 손실되는 부분을 제외한 값 -29
		System.out.println((int)2.9 + 1.8); //2.9만 정수형 변환(0.9 소거됨)한 값 2와 1.8의 합 = 2+1.8 = 3.8
		System.out.println((int)(2.9 + 1.8)); // (2.9+1.8) = 4.8을 정수형으로 변환한 값 4
		System.out.println((int)2.9 + (int)1.8); // 2.9를 정수형으로 변환한 값 2 + 1.8을 정수형으로 변환한 값 1 = 3
	}

}
//출력결과
227
2
2.5
A
-29
3.8
4
3

 

2-5 : Scanner를 이용한 키 입력 연습
문제: Scanner를 이용하여 이름, 도시, 나이, 체중, 독신 여부를 입력받고 다시 출력하는 프로그램을 작성하라.

package chap02;

import java.util.Scanner;

public class ScannerEx {

	public static void main(String[] args) {
		System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요.");
		
		Scanner scanner = new Scanner(System.in);
		String name= scanner.next();
		System.out.println("당신의 이름은 "+name+"입니다.");
		String city=scanner.next();
		System.out.println("당신이 사는 도시는 "+city+"입니다.");
		int age=scanner.nextInt();
		System.out.println("당신의 나이는 "+age+"살입니다.");
		double weight=scanner.nextDouble(); //실수 토큰 읽기
		System.out.println("당신의 체중은 "+weight+"kg입니다.");
		boolean single=scanner.nextBoolean();
		System.out.println("당신은 독신 여부는 "+single+"입니다.");
		//출력란에 공백 있는지 없는지 여부가 오류결과를 달라지게 함. -> 블로그 포스팅해보기
		
		scanner.close();
	}

}
//출력결과
이름, 도시, 나이, 체중, 독신여부를빈칸으로분리하여입력하세요.
Kim Seoul 20 65.1 true
당신의 이름은 Kim입니다.
당신이 사는 도시는 Seoul입니다.
당신의 나이는 20살입니다.
당신의 체중은 65.1kg입니다.
당신은 독신 여부는 true입니다.

 

예제 2-6 : /와 % 산술 연산자 응용
문제: 초 단위의 정수를 입력 받고, 몇 시간, 몇 분, 몇 초인지 구하여 출력하는 프로그램을 작성하라.

package chap02;

import java.util.Scanner;

public class ArithmeticOperator {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		
		System.out.println("정수를 입력하세요:");
		int time=scanner.nextInt(); //정수입력
		int second=time%60; //60으로 나눈 나머지는 초
		int minute=(time/60) % 60; //60으로 나눈 몫을 다시 60으로 나눈 나머지는 분
		int hour=(time/60)/60; //60으로 나눈 몫을 다시 60으로 나눈 몫은 시간
		
		System.out.print(time+"초는 ");
		System.out.print(hour+"시간, ");
		System.out.print(minute+"분, ");
		System.out.println(second+"초입니다.");
		scanner.close();
	}

}
//출력결과
정수를 입력하세요:4000
4000초는 1시간, 6분, 40초입니다.

 

예제 2-7 : 대입 연산자와 증감 연산자 사용하기
문제: 다음 코드의 실행 결과는 무엇인가?

package chap02;

public class AssignmentIncDecOperator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a=3, b=3,c=3;
		
		//대입 연산자 사례
		a+=3; //a=a+3 = 6
		b*=3; //b=b*3 = 9
		c%=2; //c=c%2=1
		System.out.println("a="+a+", b="+b+", c="+c);
		
		int d=3;
		// 증감 연산자 사례
		a=d++; //a=3,d=4
		System.out.println("a="+a+", d="+d);
		a=++d; //d=5, a=5
		System.out.println("a="+a+", d="+d);
		a=d--; //a=5, d=4
		System.out.println("a="+a+", d="+d);
		a=--d; //d=3, a=3
		System.out.println("a="+a+", d="+d);
	}

}
//출력결과
a=6, b=9, c=1
a=3, d=4
a=5, d=5
a=5, d=4
a=3, d=3

 

예제 2-8 : 비교 연산자와 논리 연산자 이용하기
문제: 다음 코드의 실행 결과는 무엇인가?

package chap02;

public class LogicalOperator {
//예제 2-8
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println('a'>'b');
		System.out.println(3>=2);
		System.out.println(-1<0);
		System.out.println(3.45 <= 2);
		System.out.println(3==2);
		System.out.println(3 !=2);
		System.out.println(!(3!=2));
		System.out.println((3>2)&&(3>4));
		System.out.println((3!=2)||(-1>0));
		System.out.println((3!=2)^(-1>0));
	}
}
//출력결과
false
true
true
false
false
true
false
false
true
true

 

예제 2-9 : 조건 연산자 사용하기
문제: 다음 코드의 실행 결과는 무엇인가?

package chap02;

public class TernaryOperator {
//예제 2-9
	public static void main(String[] args) {
		int a=3, b=5;
		System.out.println("두 수의 차는 "+((a>b)?(a-b):(b-a)));
	}

}
//출력결과
두 수의 차는 2

 

예제 2-10 : 비트연산자와 시프트 연산자 사용하기
생략

 

예제 2-11 : if-else 사용하기
문제: 나이를 입력받아 20대인지 판별하는 프로그램을 작성하라.

package chap02;

import java.util.Scanner;
//예제 2-11
public class Twenties {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		
		System.out.println("나이를 입력하시오:");
		int age=scanner.nextInt();
		if((age>=20)&&(age<30)) {
			System.out.print("20대입니다. ");
			System.out.println("20대라서 행복합니다!");
		}
		else 
			System.out.println("20대가 아닙니다.");
		
		scanner.close();
	}

}
//출력결과
나이를 입력하시오:23
20대입니다. 20대라서 행복합니다!

 

예제 2-12 : 다중 if-else를 이용하여 학점 매기기
문제: 다중 if-else문을 이용하여 입력받은 성적에 대해 학점을 부여하는 프로그램을 작성하라.

package chap02;

import java.util.Scanner;

public class Grading {

	public static void main(String[] args) {
		char grade;
		Scanner scanner=new Scanner(System.in);
		
		System.out.println("점수를 입력하세요(0~100):");
		int score=scanner.nextInt(); //점수 읽기
		if(score >= 90) //score가 90 이상
			grade='A';
		else if(score >= 80) //score가 80이상 90 미만
			grade='B';
		else if(score >=70) //score가 70이상 80미만
			grade='C';
		else if(score>=60) //score가 60이상 70미만
			grade='D';
		else //score가 60미만
			grade='F';
		
		System.out.println("학점은 "+grade+"입니다.");
		scanner.close();
	}

}
//출력결과
점수를 입력하세요(0~100):89
학점은 B 입니다.

 

예제 2-13 : 중첩 if-else문 사례

package chap02;

import java.util.Scanner;

public class Nestedlf {
//예제  13
	public static void main(String[] args) {
		Scanner scanner= new Scanner(System.in);
		
		System.out.println("점수를 입력하세요(0~100):");
		int score=scanner.nextInt();
		
		System.out.println("학년을 입력하세요(1~4):");
		int year=scanner.nextInt();
		
		if(score>=60) {
			if(year!=4)
				System.out.println("합격!"); //4학년 아니면 합격
			else if(score >= 70)
				System.out.println("합격!");
			else
				System.out.println("불합격!");
		}
		else
			System.out.println("불합격!");
		scanner.close();
	}

}
//출력결과
점수를 입력하세요(0~100):65
학년을 입력하세요(1~4):4
불합격!

 

예제 2-14 : switch문 사용하기
문제: 1~12 사이의 월을 입력받아 봄, 여름, 가을, 겨울을 판단하여 출력하라.

package chap02;

import java.util.Scanner;

public class Season {
//예제 2-14
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		
		System.out.println("월(1~12)을 입력하시오:");
		int month=scanner.nextInt(); //정수로 월 입력
		switch(month) {
			case 3:
			case 4:
			case 5:
				System.out.println("봄입니다.");
				break;
			case 6: case 7: case 8:
				System.out.println("여릉입니다.");
				break;
			case 9: case 10: case 11:
				System.out.println("가을입니다.");
				break;
			case 12: case 1: case 2:
				System.out.println("겨울입니다.");
				break;
			default:
				System.out.println("잘못된 입력입니다.");
		}
		scanner.close();
	}

}
//출력결과
월(1~12)을 입력하시오:3
봄입니다.