자바의 정석 3판

HEUKWU·2022년 12월 17일
0

자바의 정석

목록 보기
1/1

자바의 정석 3판 연습문제 풀이

3장

[3-6]

변수 num의 값보다 크면서도 가장 가까운 10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다. 예를 들어, 24의 크면서도 가장 가까운 10의 배수는 30이 다. 19의 경우 20이고, 81의 경우 90이 된다. 30에서 24를 뺀 나머지는 6이기 때문에 변 수 num의 값이 24라면 6을 결과로 얻어야 한다.

public class Java {
    public static void main(String[] args) {
        int num = 81;
        System.out.println((num/10 + 1) * 10 - num);
        System.out.println(10 - num % 10);
    }
}

[3-7]

아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다. 변환공식이 'C = 5/9 ×(F - 32)'라고 할 때, (1)에 알맞은 코드를 넣으시오. 단, 변환 결과값은 소수점 셋째자리에서 반올림해야한다.(Math.round()를 사용하지 않고 처리할 것)

public class Java {
    public static void main(String[] args) {
        int fahrenheit = 100;
        float celcius = (int)(5 / 9f * (fahrenheit - 32) * 100 + 1) / 100f;
        System.out.println("fahrenheit = " + fahrenheit);
        System.out.println("celcius = " + celcius);
    }
}

[3-10]

다음은 대문자를 소문자로 변경하는 코드인데, 문자 ch에 저장된 문자가 대문자 인 경우에만 소문자로 변경한다.

public class Java {
    public static void main(String[] args) {
        char ch = 'A';

        char lowerCase = 'A' <= ch && ch <= 'Z' ? (char) (ch + 32) : ch;
        System.out.println("ch = " + ch);
        System.out.println("lowerCase = " + lowerCase);
    }
}

4장

[4-3]

1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+10)의 결과를 계산하시오.

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        int sum2 = 0;
        for (int i = 1; i <= 10; i++) {
            sum += i;
            sum2 += sum;
        }
        System.out.println(sum2);
    }
}

[4-4]

1+(-2)+3+(-4)+... 과 같은 식으로 계속 더해나갔을 때, 몇까지 더해야 총합이 100이상이 되는지 구하시오.

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; true; i++) {
            if (i % 2 == 0) {
                sum += -i;
            } else {
                sum += i;
            }
            if (sum >= 100) {
                System.out.println(i);
                System.out.println(sum);
                break;
            }
        }
    }
}
public class Java {
    public static void main(String[] args) {
        int sum = 0;
        int s = 1;
        for (int i = 1; true; i++) {
            sum += (i * s);
            s = -s;
            if (sum >= 100) {
                System.out.println(sum);
                System.out.println(i);
                break;
            }
        }
    }
}

[4-5]

다음의 for문을 while문으로 변경하시오.

public class Exercise4_5 {
	public static void main(String[] args) {
		for(int i=0; i<=10; i++) { 
        	for(int j=0; j<=i; j++)
               System.out.print("*");
        	System.out.println();
		} 
	}//end of main
} // end of class
public class Main {
    public static void main(String[] args) {
        int i = 0;
        while (i <= 10) {
            int j = 0;
            while (j <= i) {
                System.out.print("*");
                j++;
            }
            i++;
            System.out.println();
        }
    }
}

[4-6]

두개의주사위를던졌을때,눈의합이6이되는모든경우의수를출력하는프 로그램을 작성하시오.

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i < 7; i++) {
            for (int j = 1; j < 7; j++) {
                sum = i + j;
                if (sum == 6) {
                    System.out.println(i + " + " + j + " = " + sum);
                }
            }
        }
    }
}

[4-9]

숫자로 이루어진 문자열 str이 있을 때, 각 자리의 합을 더한 결과를 출력하는 코 드를 완성하라. 만일 문자열이 "12345"라면, ‘1+2+3+4+5’의 결과인 15를 출력이 출력되 어야 한다. (1)에 알맞은 코드를 넣으시오.

