문제) 1부터 100까지의 수중에서 4의 배수만 출력 한줄에 4개씩 출력. 빈 줄바꿈 지정은 System.out.println(); 이용. while문 이용. 실행 예) 4 8 12 16 20 24 28 32 ...
package com.test;
public class Sample04 { public static void main (String [] args) { /* 내가 짠 코드 //입력 //처리 //출력 int a = 1; while(a<=100) { if (a%4 == 0) { System.out.printf("%d ", a); } if (a%16 == 0) { System.out.println(""); } a++; } */
//입력
//처리 StringBuilder msg = new StringBuilder();
int a = 1; while(a<=100) { if (a%4 == 0) { msg.append(String.format("%3d ", a)); // %3d는 한숫자당 3칸을 고정칸으로 마련해둬라~ } if (a%16 == 0) { msg.append(String.format("%n")); } a++; }
문제) 1부터 100까지의 수중에서 4의 배수만 출력 한줄에 4개씩 출력. 줄 끝에 해당 줄 숫자들의 합을 출력 빈 줄바꿈 지정은 String.format("%n"); 이용. while문 이용. 실행 예) 4 8 12 16 -> 40 20 24 28 31 -> 104 ...
package com.test;
public class Sample05 { public static void main (String [] args) { //입력
//처리 StringBuilder msg = new StringBuilder(); int a = 1; int sum = 0;
while(a<=100) { if (a%4 == 0) { msg.append(String.format("%3d ", a)); sum += a; } if (a%16 == 0) { msg.append(String.format(" -> %d %n", sum)); sum = 0; } a++; }
public class Sample07 { public static void main(String[] args) { StringBuilder msg = new StringBuilder(); Scanner sc = new Scanner(System.in); int sum = 0;
do { //입력 System.out.print("숫자입력(양의 정수)?"); String num = sc.next();
//처리 if (num.equals("-1")){ break; //블럭 탈출문 } msg.append(String.format("%s ", num)); // 문자열 누적 sum += Integer.parseInt(num);
//출력 System.out.printf("%s -> %d %n", msg, sum); } while (true); // 무한 실행 } }
문제) 입력받은 숫자(양의 정수)를 화면에 출력하되, -1이 입력될때까지 계속 반복. 출력된 숫자들의 합을 마지막에 한번 출력 실행 예) 숫자입력(양의 정수)?1 1 숫자입력(양의 정수)?2 1 2 숫자입력(양의 정수)?3 1 2 3 ... 숫자입력(양의 정수)?-1 현재까지 입력된 숫자들의 합: xxxx
package com.test; import java.util.Scanner;
public class Sample08 { public static void main(String[] args) { StringBuilder msg = new StringBuilder(); Scanner sc = new Scanner(System.in); int sum = 0;
do { //입력 System.out.print("숫자입력(양의 정수)?"); String num = sc.next();
//처리 if (num.equals("-1")){ break; //블럭 탈출문 } msg.append(String.format("%s ", num)); // 문자열 누적 sum += Integer.parseInt(num);
//출력 System.out.printf("%s %n", msg); } while (true); // 무한 실행
문제) 입력받은 숫자(양의 정수)를 화면에 출력하되, -1이 입력될때까지 계속 반복. 마지막에 최대값을 출력 실행 예) 숫자입력(양의 정수)?1 1 숫자입력(양의 정수)?2 1 2 숫자입력(양의 정수)?3 1 2 3 ... 숫자입력(양의 정수)?-1 현재까지 입력된 숫자들중에서 최대값: xxxx
package com.test; import java.util.Scanner; public class Sample09 { public static void main(String[] args) { StringBuilder msg = new StringBuilder(); Scanner sc = new Scanner(System.in); int max = 0, data = 0;
do { //입력 System.out.print("숫자입력(양의 정수)?"); String num = sc.next();
//처리 if (num.equals("-1")){ break; //블럭 탈출문 } msg.append(String.format("%s ", num)); // 문자열 누적 data = Integer.parseInt(num); if (data > max) { //최대값구하기 max = data; }
//출력 System.out.printf("%s %n", msg); } while (true); // 무한 실행
//최종 합 출력 System.out.printf("현재까지 입력된 숫자들 중에서 최대값: %d %n", max); } }
문제) 입력받은 숫자(양의 정수)를 화면에 출력하되, -1이 입력될때까지 계속 반복. 마지막에 최대값을 출력 실행 예) 숫자입력(양의 정수)?1 1 숫자입력(양의 정수)?2 1 2 숫자입력(양의 정수)?3 1 2 3 ... 숫자입력(양의 정수)?-1 현재까지 입력된 숫자들중에서 최대값: xxxx 현재까지 입력된 숫자들중에서 최소값: xxxx
package com.test; import java.util.Scanner; public class Sample10 { public static void main(String[] args) { StringBuilder msg = new StringBuilder(); Scanner sc = new Scanner(System.in); int max = 0, min = 0, data = 0;
do { //입력 System.out.print("숫자입력(양의 정수)?"); String num = sc.next();
//처리 if (num.equals("-1")){ break; //블럭 탈출문 } msg.append(String.format("%s ", num)); // 문자열 누적 data = Integer.parseInt(num); if (min == 0) { min = Integer.parseInt(num); } if (data > max) { //최대값구하기 max = data; } if (min > data) { min = data; }
//출력 System.out.printf("%s %n", msg); } while (true); // 무한 실행
//최종 합 출력 System.out.printf("현재까지 입력된 숫자들 중에서 최대값: %d %n", max); System.out.printf("현재까지 입력된 숫자들 중에서 최소값: %d %n", min); } }
package com.test; import java.util.Scanner;
public class Sample10 { public static void main(String[] args) { StringBuilder msg = new StringBuilder(); Scanner sc = new Scanner(System.in); int max = 0, min = Integer.MAX_VALUE, data = 0;
do { //입력 System.out.print("숫자입력(양의 정수)?"); String num = sc.next();
//처리 if (num.equals("-1")){ break; //블럭 탈출문 } msg.append(String.format("%s ", num)); // 문자열 누적 data = Integer.parseInt(num); if (data > max) { //최대값구하기 max = data; } if (min > data) { min = data; }
//출력 System.out.printf("%s %n", msg); } while (true); // 무한 실행
//최종 합 출력 System.out.printf("현재까지 입력된 숫자들 중에서 최대값: %d %n", max); System.out.printf("현재까지 입력된 숫자들 중에서 최소값: %d %n", min); } }
이중 반복문
1. for문이나 while문 등을 겹쳐서 코딩.
for (대입문1; 조건식2 12 19; 증감식11 18) { //(이 부분은 바깥쪽 for문의 영향 범위)
for (대입문3 13; 조건식4 7 10 14 17; 증감식6 9 16) { // 이부분은 안쪽 for문의 영향 범위5 8 15 }
//(이 부분은 바깥쪽 for문의 영향 범위) }
예를 들어, 1부터 10까지 숫자를 출력하는 과정을 보면
for (int a=1; a<=10; a++) { System.out.printf("%d ", a); }
String.format("%s이다", 변수); -> printf는 서식지정자와 함께 출력을 위해 사용되는 메소드임을 기억한다면 String.format은 기억하기 쉬움. 출력대신 변수데이터를 위한 메모리의 저장 메소드로 변경해서 기억하면 됨.
또한, 자주쓰는 형변환 메소드들 기억하기
if문 문제) 임의의 점수를 입력받아서 판정을 출력. 실행 예) 점수 입력(0~100)? 90 90~100 -> A 80~89 -> B 70~79 -> C 60~69 ~> D 0~59->F
입력된 점수 : 90 판정 결과 : A
import java.util.Scanner;
public class Test26 {
public static void main(String[] args) {
System.out.print("점수 입력(0~100)?"); Scanner sc = new Scanner(System.in); String num = sc.next();
//처리 int data = Integer.parseInt(num);
char score = 'F';
if (data>=90 && data<=100) { score = 'A'; } if (data>=80 && data<=89) { score = 'B'; } if (data>=70 && data<=79) { score = 'C'; } if (data>=60 && data<=69) { score = 'D'; }
/* 내가 짠 코드 // 가장 하단 if 문으로 인해 score변수를 String으로 선언 if (data>=60) { score = "D"; } if (data>=70) { score = "C"; } if (data>=80) { score = "B"; } if (data>=90) { score = "A"; } if (data<0 || data>100) { score = "0~100 사이 점수를 입력하세요"; } */
int data1 = Integer.parseInt(num1); int data2 = Integer.parseInt(num2); int data3 = Integer.parseInt(num3);
int max = 0;//지역변수는 초기화해야함! int min = 0;//지역변수는 초기화해야함!
//큰수 확인 후 변수 데이터 대입 if (data1 >= data2) { max = data1; } else { max = data2; }
if (max <= data3){ max = data3; }
//작은수확인 후 변수 데이터 대입 if (data1 <= data2) { min = data1; } else { min = data2; }
if (min >= data3) { min = data3; }
/* 교수님 작성 처리코드 * if (data1 >= data2) { * max = data1; * min = data2; * } else { * max = data2; * min = data1; * } * * if (max <= data3) { * max = data3; * } * * if (min >= data3) { * min = data3; * } */
//출력 System.out.printf("입력된 숫자 : %s %s %s%n", num1, num2, num3); System.out.printf("가장 큰 수 : %d %n", max); System.out.printf("가장 작은 수 : %d %n", min);
} }
//결과
숫자1?300 숫자2?80 숫자3?900 입력된 숫자 : 300 80 900 가장 큰 수 : 900 가장 작은 수 : 80
문제) 국,영,수 점수를 입력 받아서 판정 결과 출력. 판정 기준은 합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상. 과락 -> 과목중 40점 미만이 있고, 평균이 60이상. 불합격 -> 평균이 60점 미만
평균이 60점 이상 -> 합격 또는 과락 -> 국영수 점수가 모두 40점 이상인지 확인. 평균이 60점 이하 -> 불합격
실행 예) 국어(0~100)?XX 영어(0~100)?YY 수학(0~100)?ZZ
입력받은 점수 : 국어 xx점, 영어 xx점, 수학 xx점 판정 결과 : 합격
import java.util.Scanner;
public class Test30 { public static void main (String [] args) {
Scanner sc = new Scanner(System.in); System.out.print("국어(0~100)?"); String kor = sc.next(); System.out.print("영어(0~100)?"); String eng = sc.next(); System.out.print("수학(0~100)?"); String mat = sc.next();
int data1 = Integer.parseInt(kor); int data2 = Integer.parseInt(eng); int data3 = Integer.parseInt(mat);
ASCII코드중에서 문자 0은 48, 9는 57 ASCII코드중에서 문자 A는 65, Z는 90 ASCII코드중에서 문자 a는 97, z는 122
char과 int 자료형은 서로 호환이 가능한 범위를 가진다.
char ch3 = 65; //성공. 'A'가 입력됨.
System.out.printf("%d %n", 65); // 65 System.out.printf("%c %n", 65); // A
String str = "TEST"; System.out.printf("%c %n", str.charAt(0)); //문자열이 저장된 변수명.charAt(문자열위치값) 즉, 여기서는 T 리턴 System.out.printf("%c %n", str.charAt(1)); System.out.printf("%c %n", str.charAt(2)); System.out.printf("%c %n", str.charAt(3));
public class Test20 {
public static void main(String [] args) {
//입력
//처리
//출력
System.out.printf("%c %n", 65);
System.out.printf("%c %n", 66);
System.out.printf("%c %n", 67);
// A ~ Z 까지를 출력
for (int i=65; i<=90; i++) {
System.out.printf("%c", i);
}
System.out.println("");
// a ~ z 까지를 출력
for (int i=97; i<=122; i++) {
System.out.printf("%c", i);
}
System.out.println("");
}
}
//결과
A
B
C
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
문제) 대문자로 구성된 4글자짜리 문자열을 입력받고 나서, 소문자로 변경한 다음 출력. 실행 예) 문자열 입력(4자, 대문자)?TEST 입력된 문자열 : TEST 소문자로 변환 : test
import java.util.Scanner;
public class Test21 {
public static void main (String [] args ) {
//입력
System.out.print("문자열 입력(4자, 대문자)?");
Scanner sc = new Scanner(System.in);
String eng = sc.next();
//처리
char en1 = eng.charAt(0);
char en2 = eng.charAt(1);
char en3 = eng.charAt(2);
char en4 = eng.charAt(3);
int inten1 = en1 + 32;
int inten2 = en2 + 32;
int inten3 = en3 + 32;
int inten4 = en4 + 32;
//출력
System.out.printf("입력된 문자열 : %s %n ", eng);
System.out.printf("소문자로 변환 : %c%c%c%c %n", inten1, inten2, inten3, inten4);
}
}
//결과
문자열 입력(4자, 대문자)?TEST
입력된 문자열 : TEST
소문자로 변환 : test
자료의 형 변환
1. 자료의 형이 일치하지 않는 경우 원하는 자료형으로 변환할 수 있어야 한다.
2. 묵시적 형변환, 명시적 형 변환 묵시적 형 변환 -> 자동으로 변환시켜 주는 것. 데이터가 원래의 값을 유지하는 것이 가능. 작은 데이터를 큰 자료형에 넣는 경우에 주로 발생. 명시적 형 변환 -> 특정 명령 수행을 통해서 강제적으로 변환을 시키는 것. 데이터가 원래의 값을 유지하지 못하는 경우도 발생.
public class Test22 {
public static void main (String[]args) {
short a = 10;
System.out.printf("%d %n", a);
int b = a; //->묵시적 형 변환
System.out.printf("%d %n", b);
//short c = b;
//System.out.printf("%d %n", c);
short c = (short)b; //->명시적 형 변환
System.out.printf("%d %n", c);
int d = Short.MAX_VALUE + 1; //32767 +1
short e = (short)d; // -> 명시적 형 변환
System.out.printf("%d %n", e); //-32768
}
}
//결과
10
10
10
-32768
형 변환의 대표적인 예
문자열형 -> 숫자형, 숫자형 -> 문자열형
int 변수 = Integer.parseInt(문자열형); double 변수 = Double.parseDouble(문자열형);
String 변수 = String.valueof(정수형); String 변수 = String.valueof(실수형);
String 변수 = Integer.toString(정수형); String 변수 = Integer.toBinaryString(정수형); String 변수 = Integer.toHexString(정수형);
String 변수 = String.format("%d", 정수형); String 변수 = String.format("%f", 실수형);
char 변수 = 문자열형변수명.charAt(인덱스);
if문
1. 주어진 조건에 따라 분기 방향을 정하기 위하여 사용하는 제어문 2. 기본형식
//조건이 만족되는 경우(true인 경우)만 실행문 실행
if (조건) {
// 실행문;
}
//조건이 만족되는 경우(true인 경우)는 실행문1 실행
//조건이 만족되는 않는 경우(true인 경우)는 실행문2 실행
if (조건) {
// 실행문1;
} else {
// 실행문2;
}
사용 가능 방법
if (조건) {
//실행문1;
} else if (조건2) {
//실행문2;
} else {
//실행문3;
}
-> 다른방법으로 표기하면
if (조건) {
//실행문1;
} else {
if (조건2) {
//실행문2;
} else {
//실행문3;
}
//if, else 구문은 한번만 표기, else if (조건)은 추가 가능.
if (조건) {
//실행문1;
} else if (조건2) {
//실행문2;
} else if (조건3) {
//실행문3;
} else {
//실행문4;
}
-> 위와 같은 상황은 다른 표현으로 사용하기도 합니다. 다만, else 즉 실행문4가 없음.
if (조건1) {
// 실행문1;
}
if (조건2) {
// 실행문2;
}
if (조건3) {
// 실행문3;
}
문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기. 단, if문 사용. 실행 예) 숫자1?XX 숫자2?YY 숫자3?ZZ 입력 받은 숫자 : XX, YY, ZZ 가장 큰 숫자 : ZZ
import java.util.*;
public class Test23 {
public static void main(String [] args) {
Scanner sc = new Scanner(System.in); // Scanner 변수명 = new Scanner(System.in);