본문 바로가기
java/학교,기관

자바 기본 프로그래밍(프로그래밍 심화)(명품 JAVA Programming )

by 지트리아 2022. 10. 8.

용어정리

 

본문정리

자바 프로그램의 구조

클래스 만들기 : 클래스 안에 변수·상수·함수 등 모든 프로그램 요소를 작성, {}사이에 필드(변수), 메소드(함수) 코드를 작성, public이라는 자바의 접근지정자로서 다른 모든 클래스에서 해당 클래스를 사용하도록 선언함

주석문 : //, /**/가 있다(c랑 같은 듯)

main() 메소드 : main은 반드시 public·static·void 타입으로 선언되어야하며 main 메소드부터 실행을 시작한다. 한 클래스에 2개 이상의 main은 작성하면 안된다. 

메소드 : c언어와 같이 함수를 사용하면 된다.(그냥 함수를 메소드라 하는 듯?)

변수 선언 : 지역변수는 매소드 내에서만 사용되며, 메소드 실행이 끝나면 소멸된다.

문장 : 모든 문장은 ' ; '으로 끝나야 한다.

화면 출력 : System.out.println·print·printf 등을 사용하며,  ("문자열") ·(숫자)·(숫자*숫자)하면  출력된다. 

 

식별자

식별자 : 클래스, 변수, 상수, 메소드 등에 붙이는 이름이다.

특수 기호 중 _ $만 사용가능하다( 공백 불가)

한글 사용가능

 if, null 등 자바 키워드 사용불가

첫 번째 문자로는 숫자는 사용 불가

클래스 이름  : 첫 번째 문자는 대문자로 시작, 길면 각 단어의 첫 문자를 대문자로

변수, 메소드 이름 : 변수와 메소드 이름의 첫 단어는 소문자, 그후 첫 번째 문자만 대문자로

상수 이름 : 이름 전체를 대문자

 

자바의 데이터 타입

기본 타입 : boolean, char, byte, short, int, long, float, double

레퍼런스 타입 : 배열·클래스·인터페이스에 대한 레퍼런스, 포인터와 비슷한 개념(아니 없다며 포인터 없다며 이게 뭐시여)

정수 저장 : byte, short, int, long

실수 저장 : float, double

char 타입은 2바이트 (c에서 영어는 1바이트, 한글은 2바이트로 표현)(나머지는 같음)

문자열은 자바의 기본 타입에 속하지 않아서 string 클래스를 이용한다.

리터럴 : 프로그램에 직접 표현한 값(obo은 2진수)

자바에선 boolean에 숫자를 넣어서는 안된다.

var은 초깃값을 선언하기만 하면 자동으로 자료형을 정해준다.

상수는 초기화되면 더 이상 변경 불가하다.

자동 타입 변환은 작은 타입에서 큰 타입으로 변환되며, 강제 타입 변환은 ()로 지시해야한다.

 

자바에서 키 입력

System.in은 키보드 장치를 직접 제어하고 키 입력을 받는  표준 입력 스트림 객체 그러나 입력된 키를 단순히 바이트 정보로 응용프로그램에게 제공하므로 해당 프로그램은 받은 정보를 변환해야한다.

Scanner는 응용프로그램이 키 입력을 쉽게 받을 수 있도록 자바 패키지에서 제공하는 클래스이다.

사용하기전에 import java.util.Scanner;를 적어야하며 Scanner scanner = new Scanner(System.in)란 객체를 입력받아야 한다.

next() 다음 토큰을 문자열로 리턴
nextByte() 다음 토큰을 bye 타입으로 리턴
nextShort() 다음 토큰을 short 타입으로 리턴
nextInt() 다음 토큰을 int 타입으로 리턴
nextLong() 다음 토큰을 long 타입으로 리턴
nextFloat() 다음 토큰을 float 타입으로 리턴
nextDouble() 다음 토큰을 double 타입으로 리턴
nextBoolean() 다음 토큰을 boolean 타입으로 리턴
nextLine() '\n'을 포함하는 한 라인을 읽고 '\n'을 버린 나머지 문자열 리턴
close() Scanner의 사용 종료
hashNext() 현재 입력된 토큰이 있으면  true, 아니면 입력 때 까지 무한정 대기. 새로운 입력이 들어로 때 true 리턴, ctrl-z 키가 입력되면 입력 끝이므로 false 리턴