public class Main {
    public static void main(String[] args) {
        String str = "12345";
        int sum = 0;

        for (int i = 0; i < str.length(); i++) {
            sum += str.charAt(i) - '0';
        }

        System.out.println("sum = " + sum);
    }
}

[4-10]

int타입의 변수 num 이 있을 때, 각 자리의 합을 더한 결과를 출력하는 코드를 완성하라. 만일 변수 num의 값이 12345라면, ‘1+2+3+4+5’의 결과인 15를 출력하라.

public class Java {
    public static void main(String[] args) {
        int num = 12345;
        int sum = 0;
        int t = 10000;
        int a = 0;

        while (true) {
            if (t < 1) {
                break;
            }
            if (t == 10000) {
                a = num / t;
            } else {
                a = num / t  % 10;
            }
            t /= 10;
            sum += a;
        }
        System.out.println(sum);
    }
}
public class Java {
    public static void main(String[] args) {
        int num = 12345;
        int sum = 0;

        int a = 0;

        while (num > 0) {
            sum += num % 10;
            num /= 10;
        }
        System.out.println(sum);

    }
}

[4-11]

1과 1부터 시작하는 피보나치수열의 10번째 수는 무엇인지 계산하는 프로그램을 완성하시오.

public class Main {
    public static void main(String[] args) {
        int num1 = 1;
        int num2 = 1;
        int num3 = 0;
        System.out.print(num1 + ", " + num2);

        for (int i = 0; i < 8; i++) {
            num3 = num1 + num2;
            System.out.print(", " + num3);
            num1 = num2;
            num2 = num3;
        }
    }
}

[4-12]

구구단의 일부분을 다음과 같이 출력하시오.

public class Main {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 4; j++) {
                int x = j + 1 + (i - 1) / 3 * 3;
                int y = i % 3 == 0 ? 3 : i % 3;

                if (x > 9) {
                    break;
                }

                System.out.print(x + " * " + y + " = " + x * y + "\t");
            }
            System.out.println();
            if (i % 3 == 0) {
                System.out.println();
            }
        }
    }
}

[4-13]

다음은 주어진 문자열(value)이 숫자인지를 판별하는 프로그램이다. (1)에 알맞 은 코드를 넣어서 프로그램을 완성하시오.

public class Main {
    public static void main(String[] args) {
        String value = "12ㅇ34";
        char ch = ' ';
        boolean isNumber = true;

        for (int i = 0; i < value.length(); i++) {
            int j = 0;
            ch = value.charAt(i);
            if (!(0 <= ch - '0' && ch - '0' <= 9)) {
                j++;
            }
            if (j != 0) {
                isNumber = false;
            }
        }

        if (isNumber) {
            System.out.println(value + "는 숫자입니다.");
        } else {
            System.out.println(value + "는 숫자가 아닙니다.");
        }
    }
}

charAt()를 이용해서 한 글자씩 검사했다.
j라는 변수를 0으로 초기화 한 후, 만약 숫자가 아니라면 j값을 증가시켰다.
문자열에 숫자가 아닌 문자가 하나라도 있을경우, j의 값은 0이 아니다.
따라서 if문을 추가해 j가 0이 아니라면 isNumberfalse가 되게했다.

해설지 답안

public class Java {
    public static void main(String[] args) {
        String value = "12ㅇ34";
        char ch = ' ';
        boolean isNumber = true;

        for (int i = 0; i < value.length(); i++) {
            ch = value.charAt(i);
            if (!(0 <= ch - '0' && ch - '0' <= 9)) {
                isNumber = false;
                break;
            }
        }

        if (isNumber) {
            System.out.println(value + "는 숫자입니다.");
        } else {
            System.out.println(value + "는 숫자가 아닙니다.");
        }
    }
}

문자 검사 중 숫자가 아닌 문자를 만나면 isNumberfalse로 바꾸고 break를 이용해 for문을 빠져나온다.
반목문의 break를 이용하면 훨씬 간단한 일이었다.

0개의 댓글

관련 채용 정보