5-1 다음은 배열을 선언하거나 초기화한 것이다. 잘못된 것을 고르고 그 이유를 설명 하시오.
a. int[] arr[]; //가능
b. int[] arr = {1,2,3,}; //가능
c. int[] arr = new int[5]; //가능
d. int[] arr = new int[5]{1,2,3,4,5}; //불가능, 두번째 대괄호에 숫자넣으면 안됨
e. int arr[5]; //불가능, 선언할 때는 배열의 크기 지정X
f. int[] arr[] = new int[3][];//가능
5-6 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변 수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하 라. 단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
[Hint] 나눗셈 연산자와 나머지 연산자를 사용해야 한다.
public class ex5_6 {
public static void main(String[] args) {
//큰 금액의 동전을 우선적으로 거슬러 줘야한다
int [] coinUnit = {500,100,50,10};
int money =2680;
System.out.println("money="+money);
for(int i = 0; i< coinUnit.length; i++){
System.out.println(coinUnit[i]+"원: "+(money/coinUnit[i]));
money=money%coinUnit[i];
}
}
}
실행결과
money=2680
500원: 5
100원: 1
50원: 1
10원: 3
5-7 문제 5-6에 동전의 개수를 추가한 프로그램이다. 커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다. 보유한 동전의 개수로 거스름돈을 지불할 수 없으면, ‘거스름 돈이 부족합니다.’라고 출력하고 종료한다. 지불할 돈이 충분히 있으면, 거스름돈을 지불 한 만큼 가진 돈에서 빼고 남은 동전의 개수를 화면에 출력한다. (1)에 알맞은 코드를 넣 어서 프로그램을 완성하시오.
public class ex5_7 {
public static void main(String[] args) {
if(args.length!=1){
System.out.println("USAGE: java Exercise5_7 3120");
System.exit(0);
}
//문자열을 숫자로 변환한다. 입력한 값이 숫자가 아닐 경우 예외가 발생한다.
int money = Integer.parseInt(args[0]);
System.out.println("money="+money);
int [] coinUnit ={500,100,50,10};//동전의 단위
int [] coin = {5,5,5,5}; //단위별 동전의 개수
for(int i=0; i<coinUnit.length; i++){
int coinNum=0;
//1.금액(money)을 동전단위로 나눠서 필요한 동전의 개수(coinNum)를 구한다
//답
coinNum=money/coinUnit[i];
//2.배열 coin에서 coinNum만큼의 동전을 뺀다
//만일 충분한 동전이 없다면 배열 coin에 있는 만큼만 뺀다
//답
if(coin[i]>=coinNum){
coin[i]-=coinNum;
}else {
coinNum=coin[i];
coin[i]=0;
}
//내가 쓴 답, 1번과 2번이 합쳐짐
// if((money/coinUnit[i])>coin[i]) {
// coinNum = coin[i];
// } else
// coinNum=money/coinUnit[i];
//
// coin[i]=coin[i]-coinNum;
//3.금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다
money=money-coinNum*coinUnit[i];
System.out.println(coinUnit[i]+"원:"+coinNum);
}
if(money>0){
System.out.println("거스름돈이 부족합니다.");
System.exit(0);
}
System.out.println("=남은 동전의 개수 =");
for(int i=0; i<coinUnit.length; i++){
System.out.println(coinUnit[i]+"원:"+coin[i]);
}
}
}
실행결과:
C:\jdk1.8\work\ch5>java Exercise5_7 USAGE: java Exercise5_7 3120
C:\jdk1.8\work\ch5>java Exercise5_7 3170 money=3170
500원: 5
100원: 5
50원: 3
10원: 2
=남은 동전의 개수 = 500원:0
100원:0
50원:2
10원:3
C:\jdk1.8\work\ch5>java Exercise5_7 3510 money=3510
500원: 5
100원: 5
50원: 5
10원: 5
거스름돈이 부족합니다.
5-9 주어진 배열을 시계방향으로 90도 회전시켜서 출력하는 프로그램을 완성하시오.
public class ex5_9 {
public static void main(String[] args) {
char[][] star={
{'*','*',' ',' ',' '},
{'*','*',' ',' ',' '},
{'*','*','*','*','*'},
{'*','*','*','*','*'}
};
char[][] result=new char[star[0].length][star.length];
for(int i=0; i< star.length; i++){
for(int j=0; j<star[i].length; j++){
System.out.print(star[i][j]);
}
System.out.println();
}
System.out.println();
for(int i=0; i< star.length; i++){//4까지
for(int j=0; j<star[i].length; j++){//5까지
//result[j][i]=star[3-i][j]; //3은 star.length임, star.length는 4니까 1빼야 함,
result[j][i]=star[star.length-1-i][j];
}
}
for(int i=0; i<result.length; i++){
for(int j=0; j<result[i].length; j++){
System.out.print(result[i][j]);
}
System.out.println();
}
}
}
실행결과:
**
**
*****
*****
****
****
**
**
**
- 행을 숫자 순서대로 찍어주면 원하는 값이 나온다
5-10 다음은 알파벳과 숫자를 아래에 주어진 암호표로 암호화하는 프로그램이다.
(1)에 알맞은 코드를 넣어서 완성하시오.