nextLine() : 공백이 낀 문자열을 받기 위해 사용, next는 "enter"를 입력을 받아도 아무런 행동을 안하지만 nextLine은 " "을 반환한다.

scanner.close(); : 객체의 사용을 종료할 때 이용한다.

scanner 객체가 닫히면 , System.in 도 함께 닫히므로 System.in을 사용하여 키 입력을 받을 수 없다.

 

연산

c언어랑 같다!

다만 printfln(3 >= 2); 면 true가 출력된다. 1, 즉 숫자가 아니라 true가 출력된다.

>>>> : 는 최상위 비트의 빈자를 항상 0으로 채운다. >> , << 는 최상위 비트로 채운다.

 

조건문

if(){} else if(){} else{}

 

switch(식) {

case 값1 :

break;

default:

break;

}

 

연습문제

p.62 Q1. 자바 클래스 바깥에 선언될 수 있는 것은?

 변수·상수·메소드·전역변수는 모두 사용 불가하다,

Q2. static void main( String[] args )에서 잘못 된것은?

 맨 앞에 public을 붙여야 한다.

Q3. 화면에 "Hi" 출력하는 클래스 Hi를 작성하라. 클래스 Hi와 main()을 작성해야 한다.

public class Hi {
	public static void main(String[] args) {
		System.out.print("Hi");
	}
}

 

p.65 Q1. 다음 중 옳은 변수 이름은?

 내변수, var$$, function

Q2. 다음 중 클래스 이름으로 가장 적합한 것은?

 MyDocument

Q3. 값 30을 가지는 정수 타입 상수 ALPHA를 선언하는 코드를 작성하라.

 final int ALPHA = 30;

 상수는 앞에 final을 붙인다.

 

p. 75 Q1. 자바의 기본 타입은?

 byte

 

Q2. 값이 365인 YEAR, 30인 MONTH, 7인 WEEK를 정수 타입 상수로 선언하라.

 final int YEAR = 365, final int MONTH = 30, final int WEEK = 7

 

Q3. 다음 중 byte 타입 변수에 대입할 수 없는 값은?

 256

 

Q4. 다음 중 기본 타입의 리터럴이 아닌 것은?

 "a"

 

Q5. 다음 수식의 결과 값은?(byte)(128+128) + (int) 22.9

 22

 

p. 80 Q1. Scanner 클래스를 사용하기 위해 필요한 import 문은 무엇인가?

 import java.util.Scanner;

 

Q2. Scanner를 이용하여 2개의 정수를 키보드로 입력받아 합을 출력하는 프로그램을 작성하라.

import java.util.Scanner;

public class add {
	public static void main(String[] args) {
		System.out.println("정수를 2개 입력하세요");
		Scanner scanner = new Scanner(System.in);
		
		int a = scanner.nextInt();
		int b = scanner.nextInt();
		
		System.out.printf("합은 %d 입니다.", a + b);		
	}
}

p. 93 Q1. 다음 문장을 수행한 후 z 값은?

int x = 2, y = 10, z= 0;

z = x++*2+--y-5+x*(y%2);

11

 

Q2. 다음 문장을 실행하면 화면에 출력되는 값은?

System.out.println(8>>2);System.out.println(-16>>2);

 

2-4

 

Q3. 다음 문장을 실해앟면 화면에 출력되는 값은?

int opr = 4;

System.out.println(opr++);

 

4

 

p. 105 Q1. 다음 문장에서 잘못된 곳은?

int i = 1;
if(i=0){
	System.out.print("0 입니다");
}

