01. 자바 프로그램 기본구조
0. Hello, world!
Main프로젝트와 main 패키지, Main.java 파일을 만듭니다.
package main;
public class Main {
public static void main (String[] args) {
/*
* 메인 메소드 내부
*/
System.out.println("안녕!");
System.out.println("안녕"+"!");
String hello ="안녕!";
System.out.println(hello);
}
}
package main;은 위의 폴더를 가리킵니다.
또, public class Main의 Main은 Main.java를 가리킵니다. 반드시 .java 파일과 같은 이름을 가지고 있어야 합니다.
화면에 문자를 출력할때는 System.out.println(문자열)을 사용합니다. 여기서 println은 print in line의 뜻으로 자바에서 출력을 할 때는 println외에 다른 명령어도 사용됩니다.
주석은 c++과 동일하게 한줄 주석은 //주석내용, 여러 줄 주석은 /*주석내용*/입니다. 자바에는 문서주석이라는 것도 있습니다.
1. 자바 프로그램의 기본 구조
자바 프로그램은 소스 파일 안에 클래스, 메서드, 실행문이 있는 모습을 하고 있습니다. 여기서 클래스는 코드를 캡슐화하는 단위이고, 메서드는 함수, 실행문은 작업을 지시하는 변수 선언, 값 저장, 메서드 호출 등의 코드를 말합니다. 위에서 살펴본 hello, world 코드에서는 클래스 이름이 Main이고 메서드로는 main함수, 실행문으로는 println이 있습니다.
자바의 소스 파일 이름은 클래스 이름과 같습니다.
2. 식별자
프로그램에서 사용하는 변수, 메서드, 클래스, 상수 등은 이름으로 구분하는 데 이 이름을 식별자(identifier)라고 합니다. 식별자를 작성할 때는 다음 규칙을 따라야 합니다.
자바 식별자 규칙 ▼
① 문자, 언더바(_), $로 시작해야 한다.
② +,- 등 연산자를 포함하면 안된다.
③ 한글도 가능하며 길이 제한이 없다.
④ 자바 키워드를 사용하면 안된다.
자바 키워드 ▼
자바 식별자 관례 ▼
① 변수, 메서드는 모두 소문자로 표기합니다. 복합단어 일 경우 띄어쓰기 다음 문자를 대문자로 씁니다.
② 사용자 정의 자료형인 클래스와, 인터페이스는 첫 자만 대문자로 표기합니다. 복합단어 일 경우 띄어쓰기 다음 문자를 대문자로 씁니다.
③ 상수는 전체를 대문자로 표기하고 복합단어일 경우, 언더바로 연결합니다.
3. 데이터 타입과 변수
1) 변수
자바에서 변수를 저장할 때에는 "데이터_타입 변수이름;" 꼴로 저장합니다. 그러므로 자바에 무슨 데이터 타입이 있는지를 알아야 변수를 사용할 수 있습니다.
2) 데이터 타입과 리터럴
변수는 선언함과 동시에 초기화할 수 있습니다. 이때 초기화에 쓰이는 값(value)를 리터럴(literal)이라고 합니다. 리터럴에는 정수, 실수, 문자, 논리 리터럴과, 참조타입의 문자열 리터럴, null이 있습니다.
① 정수
// 10진수 기본
int fifteen =15;
// long type은 뒤에 L이나 l을 붙여야 한다.
long lightspeed = 300000L;
// 2진수 0b로 시작
byte fifteen = 0b1111;
//8진수 0으로 시작
short fifteen = 017;
//16진수 0x로 시작
int fifteen = 0xF;
② 실수
//실수는 double이 기본
double half =0.5;
//float type은 반드시 F를 붙여야 한다.
float pi = 3.141592F;
double half = 5E-1 //5*10^-1
실수 추가 예제 ▼
package main;
public class Main {
public static void main(String[] args) {
int mach;
int distance;
mach = 340;
distance = mach * 60 * 60;
System.out.println("소리가 1시간 동안 가는 거리 : " + distance + "m");
double radius;
double area;
radius = 10.0;
area = radius * radius * 3.14;
System.out.println("반지름이 " + radius + "인 원의 넓이 : " + area);
}
}
③ 문자
문자에 문자열 " "를 쓰면 오류가 발생한다.
// 기본 문자
char c = 'A';
// 문자열
String c ="A";
//오류
char c ="A";
// 유니코드
char c = '\u0041';
④ 논리
파이썬에서는 0외의 모든 리터럴을 True로 보지만 자바에는 true와 false 중 하나를 대입해야 합니다. 1같은 것을 대입하면 안됩니다.
// true or false
boolean condition = true;
추가 예제 ▼
문자 자료형은 일종의 숫자형으로 생각할 수 있습니다.
package main;
public class Main {
public static void main(String[] args) {
char ga1 = '가';
char ga2 = '\uac00';
boolean cham = true;
boolean geojit = false;
System.out.println(ga1);
System.out.println((int)ga1);
System.out.println(ga2);
System.out.println(++ga2);
System.out.println(cham + "가 아니면 " + geojit + "입니다.");
}
}
/*출력
가
44032
가
각
true가 아니면 false입니다.
*/
3) 변수 사용
변수는 선언과 동시에 초기화 할 수도 있고 ,로 연결해 한번에 여러 개의 변수를 선언할 수도 있습니다.
int weight = 50;
double x,y,z;
4) 예약어 var
var은 JVM의 컴파일러가 입력된 리터럴을 보고 알아서 자료형을 추론해 메모리 공간을 준비해주는 키워드입니다. 따라서 리터럴이 없으면 오류가 발생합니다. 자바 10부터 추가되었고 불명확하기 때문에 많이 사용하지 않습니다.
var 추가 예제 ▼
package main;
public class Main {
// var a = 1;
public static void main(String[] args) {
int var = 1;
var x = 1;
// var x = 1, y = 3, z = 4; //var로 다수의 변수를 초기화 할수 없다.
// var str = null; //var에 null을 집어넣을 수 없다
// var oops; // var 변수는 선언과 동시에 초기화 해야 한다.
// oops = 1;
}
// void test(var x) { } // var 변수는 선언과 동시에 초기화 해야 한다.
}
5) 상수
프로그램 실행 중 변경되면 안되는 데이터를 상수로 저장합니다. 원주율이나 빛의 속도 등 변하지 않는 값을 상수로 저장합니다. 선언과 동시에 초기화하거나 선언 후 초기화할 수 있습니다. 하지만 초기화를 하지 않고 선언만 하면 오류가 발생합니다.
final 자료형 변수이름
final double PI = 3.141592;
6) 타입 변환(type cast)
① 자동 타입 변환
자바에서는 자동으로 타입을 변환해주는 경우가 있습니다. 문자 리터럴과 선언시 적힌 자료형이 다를 때, 내부에서 타입을 변환해줍니다. 육안으로 보이지 않기 때문에 연산에서 이에 따른 문제가 생기는 경우가 왕왕 있습니다. 하지만 연산 중 필요하면 더 넓은 타입 범위로 자동 타입 변환이 되기 때문에 편리하다는 장점도 있습니다.
②강제 타입 전환
강제 타입 캐스트 시 바꾸려는 타입보다 리터럴이 크다면 데이터 손실이 발생합니다. 이를 주의해서 사용해야 합니다.
-타입 캐스트를 할 때, 범위를 체크하는데에 타입.MIN_VALUE와 MAX_VALUE를 이용하면 데이터 손실을 미리 점검할 수 있습니다.
타입 변환 추가 예제 ▼
정수/정수 는 결과값에 소수 표현이 안됩니다. double 형의 변수에 결과값을 저장하여도 정수 연산 한후 실수로 저장되는 것이기 때문에 .0만 붙습니다. 정말 제대로 계산하고 싶다면 double형으로 나누어주어야 합니다.
package main;
public class Main {
public static void main(String[] args) {
int i;
double d;
byte b;
i = 7 / 4;
System.out.println(i);
d = 7 / 4;
System.out.println(d);
d = 7 / (double) 4;
System.out.println(d);
// i = 7 / (double) 4;
i = 300;
if (i < Byte.MIN_VALUE || i > Byte.MAX_VALUE)
System.out.println("byte 타입으로 변환할 수 없습니다.");
else
b = (byte) i;
}
}
/*
1
1.0
1.75
byte 타입으로 변환할 수 없습니다.
*/
4. 자바의 기본 입출력
1) 데이터 출력
System.out.프린트; 에서 아래의 함수들을 이용한다.
① println() : 내부의 내용을 출력한 후 행을 바꾼다.(개행문자 \n이 자동으로 추가되는 파이썬의 print()를 생각하면 편하다.)
② print() : 내부의 내용을 출력한 후 행을 바꾸지 않는다.
③ printf() : 내무의 내용을 지정된 포맷을 사용해 출력한다. (c++과 거의 동일하게 사용한다.)
package main;
public class Main {
public static void main (String[] args) {
/*
* 메인 메소드 내부
*/
int x = 5;
double PI = 3.141592;
System.out.printf("x = %d and pi = %f\n", x,PI);
}
}
//출력
//x = 5 and pi = 3.141592
package main;
public class Main {
public static void main(String[] args) {
int i = 97;
String s = "Java";
double f = 3.14f;
System.out.printf("%d\n", i);
System.out.printf("%o\n", i);
System.out.printf("%x\n", i);
System.out.printf("%c\n", i);
System.out.printf("%5d\n", i);
System.out.printf("%05d\n", i);
System.out.printf("%s\n", s);
System.out.printf("%5s\n", s);
System.out.printf("%-5s\n", s);
System.out.printf("%f\n", f);
System.out.printf("%e\n", f);
System.out.printf("%4.1f\n", f);
System.out.printf("%04.1f\n", f);
System.out.printf("%-4.1f\n", f);
}
}
/*출력
97
141
61
a
97
00097
Java
Java
Java
3.140000
3.140000e+00
3.1
03.1
3.1
*/
2) 데이터 입력
import java.util.Scanner;
Scanner in = new Scanner(System.in);
int x = in.nextInt();
입력 추가 예제▼
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x = in.nextInt();
int y = in.nextInt();
System.out.printf("%d * %d은 %d입니다.\n", x, y, x * y);
}
}
//입력
/*
10
20
*/
//출력
//10 * 20은 200입니다.
5. 연산자
1) 연산자와 연산식 개념
프로그램에서 주어진 데이터를 계산해 결과를 얻어 내는 과정을 연산(operation)이라고하고 +,-,++,>>,/,%, >=등의 기호를 연산자라고 합니다. 연산되는 데이터 x, y, z를 피연산자(operand)라고 하고 피연산자와 연산자의 조합을 연산식(expression)이라고 합니다.
연산식 추가 예제 ▼
JVM은 기본적으로 32비트(4byte) 단위로 계산하기 때문에 b1+ b2는 int 형이 되어 오류가 발생합니다. 자바에서 연산을 할 때에는 항상 메모리 크기를 주의하도록 합시다.
byte b1 = 1;
byte b2 = 2;
byt2 b3 = b1 + b2; //오류
2) 산술 연산자
산술 연산에서 가장 오류가 많이 납니다. 그렇기 때문에 산술 연산을 할 때에는 다음 세 가지를 주의하도록 합시다.
① 두 피연산자의 데이터 타입이 다르면 큰 범위의 타입으로 일치시킨 후 연산이 수행된다.
② 논리 타입을 제외한 모든 타입은 연산이 가능합니다. (문자열도 합치기 연산이 가능)
③ 문자열과 다른 타입의 데이터를 덧셈 연산자로 더하면 문자열과 덧셈을 하는 데이터는 문자열로 변환한 뒤 서로 연결된다.
산술 연산자를 통해 짝수, 홀수를 여부를 판단하거나 일의 자리수, 십의 자리수 등을 추출할 수 있습니다.
산술연산자 추가 예제 ▼
package main;
public class Main {
public static void main(String[] args) {
int remainder = 25 % 2;
System.out.println("25 % 2의 나머지는 "+remainder+"입니다.");
}
}
//출력
//25 % 2의 나머지는 1입니다.
3) 비교 연산자
비교 연산자는 2개의 피연산자를 비료해 결과값으로 true나 false를 되돌려 줍니다. 비교연산자는 논리타입을 제외한 기초타입에만 사용할 수 있지만 ==와 !=는 모든 기초타입에서 사용할 수 있습니다.
4) 논리 연산자
논리 연산에서는 Early termination(short circuit evaluation)을 항상 기억하고 있어야 합니다. 아래의 x < 1 || y-- <1 같은 논리 연산식은 x가 이미 1보다 작기 때문에 x<1에서 연산이 종료됩니다. 그러므로 y-- 가 계산되지 않아 y는 0이 되지 않고 1입니다. ||의 short circuit에서는 참을 주의하여야 하고 &&의 short circuit에서는 거짓을 주의해야 합니다.
&, | 같은 비트 연산자를 이용하면 long circuit이 되어 무조건 뒤에 연산까지 진행하게 됩니다.
논리 연산자 추가 예제 ▼
package main;
public class Main {
public static void main(String[] args) {
int x = 0, y = 1;
System.out.println((x < 1) || (y-- < 1));
System.out.println("x = " + x + ", y = " + y);
x = 0;
y = 1;
System.out.println((x < 1) | (y-- < 1));
System.out.println("x = " + x + ", y = " + y);
}
}
true
x = 0, y = 1
true
x = 0, y = 0
5) 비트 연산자
6) 시프트 연산
왼쪽 시프트 연산, a<<b는 a의 모든 비트를 왼쪽으로 b만큼 이동하고 이동한 만큼 빈 오른쪽 비트를 0으로 채웁니다.
오른쪽 시프트 연산은 두 가지가 있습니다. 산술적 오른쪽 시프트 연산(arithmetic right shift) a >> b는 a의 모든 비트를 오른쪽으로 b비트 만큼 이동하고 이동할때마다 최상위 비트와 동일한 비트로 채웁니다. arithemetic right shift를 사용하면 나눗셈 효과가 나타납니다.
논리적 오른쪽 시프트(logical right shift) 연산 a>>>b는 이동한 만큼 왼쪽 비트를 0으로 채웁니다. 음수 양수가 바뀔 수 있습니다.
비트, 시프트 연산자 추가 예제 ▼
package main;
public class Main {
public static void main(String[] args) {
System.out.printf("%x\n", 0b0101 & 0b0011);
System.out.printf("%x\n", 0b0101 | 0b0011);
System.out.printf("%x\n", 0b0101 ^ 0b0011);
System.out.printf("%x\n", (byte) ~0b00000001);
System.out.printf("%x\n", 0b0110 >> 2);
System.out.printf("%x\n", 0b0110 << 2);
int i1 = -10;
int i2 = i1 >> 1;
int i3 = i1 >>> 1;
System.out.printf("%x -> %d\n", i1, i1);
System.out.printf("%x -> %d\n", i2, i2);
System.out.printf("%x -> %d\n", i3, i3);
}
}
7) 대입 연산자, 부호연산자, 증감연산자
자바는 복합 대입연산자와 부호 연산자, 증감 연산자를 제공합니다.
복합 대입 연산자 추가 예제 ▼
package main;
public class Main {
public static void main(String[] args) {
int value =1;
value += 1;
System.out.println("값 = "+value);
value -= 1;
System.out.println("값 = "+value);
value <<=3;
System.out.println("값 = "+value);
value %=3;
System.out.println("값 = "+value);
}
}
/*출력
값 = 2
값 = 1
값 = 8
값 = 2
*/
package main;
public class Main {
public static void main(String[] args) {
int plusOne = 1;
int minusOne = -plusOne;
System.out.println("plusOne은 " + plusOne + "입니다.");
System.out.println("minusOne은 " + minusOne + "입니다.");
int x = 1, y = 1;
System.out.println("x = " + x + ", ++x = " + ++x);
System.out.println("y = " + y + ", y++ = " + y++);
System.out.println("x = " + x + ", y = " + y);
}
}
/*
plusOne은 1입니다.
minusOne은 -1입니다.
x = 1, ++x = 2
y = 1, y++ = 1
x = 2, y = 2
*/
8) 조건 연산자
형식으로 if(x==1) y=10;else y =20;를 y = (x == 1) ? 10 : 20;한줄로 만들수 있기 때문에 간결하다는 장점이 있습니다.
package main;
public class Main {
public static void main(String[] args) {
int x = 1;
int y;
y = (x == 1) ? 10 : 20;
System.out.println(y);
y = (x > 1) ? x++ : x + 20;
System.out.println(x);
System.out.println(y);
}
}
/*출력
10
1
21
*/
9) 연산자 우선순위와 결합규칙
연산 순위와 결합규칙 추가 예제 ▼
package main;
public class Main {
public static void main(String[] args) {
int x =5;
int y=10;
int z = ++x * y--;
System.out.printf("%d\t%d\t%d\n", x,y,z);
int year =2020;
System.out.println(year%4==0 && year %100 !=0||year %400==0);
}
}
/* 출력
6 9 60
true
*/
6. 셀프 테스트
2-1)
1. 여러 행의 실행문을 주석으로 처리하기에 가장 적절한 것은?
① // ② /*와 */ ③ @ ④ /** 와 */
2. 다음 중 식별자로 적절하지 않은 것을 모두 고르시오.
① 2times ② if ③ name ④ $ ⑤ 이름
3. 개발자가 덧붙인 프로그램 설명은 __이다.
4. 모든 실행문은 __ 으로 끝난다.
1. ②
2. ① ②
3. 주석
4. 세미콜론(;)
2-2)
1. 프로그램에서 직접 입력한 값을 __이라고 한다.
2. 동일한 타입의 변수라면 쉼표(,)로 연결해 선언할 수 있다.
3. char는 정수타입의 일종이 아니다.
4. 논리 타입 변수에 1을 대입할 수 있다.
5. '가'는 문자 리터럴이다.
6. System.out.println(6/2.0)의 실행 결과는?
1. 리터럴
2. O
3. X
4. X
5. O
6. 3.0
2.3)
1. printf() 메서도에서 정숫값을 16진수로 출력하려면 __라는 포맷을 사용해야 한다.
2. 줄 바꿈을 하기 전까지의 문자열을 입력 받으려고 Scanner 클래스가 제공하는 메서드는?
① next() ② nextLine() ③ nextByte() ④ nextString()
1. %x
2. ②
2.4)
1. System.out.println(5 > 3 ? "true" : "false")의 실행 결과는?
2. 정수 변수 a가 3으로 초기화되어 있다. a *= a+1의 실행 결과는?
3. 정수 변수 a 가 3으로 초기화되어 있다. System.out.println(a++)의 실행 결과는?
4. 다음 실행문에서 연산자의 우선 순위를 정하시오.
a = b = c + d / 3*5;
1. true
2. 12
3. 3
4. / , *, +, 두번 째 =, 첫번째 =
7. 도전과제
직사각형의 가로와 세로를 입력받아 넓이를 출력하는 문제 ▼
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
double w, h,area;
Scanner in = new Scanner(System.in);
System.out.print("직사각형의 가로 길이를 입력하세요 : ");
w = in.nextDouble();
System.out.print("직사각형의 세로 길이를 입력하세요 : ");
h = in.nextDouble();
area = w*h;
System.out.println("직사각형의 넓이는 "+area+ "입니다.");
}
}
/*입력
2.2
10.0
*/
/*출력
직사각형의 가로 길이를 입력하세요 : 2.2
직사각형의 세로 길이를 입력하세요 : 10.0
직사각형의 넓이는 22.0입니다.
*/
입력된 정수가 짝수인지 홀수인지 판단하는 문제 ▼
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
Scanner in = new Scanner(System.in);
System.out.print("정수를 입력하세요 : ");
n = in.nextInt();
if (n %2==0) {
System.out.println("짝수");
}
else {
System.out.println("홀수");
}
}
}
//입력
//20
//출력
//짝수
8. 연습문제
1. 변수 이름으로 사용할 수 있는 것을 모두 골라라.
① byte
② batman_1
③ doublePlus
④ $value
⑤ _name
⑥ 2nd
2. && 는 AND 연산자로 비트연산을 하는데 사용된다. (O, X)
3. byte 타입의 연산 결과는 항상 byte 타입이다. (O, X)
4. x> y 가 true 이거나 a <b 가 true라면, x>y && a<b도 true이다. (O, X)
5. var 예약어로 선언된 메서드 내부의 변수는 초깃값을 통하여 데이터 타입을 추론할 수 있다. (O, X)
6. hello와 HeLLO는 동일한 변수다. (O, X)
7. byte 타입 변수에 300을 대입할 수 있다. (O, X)
8. 모듈로 연산자(%)는 double 타입도 사용할 수 있다. (O, X)
9. 모든 자바 애플리케이션은 __메서드에서 실행을 시작한다.
10. 모든 자바 실행문은___으로 끝난다.
11. __ 는 행 주석의 시작을 나타낸다.
12. 다음은 자바의 기본 데이터 타입을 나타내는 표이다. 빈칸에 적절한 타입은? (단, 적절한 타입이 없을 때는 n/a로 표시하시오.
종류 | 정수 | 실수 | 논리 |
1바이트 | |||
2바이트 | |||
4바이트 | |||
8바이트 |
13. 다음 실행문 중 잘못된 것을 모두 고르시오.
① long x = 100;
② char c = "a";
③ float f = 100.0;
④ double d = (double) 100;
⑤ byte b= 300;
14. 다음 코드의 실행 결과는?
int x=1, y=2;
System.out.println(x++);
System.out.println(++x + y--);
System.out.println(++x / 3 + x * ++y);
15. 다음 코드의 실행 결과는?
int x=100;
System.out.println(x + "부터 " + 200);
System.out.println(x + 100 + "년 전");
System.out.println("200" + "100" + "어이쿠");
16. 다음 코드의 실행 결과는?
int i1= 0x11, i2=5;
final int ONE =1;
char c1 = 'a';
float f1 = 1.5f;
double d1 = 2.8;
boolean b1 = true;
System.out.printf("i1 = %d\n",i1);
System.out.printf("i1/2 = %d\n",i1/2);
System.out.println("c1 + ONE = " +c1 +ONE);
System.out.println("(int)c1 + ONE = " +(int)c1 + ONE);
System.out.printf("(c1 + ONE) = %d\n",c1+ONE);
System.out.printf("(c1 + ONE) = %c\n",c1+ONE);
System.out.printf("(c1 + ONE) = %5s\n",c1+ONE);
System.out.printf("i2 + f1 = %f\n",i2+f1);
System.out.printf("f1 + d1 = %f\n",f1+d1);
System.out.printf("(int)(f1 + d1) = %d\n",(int)(f1+d1));
System.out.printf("(int)f1 + (int)d1 = %d\n",(int)f1+(int)d1);
System.out.println("b1 = " +b1);
17. 각 타입별 변환 가능 여부와 가능하다면 그 변환 결과를 답하라. 문자 a의 정숫값은 97이다.
① float f = 3.14f;
int i = (int)f;
② int i = 100;
char c = (char)i;
③ int i = 1;
boolean b = (boolean)i;
1. ② ③④⑤
2. X
3. X
4. X, &&는 둘다 참이어야 한다.
5. O
6. X
7. X, byte의 범위는 -128~ 127이다.
8. O
9. main()
10. 세미콜론 (;)
11. //
12.
종류 | 정수 | 실수 | 논리 |
1바이트 | byte | n/a | boolean |
2바이트 | short | n/a | n/a |
4바이트 | int | float | n/a |
8바이트 | long | double | n/a |
13. ② ③ ⑤
14.
1
5
9
15.
100부터 200
200년 전
200100어이쿠
16.
i1 = 17
i1/2 = 8
c1 + ONE = a1
(int)c1 + ONE = 971
(c1 + ONE) = 98
(c1 + ONE) = b
(c1 + ONE) = 98
i2 + f1 = 6.500000
f1 + d1 = 4.300000
(int)(f1 + d1) = 4
(int)f1 + (int)d1 = 3
b1 = true
17.
① 3
② d
③ boolean으로의 형변환과 boolean의 형변환은 불가능하다.
9. 프로그래밍 문제
01. println() 메서드를 이용해 다음 형태의 피라미드를 출력하는 프로그램을 작성하라.
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.printf("%6s\n",'*');
System.out.printf("%7s\n","***");
System.out.printf("%8s\n","*****");
System.out.printf("%9s\n","*******");
System.out.printf("%10s\n","*********");
System.out.printf("%11s\n","***********");
}
}
/*
*
***
*****
*******
*********
***********
*/
02. 키보드로 입력받은 정수의 제곱 값을 출력하는 프로그램을 작성하라.
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("정수를 입력하세요 : ");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.print(n+"의 제곱은 "+n*n);
}
}
/*입력
7
*/
/*출력
정수를 입력하세요 : 7
7의 제곱은 49
*/
03. 원기둥의 부피를 구하는 프로그램을 작성하라.
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final double PI = 3.141592;
System.out.print("원기둥의 밑면 반지름은? ");
Scanner in = new Scanner(System.in);
int radius = in.nextInt();
System.out.print("원기둥의 높이는? ");
int h = in.nextInt();
double v = radius *radius * h * PI;
v=(int)v;
System.out.print("원기둥의 부피는 "+ (double)v);
}
}
//입력
/*
10
10
*/
/*출력
원기둥의 밑면 반지름은? 10
원기둥의 높이는? 10
원기둥의 부피는 3141.0
*/
04. 초를 입력하면 시간, 분, 초로 환산해 출력하는 프로그램을 작성하라.
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("초 단위 정수를 입력하세요 : ");
Scanner in = new Scanner(System.in);
int seconds = in.nextInt();
int hour =0, minute=0, sec =0;
if (seconds /60 != 0){
minute = seconds /60;
sec= seconds%60;}else {
sec = seconds;
}
if(minute /60 !=0) {
hour = minute /60;
}
System.out.println(hour+"시간 "+minute+"분 "+sec+"초" );
}
}
/*
초 단위 정수를 입력하세요 : 2000
0시간 33분 20초
*/
05. 임의의 소문자로 초기화된 char 타입의 변수 c를 대문자로 변환해 출력하는 프로그램을 작성하여라.
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("문자 입력 : ");
Scanner in = new Scanner(System.in);
String c = in.nextLine();
int tmp = (int)c.charAt(0);
if ((tmp>=97)&&(tmp <= 122)) {
System.out.println((char)(tmp-32));
}
}
}
/*
문자 입력 : a
A
*/
06. 키보드로 화씨온도를 입력받아 섭씨온도로 환산해 출력하는 프로그램을 작성하라.
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("화씨 온도 입력 : ");
Scanner in = new Scanner(System.in);
double c = in.nextDouble();
double celsius =5/9.0*(c-32);
System.out.printf("%.1f C",celsius);
}
}
/*출력
화씨 온도 입력 : 100
37.8 C
*/
07.
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("정수를 입력하시오 : ");
Scanner in = new Scanner(System.in);
int c = in.nextInt();
System.out.println("4와 5로 나누어집니다. "+((c%4==0)&&(c%5==0)));
System.out.println("4또는 5로 나누어집니다. "+((c%4==0)||(c%5==0)));
System.out.println("4와 5 둘 중 하나로 나누어집니다. "+((c%4==0)^(c%5==0)));
}
}
/*
정수를 입력하시오 : 20
4와 5로 나누어집니다. true
4또는 5로 나누어집니다. true
4와 5 둘 중 하나로 나누어집니다. false
*/
08. 각 자리수의 합을 구하시오
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("0~999 사이의 숫자를 입력하시오 : ");
Scanner in = new Scanner(System.in);
int c = in.nextInt();
int sum = c%10 +c/10%10 + c/10/10;
System.out.println("각 자릿수의 합 = "+sum);
}
}
/*
0~999 사이의 숫자를 입력하시오 : 194
각 자릿수의 합 = 14
*/
09.
package main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("전공 이수 학점 : ");
int c1 = in.nextInt();
System.out.print("교양 이수 학점 : ");
int c2 = in.nextInt();
System.out.print("일반 이수 학점 : ");
int c3 = in.nextInt();
if ((c1 >=70)&&(((c2>=30)||(c3>=30))||((c2+c3)>=80))) {
System.out.println("졸업가능");
}else {
System.out.println("미수료");
}
}
}
/*
전공 이수 학점 : 30
교양 이수 학점 : 10
일반 이수 학점 : 70
미수료
*/
'대학강의정리 > 24.1 자바' 카테고리의 다른 글
ch3. 제어문과 메서드 (0) | 2024.04.09 |
---|---|
ch4. 객체지향 (0) | 2024.04.09 |
문자열은 ==로 비교할 수 없다. (0) | 2024.03.23 |
stringindexoutofboundsexception: 에러 (0) | 2024.03.23 |
ch1. 실행환경 준비 (0) | 2024.03.14 |