무한 반복을 사용하여 입력을 받는 도중 어느 값이 들어오면 반복을 종료한다는 조건문을 넣어 아래와 같이 식을 구현할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class Ex01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 1) 길이가 정해지지 않은 반복 // 사용자에게 정수를 입력받아서 합계를 누적시킨다 // 만약 0을 입력하면 '더 이상 더하지 않겠다' 라는 의미로 생각하여 반복을 중단한다 int input, sum = 0; while(true) { System.out.print("정수 입력 : "); input = sc.nextInt(); sum += input; if(input == 0) { break; } } // Unreachable code System.out.println("합계 : " + sum); sc.close(); } } | cs |
※ 도달할 수 없는 코드 (원인을 해결하기 위해선 이전의 코드를 잘 살펴본다)
예시) 무한반복이 탈출 불가능 할 경우 반복문 아래에 있는 모든 코드에 이 경고문이 나타난다
JVM은 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있다. 또한 JVM은 플랫폼에 의존적이다. 즉 리눅스의 JVM과 윈도우즈의 JVM은 다르다. 단, 컴파일된 바이너리 코드는 어떤 JVM에서도 동작시킬 수 있다.
JVM은 다음과 같은 역할을 한다.
JRE는 JVM 이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다. JRE는 JVM의 실행환경을 구현했다고 할 수 있다.
JDK는 자바 개발도구(Java Development Kit)의 약자이다.
JDK는 JRE + 개발을 위해 필요한 도구(javac, java등)들을 포함한다.
※ if문을 써도 되긴 하지만 삼항연산자를 대신 사용하여 써본다.
문자도 정수를 쓸 수 있다는 걸 알면서도 잊지 않아야한다. 아래는 아스키코드를 활용한 알파벳 출력이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package day03; public class Ex02 { public static void main(String[] args) { // 대문자 A부터 Z까지 한줄에 출력하세요 // 각 글자는 ,로 구분하고 마지막에는 콤마가 없어야 합니다 char alphabet = 65; String result; for(int i = 0; i < 26; i++) { result = i < 25 ? ", " : ""; System.out.printf("%c%s",alphabet + i,result); /* * if(i < 25) System.out.printf("%c, ",alphabet + i); else * System.out.printf("%c",alphabet + i); */ } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package day03; import java.util.Scanner; public class Ex04 { public static void main(String[] args) throws Exception { // 아래 코드의 실행을 확인학, 코드의 흐름을 분석해보세요 Scanner sc = new Scanner(System.in); int size = 100; int current; System.out.print("0 ~ 100 사이 입력 : "); current = sc.nextInt(); current = current * 100 / size; System.out.print("["); for (int i = 0; i < 50; i++) { if (i == 25) { System.out.printf(" %3d%% ", current); } else if (i < current / 2) { System.out.print("#"); } else { System.out.print("_"); } Thread.sleep(500); // CPU에게 0.5초만큼 기다리게 한다. } System.out.println("]"); sc.close(); } } | cs |
※ 위의 코드를 보고 코드의 흐름을 분석 및 이해한다.
너무 복잡하게 생각하면 안되는 문제이다.
그냥 단순히 내가 있는 층에서 엘리베이터 1,2,3의 층수를 뺀 다음 만약 그 결과 값이 음수로 나오더라도 절대값으로 바꿔버린다면 내 현재층과 대상이 된 엘리베이터의 거리를 구할 수 있기 때문에 간단히 해결되는 문제다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public class Quiz1 { public static void main(String[] args) { Random ran = new Random(); Scanner sc = new Scanner(System.in); int n1 = ran.nextInt(15) + 1; int n2 = ran.nextInt(15) + 1; int n3 = ran.nextInt(15) + 1; int current; /* * 1층에서 15층 사이의 엘리베이터 3개가 있습니다 * 사용자에게 현재 층을 입력받아서 가장 가까운 엘리베이터가 이동할수 있도록 * 출력문을 만들어서 출력해주세요 */ // 가장 가까운 엘리베이터 // 거리가 최소값인 엘리베이터 // 절대값(현재 층-대상 층)중에서 최소값을 가지는 엘리베이터 System.out.printf("%d, %d, %d\n", n1, n2, n3); System.out.print("현재 몇층입니까 : "); current = sc.nextInt(); // 현재 층수를 입력받는다 int d1 = current - n1; // 현재 층과 각 엘리베이터 층수의 [차이]를 구한다 int d2 = current - n2; int d3 = current - n3; d1 = d1 < 0 ? -d1 : d1; // 위 혹은 아래 방향에 상관없이 [거리]를 구하기 위해 [절대값] 처리한다 d2 = d2 < 0 ? -d2 : d2; d3 = d3 < 0 ? -d3 : d3; int min = d1; // [거리 중에서 최소값]을 찾아낸다 if(min > d2) min = d2; if(min > d3) min = d3; // 최소값과 일치하는 요소가 이동하는 형식을 출력한다 if(min == d1) System.out.println("첫번째 엘리베이터가 움직입니다"); if(min == d2) System.out.println("두번째 엘리베이터가 움직입니다"); if(min == d3) System.out.println("세번째 엘리베이터가 움직입니다"); sc.close(); | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public class Ex07 { public static void main(String[] args) { Random ran = new Random(); Scanner sc = new Scanner(System.in); int current; Integer [] elevators = { // 랜덤으로 정수를 3개 가지는 배열 ran.nextInt(15) + 1, ran.nextInt(15) + 1, ran.nextInt(15) + 1, }; List<Integer> el = Arrays.asList(elevators); // 배열을 리스트로 변환 System.out.println(el); System.out.println("현재 층수를 입력 : "); current = sc.nextInt(); int min = 15; // 최소값을 저장할 변수 int index = 0; // 최소값은 몇번째 위치에 있는지 저장할 변수 for(int i = 0; i < el.size(); i++) { int dist = Math.abs(current - el.get(i)); // 절대값을 구하여 거리를 만들어두고 if(min > dist) { // 거리의 최소값이 몇번째인지에 따라 index = i; // index변수에 i값을 저장 } } System.out.printf("%d번째 엘리베이터가 움직입니다\n", index + 1);// index는 0부터 시작하므로 + 1 sc.close(); } } | cs |