i = 0 인 곳이 i ==0으로 바뀌여야 한다.

 

Q2. 다음 코드의 실행 결과는 무엇인가? I가 6의 배수인 경우 "6의 배수"를, i가 홀수인 경우 "홀수"라고 출력하며, 그 외 경우는 아무것도 출력되지 않게 하고자 한다. 소스를 올바르게 수정하라.

int i = 4;
if(i%2==0)
	if(i%3==0)
    	System.out.println("6의 배수");
else
	System.out.println("홀수");
int i = 4;
if(i%2==0){
	if(i%3==0)
    	System.out.println("6의 배수");
	else
		System.out.println("");
    }
else
	System.out.println("홀수");

Q3. 너무 귀찮은 문제 패스...

 

Q4. 다음 리터럴 중에서 case 문의 값으로 사용할 수 없는 것은?

 실수형(문자, 문자열, 정수는 사용가능)

 

본문제

Q1. 자바에서 클래스를 선언할 때 사용하는 자바의 키워드는? 

 class

 

Q2. 다음은 10과 20을 더해 합을 출력하려고 작성한 자바 프로그램이지만 오류가 있다.

public class SampleProgram{
int i;
int j;
i = 10;
j = 20;
System.out.println(i+j);
}

오류는 public static void main(String [] args){}이 안들어가 있다.

저장하는 소스 파일 이름은 SampleProgram.java이며

컴파일하는 명령은 javac SampleProgram.java이고

실행 명령은 java SampleProgram 이다.

 

Q3. 다음 중 식별자 사용이 잘못된 경우를 골라라.

 int %j;,  double 1var;

 

Q4. 다음 각 항목이 나타내는 변수를 선언하라.

 int height;

 double size = 0.25;

 double total = height + size;

 char c = 'a';

 String name = "name";

 

Q6. 체온 값 36.5로 초기화된 상수 body Temp를 double형으로 선언하라.

 final double bodyTemp = 36.5;

 

Q7. 다음 각 항목의 코드에서 컴파일 오류를 수정하라.

 while(1) → while(true)

 

Q8. 다음 문장을 조건식으로 나타내라.

 age<=12; age<b&&age>c; age-5 == 10; age!=b || age ==c

 

Q9. 다음 조건문을 조건 연산자를 이용하여 한 문장으로 작성하라.

 sum = (sum > 100) ? 100 : 0;

 

Q10. 다음 조건문을 조건 연산자를 이용하여 한 문장으로 작성하라.

 System.out.println( (n > 5) ? n : 5); 

 

Q11. System.out.print(text);로 출력할 때 다음과 같이 출력되는 문자열 text는 무엇인가?

 문제 이해가 안된다.

 

Q12. 다음 출력문에 의해 출력되는 텍스트는 무엇인가.

 나는 "Java를 100%"사랑해

 

Q13. 다음 switch 문이 있을 때, 아래 1~4의 각 문항에 따라 출력되는 결과는?

 break 없을 때 발생하는 일을 설명하고 싶은 문제

 

Q14. 다음 if문을 switch 문으로 바꾸어라.

switch(in.equals){
	case "가위" :
    System.out.println(1);
    break;
    case "바위" :
    System.out.println(1);
    break;
    case "보" :
    System.out.println(1);
    break;
    default :
    System.out.println(0);
}

==는 주소값비교 equals는 저장되어 있는 값 비교

 

 

Q1. Scanner 클래스를 이용하여 원화를 입력받아 달러로 바꾸어 다음 예시와 같이 출력하는 프로그램을 작성하라. $1 = 1100원으로 가정하고 계산하라.

import java.util.Scanner;

public class wontodollar {
public static void main(String[] args) {
	Scanner scanner = new Scanner(System.in);
	
	System.out.print("원화를 입력하세요(단위 원)>>");
	float won = scanner.nextInt();
	
	float dollar = won / 1100;
	
	System.out.print(won + "원은 $" + dollar +"입니다.");	
	}	
}

 

