자바 프로그래밍, 어떻게 시작해야 할까?
내가 프로그램을 만들 수 있을까?
프로그램을 막 시작하려는 사람이 맨 먼저 부딪히게 되는 벽은 아마도 다음과 같지 않을까?
“문법도 어느 정도 알겠고, 책 내용도 대부분 이해된다. 하지만 이러한 지식을 바탕으로 내가 도대체 어떤 프로그램을 만들 수 있을까?”
이럴 때는 ‘어떤 프로그램을 짜야지’라는 생각보다는 다른 사람들이 만든 프로그램 파일을 자세히 들여다보고 분석하는 데서 시작하는 것이 좋다. 그러다 보면 다른 사람들의 생각도 읽을수 있고, 거기에 더해 뭔가 새로운 아이디어가 떠오를 수도 있다. 하지만 여기에서 가장 중요한 것은 자신의 수준에 맞는 소스를 찾는 일이다. 그래서 08장에서는 쉬운 예제부터 시작해서 차츰 수준을 높여 실용적인 예제까지 다룬다. 공부한 내용을 어떻게 활용하는가는 여러분의 몫이다.
필자는 예전에 프로그래밍을 막 시작한 사람에게 구구단 프로그램을 짜보라고 한 적이 있다. 쉬운 과제이고 자바 문법도 다 공부한 사람이었는데 프로그램을 어떻게 만들어야 할지 전혀 갈피를 잡지 못했다. 그래서 필자는 다음과 같은 해결책을 알려 주었다.
“프로그램을 만들려면 가장 먼저 입력과 출력을 생각하라.”
구구단 프로그램 중 2단을 만든다면 2를 입력값으로 주었을 때 어떻게 출력되어야 할지 생각해 보라고 했다. .
- 메서드 이름은? gugu로 짓자
- 입력받는 값은? 2
- 출력하는 값은? 2단(2, 4, 6, 8, …, 18)
- 결과는 어떤 형태로 저장하지? 연속된 자료형이니까 배열!
1. 먼저 인텔리제이를 열고 다음과 같이 입력해 보자. gugu라는 메서드에 2를 입력값으로 주면 result라는 변수에 결괏값을 넣으라는 뜻이다.
public class Sample {
public static void main(String[] args) {
result = gugu(2);
}
}
물론, 현재 result에 대한 자료형 타입도 없고 gugu 메서드도 없기 때문에 지금 작성한 코드는 오류가 발생한다.
2. 이제 결괏값을 어떤 형태로 받을 것인지 고민해 보자. 2단이니까 2, 4, 6, … 18까지 결과가 나올 것이다. 이런 종류의 데이터는 정수형 배열이 적합이다. 따라서 int[] result = {2, 4, 6, 8, 10, 12, 14, 16, 18}과 같은 결과를 얻는 것이 좋겠다는 생각을 먼저 하고, 프로그래밍을 시작하는 태도가 필요하다. 이런 식으로 머릿속에 그림이 그려지기 시작하면 의외로 생각이 가볍게 좁혀지는 것을 느낄 수 있을 것이다.
3. 어떻게 만들지 생각해 봤으니 진짜 프로그램을 작성해 보자. 일단 이름을 gugu로 지은 메서드를 다음과 같이 만든다.
public class Sample {
static int[] gugu(int dan) {
System.out.println(dan);
return null;
}
public static void main(String[] args) {
int[] result = gugu(2);
}
}
gugu 메서드는 static 메서드로 작성했다. 만약 일반 메서드로 작성한다면 Sample 클래스의 객체를 만들어 사용해야 한다. gugu 메서드는 입력으로 받은 값(dan 변숫값)을 출력하고 null을 리턴하게 했다. 입력값으로 2가 잘 들어오는지 확인만 해보려는 것이다. 그리고 gugu 메서드를 실행한 main 메서드에서도 gugu 메서드의 리턴값을 int[] result처럼 정수형 배열로 선언했다.
2
4. 이제 결괏값을 담을 정수 배열을 하나 생성하자. 앞에서 작성한 System.out.println(dan);은 입력값이 잘 전달되는지 확인하기 위한 것이었으므로 이제 지워도 좋다.
public class Sample {
static int[] gugu(int dan) {
int[] result = new int[9];
return result;
}
public static void main(String[] args) {
int[] result = gugu(2);
}
}
구구단의 2단, 3단 등은 총 9개의 숫자를 담아야 하므로 int[9]으로 9개의 정수 배열을 만들었다.
5. 이번에는 result에 2, 4, 6, …, 18을 어떻게 넣어야 할지 생각해 보자. 필자는 다음과 같이 배열의 각 요소에 순서대로 값을 입력하는 방법을 사용했다.
public class Sample {
static int[] gugu(int dan) {
int[] result = new int[9];
result[0] = dan * 1;
result[1] = dan * 2;
result[2] = dan * 3;
result[3] = dan * 4;
result[4] = dan * 5;
result[5] = dan * 6;
result[6] = dan * 7;
result[7] = dan * 8;
result[8] = dan * 9;
return result;
}
public static void main(String[] args) {
int[] result = gugu(2);
for (int a: result) {
System.out.println(a);
}
}
}
2
4
6
8
10
12
14
16
18
6. 그런데 앞에서 작성한 gugu 메서드에 반복이 너무 많다. 살펴보면 result[0] = dan * 1;과 같은 문장이 숫자가 1씩 증가하며 반복된다는 것을 알 수 있다. 우리는 똑같은 코드를 반복할때 반복문을 사용한다고 배웠다. 그렇다면 우리가 만들려는 프로그램에서도 숫자 1부터 9까지 1씩 증가시키며 반복할 수 있는 반복문을 사용할 수 있지 않을까? 다음과 같이 말이다.
for(int i=0; i<9; i++) {
...
}
7. 앞서 정리한 내용을 바탕으로 완성한 gugu 메서드는 다음과 같다.
public class Sample {
static int[] gugu(int dan) {
int[] result = new int[9];
for(int i=0; i<result.length; i++) {
result[i] = dan * (i+1);
}
return result;
}
public static void main(String[] args) {
int[] result = gugu(2);
for (int a: result) {
System.out.println(a);
}
}
}
만족스러운 결과가 나왔다. 사실 gugu 메서드는 이와 같은 과정을 거치지 않고도 바로 만들수 있을 것이다. 하지만 더 복잡한 코드를 만들게 된다면 이처럼 구체적이고 단계적으로 접근하는 방식이 많은 도움이 된다. 프로그래밍할 땐 매우 구체적으로 접근해야 오히려 머리가 덜 아프다는 것을 기억하자.
3과 5의 배수 합하기
10 미만의 자연수에서 3과 5의 배수를 구하면 3, 5, 6, 9이다. 이들의 총합은 23이다. 그렇다면 1000 미만의 자연수에서 3과 5의 배수의 총합을 구하라.
- 입력 받는 값은 1부터 999까지(1000 미만의 자연수)이다.
- 출력하는 값은 3의 배수와 5의 배수의 총합이다.
- 생각해 볼 것은 다음 2가지이다.
- 3의 배수와 5의 배수는 어떻게 찾지?
- 3의 배수와 5의 배수가 겹칠 때는 어떻게 하지?
1. 먼저 1000 미만의 자연수는 어떻게 구할지 생각해 보자. 여러 가지 방법이 있지만, 다음과 같이 변수에 초깃값 1을 준 후 루프를 돌리며 1씩 증가시켜서 999까지 진행하는 방법이 가장 일반적이다.
Problem1.java
public class Problem1 {
public static void main(String[] args) {
int n = 1;
while (n < 1000) {
System.out.println(n);
n++;
}
}
}
또는 다음과 같이 for 문을 사용할 수도 있다.
public class Problem1 {
public static void main(String[] args) {
for (int n = 1; n < 1000; n++) {
System.out.println(n);
}
}
}
1
2
3
︙
999
2. 1000까지의 자연수를 차례로 구하는 방법을 알았으니 3과 5의 배수를 구하는 방법을 알아 보자. 먼저, 1000 미만의 자연수 중 3의 배수는 다음과 같이 증가한다.
3, 6, 9, 12, 15, 18, …, 999
그렇다면 1부터 1000까지 수가 진행되는 동안 그 수가 3의 배수인지는 어떻게 알 수 있을까? 1부터 1000까지의 수 중 3으로 나누었을 때 나누어떨어지는 경우, 즉 3으로 나누었을 때 나머지가 0인 경우가 바로 3의 배수이다. 따라서 다음과 같이 % 연산자를 사용하면 3의 배수를 쉽게 찾을 수 있다.
public class Problem1 {
public static void main(String[] args) {
for (int n = 1; n < 1000; n++) {
if (n % 3 == 0) {
System.out.println(n);
}
}
}
}
3. 이러한 내용을 바탕으로 만든 최종 코드는 다음과 같다.
public class Problem1 {
public static void main(String[] args) {
int result = 0;
for (int n = 1; n < 1000; n++) {
if (n % 3 == 0 || n % 5 == 0) {
result += n;
}
}
System.out.println(result);
}
}
233168
3과 5의 배수에 해당하는 수를 result 변수에 계속해서 더한다. 그런데 이 문제에는 한 가지 함정이 있다. 15와 같이 3으로도 나누어지고, 5로도 나누어지는 수가 중복으로 더해질 수 있다는 점이다. 따라서 15와 같이 3의 배수도 되고 5의 배수도 되는 값이 중복으로 더하지 않기 위해 || 연산자를 사용했다.
게시판 페이징하기
A씨는 게시판 프로그램을 작성하고 있다. 그런데 게시물의 총 개수와 한 페이지에 보여 줄 게시물 수를 입력으로 주었을 때 총 페이지 수를 출력하는 프로그램이 필요하다고 한다. 이 문제를 풀기 위해 다음 내용을 정리해 보자.
- 메서드 이름은 getTotalPage이다.
- 입력 받는 값은 게시물의 총 개수(m), 한 페이지에 보여 줄 게시물 수(n)이다.
- 출력하는 값은 총 페이지 수이다.
A씨가 프로그램을 만들기 위해 입력값과 결괏값이 어떻게 나와야 하는지 먼저 살펴보자. 게시물의 총 개수가 5이고 한 페이지에서 보여 줄 게시물 수가 10이면 총 페이지 수는 당연히 1이 된다. 만약 게시물의 총 개수가 15이고 한 페이지에서 보여 줄 게시물 수가 10이라면 총 페이지 수는 2가 될 것이다.
게시물의 총 개수(m)페이지당 보여줄 게시물 수(n)총 페이지 수
5 | 10 | 1 |
15 | 10 | 2 |
25 | 10 | 3 |
30 | 10 | 3 |
이 문제는 총 페이지 수를 구하는 문제이다. 실제 게시판 프로그램을 만들 때 가장 처음 마주치는 난관이라고 할 수 있다. 사실 페이징 기술은 훨씬 복잡한데 여기에서는 가장 간단한 총 페이지 수를 구하는 방법에 대해서만 알아보겠다.
1. 게시물의 총 개수(m)를 한 페이지에 보여 줄 게시물 수(n)로 나누고 1을 더하면 총 페이지 수를 얻을 수 있다.
총 페이지 수 = (총 개수 / 한 페이지당 보여 줄 개수) + 1
2. 앞서 살펴본 공식을 적용했을 경우 총 페이지 수가 표의 값처럼 구해지는지 확인해 보자.
Problem2.java
public class Problem2 {
static int getTotalPage(int m, int n) {
return m / n + 1;
}
public static void main(String[] args) {
System.out.println(getTotalPage(5, 10)); // 1 출력
System.out.println(getTotalPage(15, 10)); // 2 출력
System.out.println(getTotalPage(25, 10)); // 3 출력
System.out.println(getTotalPage(30, 10)); // 4 출력
}
}
1
2
3
4
첫 번째, 두 번째, 세 번째 케이스는 공식에 맞게 결과가 출력된다. 하지만 네 번째 케이스는 총 개수가 30이고 한 페이지에 보여 줄 개수가 10인데 4가 출력되어 원하는 결과가 출력되지 않았다.
3. 원하는 결과가 출력되지 않은 이유는 총 게시물 개수와 한 페이지에 보여 줄 게시물 수를 나눈 나머지 값이 0이 될 때 잘못 처리하였기 때문이다. 앞선 코드의 문제를 해결하려면 다음과 같이 코드를 변경해야 한다.
public class Problem2 {
static int getTotalPage(int m, int n) {
if (m % n == 0) {
return m / n;
} else {
return m / n + 1;
}
}
public static void main(String[] args) {
System.out.println(getTotalPage(5, 10)); // 1 출력
System.out.println(getTotalPage(15, 10)); // 2 출력
System.out.println(getTotalPage(25, 10)); // 3 출력
System.out.println(getTotalPage(30, 10)); // 3 출력
}
}
1
2
3
3
나누었을 때 나머지가 0인 경우는 나누기의 몫만 돌려주고 그 이외의 경우에는 1을 더하여 돌려주도록 변경했다.
자릿수 구하기
양의 정수를 입력받고, 입력받은 수의 자릿수를 출력하는 프로그램을 작성해 보자. 예를 들어 3이 입력되면 한 자릿수 숫자이므로 1, 25가 입력되면 2, 7876이 입력되면 4를 출력해야 한다.
숫자숫자의 자릿수
숫자 | 숫자의 자릿수 |
3 | 1 |
25 | 2 |
333 | 3 |
7876 | 4 |
숫자와 자릿수를 잘 관찰하면 숫자의 개수와 자릿수의 개수는 일치한다는 것을 알 수 있다. 이러한 관계를 이용하여 자릿수를 구해 보자.
Problem3.java
public class Problem3 {
public static void main(String[] args) {
int n = 123;
System.out.println(123 / 10); // 12 출력
}
}
123을 10으로 나누면 끝자리 숫자 3이 제거되고 몫 12만 남는다. 즉, 어떤 수를 10으로 나눌 때마다 끝자리 숫자가 1개씩 제거되는 것을 알 수 있다.
123을 10으로 나누면(나누기 1회) 12가 되고, 다시 12를 10으로 나누면(나누기 2회) 1이 되고, 다시 1을 10으로 나누면(나누기 3회) 0이 된다. 0이 되면 나누기를 멈추고 지금까지 나눈 횟수를 더하면 123의 자릿수를 구할 수 있다.
public class Problem3 {
static int getDigitCount(int n) {
int count = 0;
while (true) {
if (n == 0) {
break;
}
n = n / 10; // 숫자 n을 10으로 나누고 그 값을 다시 숫자 n에 대입한다.
count++;
}
return count;
}
public static void main(String[] args) {
System.out.println(getDigitCount(3)); // 1 출력
System.out.println(getDigitCount(25)); // 2 출력
System.out.println(getDigitCount(333)); // 3 출력
System.out.println(getDigitCount(7876)); // 4 출력
}
}
getDigitCount 메서드는 숫자를 입력으로 받아 숫자가 0이 될 때까지 10으로 계속 나누고, 그 나눈 횟수를 리턴하는 메서드이다. 사실 이 문제는 숫자를 문자열로 바꾸고 그 문자열의 개수를 세는 방법을 사용하면 더 간단하다.
문자열로 변환하여 그 개수를 세는 코드로 수정해 보자.
public class Problem3 {
static int getDigitCount(int n) {
String s = "" +n; // 숫자를 문자열로 바꾼다.
return s.length();
}
public static void main(String[] args) {
System.out.println(getDigitCount(3)); // 1 출력
System.out.println(getDigitCount(25)); // 2 출력
System.out.println(getDigitCount(333)); // 3 출력
System.out.println(getDigitCount(7876)); // 4 출력
}
}
숫자를 문자열로 바꾸고 그 개수를 리턴하도록 수정하였다. 숫자를 문자열로 바꾸는 방법은 숫자에 빈 문자열을 더해 주면 된다.
공백을 제외한 글자 수 세기
어떠한 문자열을 입력받았을 때 공백을 제외한 글자 수만을 리턴하는 코드를 작성해 보자. 예를 들어, 문자열이 ‘점프 투 자바’라면 띄어쓰기를 위해 필요한 공백 문자 2개를 제외하고 5라는 숫자를 리턴해야 한다.
점프 투 자바
5
이 문제는 문자열의 각 문자가 공백인지 아닌지를 판별하면 쉽게 해결할 수 있다. 어떤 문자가 공백인지 확인하는 코드는 다음과 같다.
Problem4.java
public class Problem4 {
public static void main(String[] args) {
String a = "점프 투 자바";
System.out.println("["+a.charAt(0)+"]"); // [점] 출력
System.out.println("["+a.charAt(2)+"]"); // [ ] 출력
}
}
[점]
[ ]
a 문자열의 첫 번째 문자는 a.charAt(0)와 같이 구할 수 있다. 첫 번째 문자는 ‘점’이고, 좌우에 대괄호를 포함하여 [점]을 출력한다. a.charAt(2)는 a 문자열의 세 번째 문자이므로 공백을 의미하는 [ ]을 출력한다.
public class Problem4 {
static int getCharCount(String s) {
int result = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != ' ') { // 공백이 아닌 경우에만 결괏값을 증가
result++;
}
}
return result;
}
public static void main(String[] args) {
System.out.println(getCharCount("점프 투 자바")); // 5 출력
System.out.println(getCharCount("점프 투 자바의 연습문제 풀이")); // 12 출력
}
}
5
12
getCharCount 메서드는 총 문자열 길이만큼 루프를 돌며 공백을 제외한 문자만 세어 리턴하는 메서드이다.
퀴즈
1. Java에서 try 블록에 포함할 수 없는 것은 무엇인가요? (정답:B)
- A) 예외를 발생시킬 가능성이 있는 코드
- B) catch 블록
- C) 일반 코드
- D) throw 키워드
2. finally 블록의 실행 시점은 언제인가요? (정답:C)
- A) 예외가 발생하지 않을 때만 실행된다
- B) 예외가 발생할 때만 실행된다
- C) try 블록 이후 항상 실행된다
- D) catch 블록 이후 선택적으로 실행된다
3. 다음 코드에서 출력 결과는? (정답:C)
public class Test {
public static void main(String[] args) {
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Arithmetic Exception");
} finally {
System.out.println("Finally Block");
}
}
}
- A) Arithmetic Exception
- B) Finally Block
- C) Arithmetic ExceptionFinally Block
- D) 컴파일 오류 발생
4. 다음 코드에서 catch 블록이 처리할 수 있는 예외는? (정답:C)
public class Test {
public static void main(String[] args) {
try {
String s = null;
System.out.println(s.length());
} catch (ArithmeticException e) {
System.out.println("Arithmetic Exception");
}
}
}
- A) ArithmeticException
- B) NullPointerException
- C) 아무 것도 처리하지 않음
- D) IOException
5. throw와 throws의 차이는 무엇인가요? (정답:B)
- A) 동일한 기능을 수행한다
- B) throw는 예외 발생, throws는 선언
- C) throw는 Checked Exception, throws는 Unchecked Exception
- D) 둘 다 예외를 발생시킨다
6. catch 블록에서 예외 처리 후 프로그램이 실행을 계속하기 위해 필요한 것은? (정답:C)
- A) finally 블록
- B) 예외가 다시 발생하지 않음
- C) 올바른 예외 처리가 이루어짐
- D) 위 모든 것
7. finally 블록이 실행되지 않을 경우는 언제인가요? (정답:C)
- A) 예외가 발생하지 않을 때
- B) 예외가 발생할 때
- C) JVM이 강제 종료될 때
- D) 프로그램이 정상적으로 실행될 때
8. 문제 3 (정답:C)
public class Test {
public static void main(String[] args) {
try {
System.out.println("Try Block");
return;
} finally {
System.out.println("Finally Block");
}
}
}
- A) Try Block
- B) Finally Block
- C) Try BlockFinally Block
- D) 아무 것도 출력되지 않음
9. 문제 4 (정답:A)
public class Test {
public static void main(String[] args) {
try {
throw new Exception();
} finally {
System.out.println("Finally Block");
}
}
}
- A) Finally Block
- B) Exception 발생
- C) Finally BlockException 발생
- D) 아무 것도 출력되지 않음
10. 문제 5 (정답:C)
public class Test {
public static void main(String[] args) {
try {
throw new RuntimeException();
} catch (Exception e) {
System.out.println("Catch Block");
} finally {
System.out.println("Finally Block");
}
}
}
- A) Catch Block
- B) Finally Block
- C) Catch BlockFinally Block
- D) 아무 것도 출력되지 않음
11. Java 8에서 스트림(Stream)의 주요 특징이 아닌 것은? (정답:B)
- A) 지연 연산(Lazy Evaluation)을 지원
- B) 데이터 변경 가능
- C) 병렬 처리 가능
- D) 선언형 스타일
12. 람다 표현식의 문법 중 올바르지 않은 것은? (정답:D)
- A) (x, y) -> x + y
- B) x -> { return x * x; }
- C) (int x) -> { return x * x; }
- D) (x, y) -> { return; x + y; }
13. 다음 스트림 코드에서 출력 결과는? (정답:B)
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream.of(1, 2, 3, 4)
.filter(x -> x % 2 == 0)
.forEach(System.out::print);
}
}
- A) 1234
- B) 24
- C) 13
- D) 2
14. 람다 표현식과 메서드 참조의 차이는? (정답:C)
- A) 람다는 매개변수를 지원하지 않는다
- B) 메서드 참조는 명시적으로 새 메서드를 작성해야 한다
- C) 람다는 메서드 참조보다 유연성이 높다
- D) 메서드 참조는 람다와 동일한 방식으로 작성된다
15. 다음 스트림 코드의 출력 결과는? (정답:A)
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.range(1, 5).reduce(0, Integer::sum);
System.out.println(sum);
}
}
- A) 10
- B) 15
- C) 6
- D) 컴파일 에러
16. Java의 함수형 프로그래밍에서 "고차 함수"란 무엇인가요? (정답:B)
- A) 한 번만 호출되는 함수
- B) 다른 함수를 매개변수로 받거나 반환하는 함수
- C) 정적 메서드를 호출하는 함수
- D) 데이터를 수정하는 함수
17. 다음 코드는 어떤 스트림 연산을 사용하고 있나요? (정답:B)
Stream.of("a", "b", "c")
.map(String::toUpperCase)
.forEach(System.out::println);
- A) 필터링
- B) 매핑
- C) 합산
- D) 병렬 처리
코드 실행 결과 예측 문제 (5개)
문제 1 (정답:B)
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, Integer> length = String::length;
System.out.println(length.apply("Lambda"));
}
}
- A) 5
- B) 6
- C) 7
- D) 컴파일 에러
문제 2 (정답:B)
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c");
list.stream()
.filter(x -> x.equals("b"))
.forEach(System.out::print);
}
}
- A) abc
- B) b
- C) 아무 것도 출력되지 않음
- D) 컴파일 에러
문제 3 (정답:A)
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.range(1, 5)
.map(x -> x * x)
.forEach(System.out::print);
}
}
- A) 14916
- B) 1234
- C) 149
- D) 컴파일 에러
문제 4 (정답:)
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> optional = Optional.of("Lambda");
System.out.println(optional.orElse("Default"));
}
}
- A) Lambda
- B) Default
- C) 컴파일 에러
- D) 아무 것도 출력되지 않음
문제 5 (정답:B)
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream.of("A", "B", "C")
.filter(s -> s.startsWith("B"))
.forEach(System.out::println);
}
}
- A) ABC
- B) B
- C) C
- D) 아무 것도 출력되지 않음
코테
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] notes = new int[8];
for (int i = 0; i < 8; i++) notes[i] = scanner.nextInt();
boolean ascending = true;
boolean descending = true;
for (int i = 1; i < 8; i++) {
if (notes[i] > notes[i - 1]) descending = false;
if (notes[i] < notes[i - 1]) ascending = false;
}
if (ascending) System.out.println("ascending");
else if (descending) System.out.println("descending");
else System.out.println("mixed");
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
String number = scanner.next();
if (number.equals("0")) break;
boolean isPalindrome = true;
int len = number.length();
for (int i = 0; i < len / 2; i++) {
if (number.charAt(i) != number.charAt(len - 1 - i)) {
isPalindrome = false;
break;
}
}
System.out.println(isPalindrome ? "yes" : "no");
}
}
}
'WINK-(Web & App) > JAVA 스터디' 카테고리의 다른 글
[2024-2 Java 스터디] 이민형 #7주차 (7-4장) (0) | 2024.11.28 |
---|---|
[2024-2 Java 스터디] 김민서 #7주차 (0) | 2024.11.27 |
[2024-2 Java 스터디] 김태일 #7주차 (0) | 2024.11.27 |
[2024-2 Java 스터디] 김지나 #7주차 (0) | 2024.11.27 |
[2024-2 Java 스터디] 이민형 #6주차 (7장) (0) | 2024.11.22 |