용어정리
본문정리
자바 프로그램의 구조
클래스 만들기 : 클래스 안에 변수·상수·함수 등 모든 프로그램 요소를 작성, {}사이에 필드(변수), 메소드(함수) 코드를 작성, 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;
}
}
}
}
틀린 경우 제발 댓글 달아주세요!!
'java > 학교,기관' 카테고리의 다른 글
모듈과 패키지 개념, 자바 기본 패키지(프로그래밍 심화)(명품 JAVA Programming ) (0) | 2022.11.10 |
---|---|
상속(프로그래밍 심화)(명품 JAVA Programming ) (0) | 2022.10.22 |
클래스와 객체(프로그래밍 심화)(명품 JAVA Programming ) (0) | 2022.10.17 |
반복문과 배열 그리고 예외 처리(프로그래밍 심화)(명품 JAVA Programming ) (0) | 2022.10.09 |
자바 시작(프로그래밍 심화)(명품 JAVA Programming ) (0) | 2022.10.03 |
댓글