Q2. Scanner 클래스를 이용하여 2자리의 정수(10~99사이)를 입력받고, 십의 자리와 1의 자리가 같은지 판별하여 출력하는 프로그램을 작성하라.

import java.util.Scanner;
public class Same {
public static void main(String[] args) {
	System.out.print("2자리수 정수 입력(10~99)>>");
	Scanner scanner = new Scanner(System.in);
	int a = scanner.nextInt();
	int b = a/10;
	a = a % 10;
	if(a == b) {
		System.out.print("Yes! 10의 자리와 1의 자리가 같습니다.");
	}
	else {
		System.out.print("No! 10의 자리와 1의 자리가 다릅니다.");		
	}	
}
}

 

Q3. Scanner 클래스를 이용하여 정수로 된 돈의 액수를 입력받아 오만원권, 만원권, 천원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전 각 몇 개로 변환되는지 출력하라.

import java.util.Scanner;
public class bills {
public static void main(String[] args) {
	System.out.print("금액을 입력하시오>>");
	Scanner scanner = new Scanner(System.in);
	int a = scanner.nextInt();
	System.out.println("오만원권 " + a / 50000 + "매 ");
	a = a % 50000;
	System.out.println("만원권 " + a / 10000 + "매 ");
	a = a % 10000;
	System.out.println("천원권 " + a / 1000 + "매 ");
	a = a % 1000;
	System.out.println("500원 " + a / 500 + "개 ");
	a = a % 500;
	System.out.println("100원 " + a / 100 + "개 ");
	a = a % 100;
	System.out.println("50원 " + a / 50 + "개 ");
	a = a % 50;
	System.out.println("10원 " + a / 10 + "개 ");
	a = a % 10;
	System.out.println("1원 " + a / 1 + "개 ");
	a = a % 1;	
}
}

 

Q4. Scanner 클래스로 정수 3개를 입력받고 3개의 숫자 중 중간 크기의 수를 출력하라.

import java.util.Scanner;
public class middle {
public static void main(String[] args) {
	Scanner scanner = new Scanner(System.in);
	int a = scanner.nextInt();
	int b = scanner.nextInt();
	int c = scanner.nextInt();	
	
	 if((a < b && b < c) || (c < b && b < a)) {
         System.out.print("중간 값은 "+b);
      }
      else if ((b < a && a < c)  || (c < a && a < b)) {
         System.out.print("중간 값은 "+a);
      }
      else {
         System.out.print("중간 값은 "+c);
      }
	
	
	scanner.close();
}
}

Q5. Scanner를 이용하여 삼각형의 변의 길이를 나타내는 정수를 3개 입력받고 이 3개의 수로 삼각형을 만들수 있는지 판변하라. 삼각형이 되려면 두 변의 합이 다른 한 변의 합보다 커야 한다.

package hellojava;
import java.util.Scanner;
public class oktriangle {
public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("정수 3개를 입력하시오>>");
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		
		if(a<=0 || b <= 00 || c <= 00 ) {
			System.out.print("변의 길이는 0 초과 해야합니다");
		}
		else if(a>b && a>c) {
			if(a<b+c)
			System.out.print("삼각형이 됩니다");	
			}
		else if(b>a && b>c) {
			if(b<a+c)
			System.out.print("삼각형이 됩니다");	
			}	
		else if(c>b && c>a) {
			if(c<a+b)
			System.out.print("삼각형이 됩니다");	
			}	
		else {
			System.out.print("삼각형이 되지 않습니다.");			
		}
}	
}

 

Q6. 369게임을 간단히 작성해보자. 1~99까지의 정수를 입력받고 정수에 3, 6, 9 중 하나가 있는 경우는 "박수짝"을 출력하고 두 개 있는 경우는 "박수짝짝"을 출력하는 프로그램을 작성하라. 예를 들면, 키보드로 입력된 수가 13인 경우 "박수짝"을, 36인 경우"박수짝짝"을 출력하면 된다.