public class ex5_10 {
public static void main(String[] args) {
char[] abcCode=
{'`','~','!','@','#','$','%','^','&','*',
'(',')','-','_','+','=','|','[',']','{',
'}',';',':',',','.','/'};
char [] numCode={'q','w','e','r','t','y','u','i','o','p'};
String src="abc123";
String result="";
//문자열 src의 문자를 charAt()으로 하나씩 읽어서 변환 후 result에 저장
for(int i=0; i<src.length(); i++){
char ch=src.charAt(i);
if(ch>='a'&&ch<='z'){
result+=abcCode[ch-'a'];
}else if(ch>='0'&&ch<='9')
result+=numCode[ch-'0'];
}
System.out.println("src:"+src);
System.out.println("result:"+result);
}
}
실행결과:
src:abc123 result:` ~!wer
5-12 예제5-23을 변경하여, 아래와 같은 결과가 나오도록 하시오.
import java.util.Scanner;
public class ex5_12 {
public static void main(String[] args) {
String [][] words={
{"chair","의자"},
{"computer","컴퓨터"},
{"integer","정수"}
};
Scanner sc=new Scanner(System.in);
int count=0;
for(int i=0; i<words.length; i++){
System.out.printf("Q%d %s의 뜻은? ",i+1,words[i][0]);
String tmp=sc.nextLine();
if(tmp.equals(words[i][1])){
System.out.printf("정답입니다. %n%n");
count++;
}else {
System.out.printf("틀렸습니다. 정답은 %s 입니다. %n%n",words[i][1]);
}
}
System.out.printf("전체 %d문제 중 %d문제 맞추셨습니다",words.length,count);
}
}
실행결과:
Q1. chair의 뜻은? dmlwk
틀렸습니다. 정답은 의자입니다
Q2. computer의 뜻은? 컴퓨터
정답입니다.
Q3. integer의 뜻은? 정수
정답입니다.
전체 3문제 중 2문제 맞추셨습니다.
[5-13] 단어의 글자위치를 섞어서 보여주고 원래의 단어를 맞추는 예제이다. 실행결과와 같이 동작하도록 예제의 빈 곳을 채우시오.
import java.util.Scanner;
public class ex5_13 {
public static void main(String[] args) {
String[] words={"television","computer","mouse","phone"};
Scanner scanner=new Scanner(System.in);
for(int i=0; i<words.length ;i++){
char[] question= words[i].toCharArray(); //String을 cher[]로 변환
for(int j=0; j< question.length; j++){
int k=(int)Math.random()* question.length+1;
char temp=question[j];
question[j]=question[k];
question[k]=temp;
}
System.out.printf("Q%d. %s의 정답을 입력하세요.>",i+1,new String(question));
String answer=scanner.nextLine();
//trim()으로 answer의 좌우 공백을 제거한 후, equals로 word[i]와 비교
if(words[i].equals(answer.trim()))
System.out.printf("맞았습니다.%n%n");
else
System.out.printf("틀렸습니다.%n%n");
}
}
}
실행결과:
Q1. lvtsieeoin의 정답을 입력하세요.>television
맞았습니다.
Q2. otepcumr의 정답을 입력하세요.>computer
맞았습니다.
Q3. usemo의 정답을 입력하세요.>asdf
틀렸습니다.
Q4. ohpne의 정답을 입력하세요.>phone
맞았습니다.