import java.util.Scanner;
public class 369game {
public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("1~99 사이의 정수를 입력하시오>>");
		int a = sc.nextInt();
		if(a/10 == 3 || a/10 == 6 ||a/10 == 9) {
			System.out.print("박수짝");
			if(a%10 == 3 || a%10 == 6 ||a%10 == 9)
				System.out.print("짝");
		}
		else if(a%10 == 3 || a%10 == 6 ||a%10 == 9) {
			System.out.print("박수짝");
			if(a/10 == 3 || a/10 == 6 ||a/10 == 9)
			System.out.print("짝");
		}		
}	
}

 

Q7. 2차원 평면에서 직사각형은 왼쪽 상단 모서리와 오른쪽 하단 모서리의 두 점으로 표현한다. (100, 100)과 (200, 200)의 두 점으로 이루어진 사각형이 있을 때, Scanner를 이용하여 정수 x와 y 값을 입력받고 점 (x, y)가 이 직사각형 안에 있는지를 판별하는 프로그램을 작성하라.

import java.util.Scanner;
public class findxy {
public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("점 (x,y)의 좌표를 입력하시오>>");
		int a = sc.nextInt();
		int b = sc.nextInt();
		
		if(a>=100&&a<=200) {
			if(b>=100&&b<=200)
				System.out.print("(" + a +","+b+")는 사각형 안에 있습니다.");
		}			
}	
}

 

Q8. 2차원 평면에서 직사각형은 문제 7번처럼 두 점으로 표현된다. 키보드로부터 직사각형을 구성하는 두 점(x1, y1),, (x2, y2)를 입력받아 (100, 100), (200, 200)의 두 점으로 이루어진 직사각형과 충돌하는지 판별하는 프로그램을 작성하라.

import java.util.Scanner;

public class checkcheck {
	public static boolean inRect(int x, int y, int rectx1, int recty1, int rectx2, int recty2) {
		if((x >= rectx1 && x <= rectx2) && (y >= recty1 && y <= recty2))
			return true;
		else return false;
		
	}
	
public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	System.out.print("값을 입력하세요>>");
	int x1 = sc.nextInt();
	int y1 = sc.nextInt();
	int x2 = sc.nextInt();
	int y2 = sc.nextInt();
	
	
	boolean k = inRect(x1, y1, 100, 100, 200, 200);
	if(k == false)
		k = inRect(x2, y2, 100, 100, 200, 200);
	
	if(k == true)
		System.out.print("사각형과 충돌한다");
	else
		System.out.print("충돌하지 않는다");
}	
}

 

Q9. 원의 중심을 나타내는 한 점과 반지름을 실수 값으로 입력받아라. 그리고 실수 값으로 다른 점(x, y)를 입력받아 이 점이 원의 내부에 있는지 판별하여 출력하라.

package hellojava;
import java.util.Scanner;

public class circlefind {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("원의 중심과 반지름 입력>>");
		double x1 = sc.nextDouble();
		double y1 = sc.nextDouble();
		double r = sc.nextDouble();
		System.out.print("점 입력>>");
		double x2 = sc.nextDouble();
		double y2 = sc.nextDouble();
		
		double x = x1 - x2;
		double y = y1 - y2;
		
		double k = Math.sqrt(x*x + y*y);
		
		if(r>=k)
			System.out.print("점 ("+ x2 + ", " + y2 + ")는 원 안에 있다.");
		else
		System.out.print("점 ("+ x2 + ", " + y2 + ")는 원 안에 없다.");
	}
}

 

Q10. 원의 정보를 받기 위해 키보드로부터 원의 중심을 나타내는 한 점과 반지름을 입력받는다. 두 개의 원을 입력받고 두 원이 서로 겹치는지 판단하여 출력하라.

package chechcircle;
import java.util.Scanner;

public class checkcircle {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫번째 원의 중심과 반지름 입력>>");
		double x1 = sc.nextDouble();
		double y1 = sc.nextDouble();
		double r1 = sc.nextDouble();
		System.out.print("두번째 원의 중심과 반지름 입력>>");
		double x2 = sc.nextDouble();
		double y2 = sc.nextDouble();
		double r2 = sc.nextDouble();
		double r;
		
		double x = x2 - x1;
		double y = y2 - y1;
		
		r = r1 + r2;
		
		if( r >= Math.sqrt(x*x+y*y))
			System.out.print("두 원은 서로 겹친다.");
		else
			System.out.print("두 원은 겹치지 않는다.");
	}
}

 

Q11.  숫자를 입력받아 3~5는 "봄", 6~8은 "여름", 9~11은 "가을", 12,1,2의 경우는 "겨울"을, 그 외 숫자를 입력한 경우 "잘못입력"을 출력하는 프로그램을 작성하라.

1) if -else를 이용한 경우

package findmonth;
import java.util.Scanner;

public class checkmonth {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("달을 입력하세요(1~12)>>");
		
		int a = sc.nextInt();
		
		if(a>=3&&a<=5)
			System.out.print("봄");
		else if(a>=6&&a<=8)
			System.out.print("여름");
		else if(a>=9&&a<=11)
			System.out.print("가을");
		else
			System.out.print("겨율");		
	}
}

 

2) switch 문을 이용한 경우

package findmonth;
import java.util.Scanner;
public class findmonth {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("달을 입력하세요(1~12)>>");
		
		int a = sc.nextInt();
		
		switch(a) {
		case 3:
		case 4:
		case 5:
			System.out.print("봄");
			break;
		case 6:
		case 7:
		case 8:
			System.out.print("여름");
			break;
		case 9:
		case 10:
		case 11:
			System.out.print("가을");
			break;
		case 12:
		case 1:
		case 2:
			System.out.print("겨울");
			break;
		}	
	}
}

 

Q12. 사칙 연산을 입력받아 계싼하는 프로그램을 작성하고자 한다. 연산자는 +, =(오타겠지? - 일거야) , *, /의 네 가지로 하고 피연산자는 모두 실수로 한다. 피연사자와 연산자는 실행 사례와 같이 빈 칸으로 분리하여 입력한다. 0으로 나누기 시 "0으로 나눌 수 없습니다,"를 출력하고 종료한다.

1) if -else를 이용한 경우

package calc;
import java.util.Scanner;
public class calc {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("연산>>");
		double a = sc.nextDouble();
		String k = sc.next();
		double b = sc.nextDouble();
		double result;
		
		if(k.equals("+")) {
			result = a + b;
			System.out.print(a + k + b + "의 계산 결과는 " + result);}
		else if(k.equals("-")) {
			result = a - b;
			System.out.print(a + k + b + "의 계산 결과는 " + result);}
		else if(k.equals("*")) {
			result = a *b ;
			System.out.print(a + k + b + "의 계산 결과는 " + result);}
		else if(k.equals("/")) {
			if(b == 0)
				System.out.print("0으로 나눌 수 없습니다.");
			else {
			result = a / b;
			System.out.print(a + k + b + "의 계산 결과는 " + result);}
            }
	}
}

 

2) switch 문을 이용한 경우

package calc;
import java.util.Scanner;
public class calc {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("연산>>");
		double a = sc.nextDouble();
		String k = sc.next();
		double b = sc.nextDouble();
		double result;
		
		switch(k) {
		case "+":
			result = a + b;
			System.out.print(a + k + b + "의 계산 결과는 " + result);
			break;
		case "-":
			result = a - b;
			System.out.print(a + k + b + "의 계산 결과는 " + result);
			break;
		case "*":
			result = a * b;
			System.out.print(a + k + b + "의 계산 결과는 " + result);
			break;
		case "/":
			if(b == 0)
				System.out.print("0으로 나눌 수 없습니다.");
			else {
			result = a / b;
			System.out.print(a + k + b + "의 계산 결과는 " + result);
			break;
			}
		}
	}
}

 

틀린 경우 제발 댓글 달아주세요!!

댓글