3장 실습문제 1번 : 다음 프로그램에 대해 물음에 답하라
int sum = 0, i = 0;
while (i < 100) {
sum = sum + i;
i += 2;
}
System.out.println(sum);
3-1-1. 무엇을 계산하는 코드이며 실행 결과 출력되는 내용은?
while문 안에서 2의 배수를 계속 합산해 가는 프로그램이며 i가 100이 되면 멈추고 2450이 출력된다.
3-1-2. 위의 코드를 mail() 메소드로 만들고 WhileTest 클래스로 완성하라
public class WhileTest {
public static void main(String[] args) {
int sum = 0, i = 0;
while (i < 100) {
sum = sum + i;
i += 2;
}
System.out.println(sum);
}
}
3-1-3. for문을 이용하여 동일하게 실행되는 ForTest 클래스를 작성하라
public class ForTest {
public static void main(String[] args) {
int sum = 0;
for(int i=0; i<100; i+=2) {
sum = sum + i;
}
System.out.print(sum);
}
}
3-1-4. do-while 문을 이용하여 동일하게 실행되는 DoWhileTest 클래스를 작성하라
public class DoWhileTest {
public static void main(String[] args) {
int sum = 0, i = 0;
do {
sum = sum + i;
i += 2;
} while (i<100);
System.out.print(sum);
}
}
3장 실습문제 2번 : 다음 2차원 배열 n을 출력하는 프로그램을 작성하라
**2차원 배열?
int n [] 형태의 1차원 배열은 한 줄로 이어지는 배열의 형태라고 한다면
n[0]
|
n[1]
|
n[2]
|
n[3]
|
n[4]
|
n[5]
|
int n [2] [5] 형태의 2차원 배열은 다중 줄로 이어지는 배열의 형태
n[0][0]
|
n[0][1]
|
n[0][2]
|
n[0][3]
|
n[0][4]
|
n[1][0]
|
n[1][1]
|
n[1][2]
|
n[1][3]
|
n[1][4]
|
int n [][] = {{1}, {1,2,3}, {1}, {1,2,3,4}, {1,2}};
문제로 주어진 2차원 배열은 아래와 같은 2차원 배열로 형성되어 있다.
1
|
|
|
|
1
|
2
|
3
|
|
1
|
|
|
|
1
|
2
|
3
|
4
|
1
|
2
|
|
|
public class Ex3_2 {
public static void main(String[] args) {
int n [][] = {{1}, {1,2,3}, {1}, {1,2,3,4}, {1,2}};
//첫번째 값 i를 행, 두번재 값 j를 열로 생각하여 중첩반복문을 작성
//i 값이 배열 n의 길이만큼 될때까지 반복
for(int i=0; i<n.length; i++) {
//j 값이 배열 n[i]의 길이만큼 될때까지 반복
for(int j=0; j<n[i].length; j++)
System.out.print(n[i][j]); //출력
System.out.println(); //줄바꿈
}
}
}
3장 실습문제 3번 : scanner를 이용하여 정수를 입력받고 입력받은 정수만큼 *를 다음과 같이 출력하는 프로그램
*****
****
***
**
*
public class Ex3_3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("0 이상 정수를 입력하세요 >> ");
int a = sc.nextInt();
for(int i=0; i<a; i++) {
for(int j=a; j>i; j--)
System.out.print("*");
System.out.println();
}
}
}
3장 실습문제 4번 : scanner를 이용하여 소문자 알파벳을 하나 입력받고 다음과 같이 출력하는 프로그램
abcde
abcd
abc
ab
a
public class Ex3_4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("소문자 알파벳을 입력하세요 >> ");
String x = sc.next();
char y = x.charAt(0);
for(int i=y-'a'; i>=0; i--){
for(int j=0; j<=i; j++)
System.out.print((char)('a'+j));
System.out.println();
}
}
}
3장 실습문제 5번 : 양의 정수를 10개 입력받아 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력하는 프로그램
public class Ex3_5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("양의 정수 10개를 입력하세요 >> ");
int n [] = new int[10];
for(int i=0; i<10; i++) {
n [i] = sc.nextInt();
if (n[i]%3==0)
System.out.println(n[i]);
}
}
}
3장 실습문제 6번 : 배열과 반복문을 이용하여 프로그램을 작성해보자. 키보드에서 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전이 각 몇 개로 변환되는지 출력한다.
(반드시 다음 배열을 이용하고 반복문으로 작성하라)
int [] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1};
public class Ex3_6 {
public static void main(String[] args) {
int [] unit = {50000,10000,1000,500,100,50,10,1};
Scanner sc = new Scanner(System.in);
System.out.println("금액을 입력하세요 >> ");
int money = sc.nextInt();
for(int i=0; i<unit.length; i++) {
System.out.println(unit[i]+"는 "+money/unit[i]+"개 필요합니다.");
money = money%unit[i];
}
}
}
3장 실습문제 7번 : 정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위의 정수를 랜덤하게 생성하여 배열에 저장하라. 그리고 배열에 든 숫자들과 평균을 출력하라.
public class Ex3_7 {
public static void main(String[] args) {
int n [] = new int [10];
//평균은 실수형태로도 나올 수 있기 때문에 double로 선언
double sum = 0;
for(int i=0; i<n.length; i++) {
//Math.random()는 0과 1사이의 난수를 생성
//Math.random()*10은 0-10 사이(10 미포함)의 난수 생성
//따라서 1-10의 숫자를 생성해야한다면 Math.random()*10+1
//난수 형태이기 때문에 정수를 얻으려면 int로 강제 형변환
n[i] = (int)(Math.random() * 10 + 1);
}
System.out.println("랜덤한 정수들 : ");
for(int i=0; i<n.length; i++) {
//배열에 저장되어 있는 정수 하나씩 출력
System.out.print(n[i]+" ");
//sum에 하나씩 합산
sum += n[i];
}
System.out.println();
System.out.println("평균은 "+sum/n.length+"입니다.");
}
}
3장 실습문제 8번 : 정수를 몇 개 저장할지 키보드로부터 개수를 입력받아(100보다 작은 개수) 정수 배열을 생성하고, 이곳에 1에서 100까지 범위의 정수를 랜덤하게 삽입하라. 배열에는 같은 수가 없도록 하고 배열을 출력하라.
public class Ex3_8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("생성할 정수의 개수를 입력하세요(100미만) >> ");
int a = sc.nextInt();
int n[] = new int [a];
for(int i=0; i<n.length; i++) {
n[i] = (int)(Math.random()*100+1);
for(int j=0; j<i; j++) {
//원래 짰던 코드는 while문 없이 if문으로만 break;를 넣었는데
//그렇게되면 중복값이 지정된 경우 j값이 초기화가 되지 않는 오류가 생긴다
while(true) {
if(n[i] != n[j])
break;
else {
n[i] = (int)(Math.random()*100+1);
j=0;
}
}
}
}
for (int i=0; i<n.length; i++) {
System.out.println(n[i]+" ");
}
sc.close();
}
}
3장 실습문제 9번
4X4의 2차원 배열을 만들고 이곳에 1에서 10까지의 범위의 정수를 랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.
public class Ex3_9 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr [][] = new int[4][4];
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
arr[i][j]=(int)(Math.random()*10+1);
System.out.print(arr[i][j]);
//꼭 필요한건 아니지만 예쁘게 정리하기 위해!
if (arr[i][j]<10) System.out.print(" ");
else System.out.print(" ");
}
System.out.println();
}
}
}
3장 실습문제 10번
4X4의 2차원 배열을 만들고 1에서 10까지 범위의 정수를 10개만 랜덤하게 생성하여 임의의 위치에 삽입하라. 동일한 정수가 있어도 상관 없고, 나머지 6개의 숫자는 모두 0이다. 만들어진 배열을 출력하라.
public class Ex3_10 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr [][] = new int[4][4];
int count=0;
int temp=0;
//배열에 들어갈 0 6개를 미리 지정
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
//0 또는 1을 랜덤 생성하여 temp에 저장
temp=(int)(Math.random()*2);
//0이 나오면 count 증가
if(temp==0) count++;
//count가 7이 되면 나머지는 1 저장
if(count>=7) arr[i][j]=1;
//아직 0이 6개 저장되지 않았다면 다시 랜덤 지정
else arr[i][j]=temp;
}
}
//1이 저장된 배열에 1부터 10까지의 정수 랜덤 저장
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
if(arr[i][j]==1) {
arr[i][j] = (int)(Math.random()*10+1);
}
//예쁘게 정리해주기
if(arr[i][j]==10) System.out.print(arr[i][j]+" ");
else System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
*실패한 코드 ㅠㅠ
public class Ex3_10 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr [][] = new int[4][4];
int count=0;
//배열 행과 열을 랜덤 지정
while(true) {
int i = (int)(Math.random()*4);
int j = (int)(Math.random()*4);
arr[i][j] = (int)(Math.random()*10+1);
count++;
if(count > 10)
break;
}
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
실패했던 코드의 문제점 : int i와 int j를 랜덤하게 지정했을 때, 위치가 중복되어 배열의 한 위치에 두 번 이상 값이 입력되는 경우가 발생하였다. 그래서 0의 개수가 6개가 넘게 나오도록 출력되었고 위 코드를 쓰려면 배열 위치가 중복되어 지정되지 않도록 하는 방법을 생각해야 해결할 수 있을 것 같다.
3장 실습문제 11번
Average.java 작성하라. 명령행 인자는 모두 정수만 사용되며 정수들의 평균을 출력한다.
*저는 편의상 Ex3_11.java로 작성했습니다
public class Ex3_11 {
public static void main(String[] args) {
if(args.length == 0) {
System.out.println("입력된 정수가 없습니다.");
return;
}
int sum = 0;
for(int i=0; i<args.length; i++) {
//String으로 받아온 숫자를 Integer로 형변환 해주어야 한다
sum += Integer.parseInt(args[i]);
}
System.out.println((double)sum/args.length);
}
}
Run Configurations 로 확인!
3장 실습문제 12번
Add.java를 작성하라. 명령행 인자 중에서 정수 만을 골라 합을 구한다.
*저는 편의상 Ex3_12.java로 작성했습니다
public class Ex3_12 {
public static void main(String[] args) {
if(args.length == 0) {
System.out.println("입력된 정수가 없습니다.");
return;
}
int sum = 0;
for(int i=0; i<args.length; i++) {
//정수가 아닌 다른 값이 입력될 경우 오류가 발생할 가능성이 있음
try {
sum += Integer.parseInt(args[i]);
}
//정수가 아닌 다른 값이 입력된 경우 오류 출력하지 않고 계속 반복문 수행
catch (NumberFormatException e) {
continue;
}
}
System.out.println(sum);
}
}
Run Configurations 로 확인!
3장 실습문제 13번
반복문을 이용하여 369게임에서 박수를 쳐야 하는 경우를 순서대로 출력한다. ( 1부터 99까지 )
public class Ex3_13 {
public static void main(String[] args) {
int count = 0;
for(int i=0; i<100; i++) {
if (i%10==3 || i%10==6 || i%10==9) {
count++;
if (i/10==3 || i/10==6 || i/10==9) {
count++;
}
}
if (count == 1) {
System.out.println(i+" 박수 짝");
}
else if (count == 2) {
System.out.println(i+" 박수 짝짝");
}
count = 0;
}
}
}
3장 실습문제 14번
다음 코드와 같이 과목과 점수가 짝을 이루도록 2개의 배열을 작성하라.
그리고 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다.
String course [] = { "Java", "C++", "HTML5", "컴퓨터구조", "안드로이드" };
int score [] = {95, 88, 76, 62, 55};
public class Ex3_14 {
public static void main(String[] args) {
String course [] = { "Java", "C++", "HTML5", "컴퓨터구조", "안드로이드" };
int score [] = {95, 88, 76, 62, 55};
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("과목을 입력하세요 >> ");
String sub = sc.next();
if(sub.equals("그만")) break;
for(int i=0; i<course.length; i++) {
if(course[i].equals(sub)) {
System.out.println(course[i]+"의 점수는 "+score[i]);
break;
}
else if(i==course.length) System.out.println("없는 과목입니다.");
}
}
}
}
3장 실습문제 15번
2개의 정수를 입력받아 곱을 구한다. 실수가 입력되면 정수를 다시 입력하도록 하여 예외 없이 정상적으로 처리되도록 예외 처리 코드를 삽입하여 Multiply 클래스를 수정하라.
*저는 편의상 Ex3_15.java로 작성했습니다
public class Ex3_15 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("곱하고자 하는 두 정수 >> ");
while(true) {
try {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a+"*"+b+"="+a*b);
break;
}
catch (InputMismatchException e) {
System.out.println("정수를 입력하세요");
sc.next();
}
}
}
}
3장 실습문제 16번
컴퓨터와 독자 사이의 가위 바위 보 게임을 만들어보자. 독자가 가위 바위 보 중 하나를 입력하고 <Enter>키를 치면 프로그램은 가위 바위 보 중에서 랜덤하게 하나를 선택하고 컴퓨터가 낸 것으로 한다. 누가 이겼는지 판단하고 독자가 "그만"을 입력하면 게임이 끝난다.
public class Ex3_16 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("가위바위보! >> ");
String x = sc.next();
String y = null;
//그만을 입력하면 게임을 종료한다
if(x.equals("그만")) {System.out.println("게임을 종료합니다.");break;}
//컴퓨터가 낼 가위바위보 지정하기
int a = (int)(Math.random()*3);
if(a == 0) y = "가위";
else if(a == 1) y = "바위";
else if(a == 2) y = "보";
//비교 후 승자 판단하기
if(x.equals("가위") && y.equals("가위")
|| x.equals("바위") && y.equals("바위")
|| x.equals("보") && y.equals("보")) {
System.out.println("독자 : "+x+", 컴퓨터 : "+y);
System.out.println("비겼습니다.");
}
else if(x.equals("가위") && y.equals("보")
|| x.equals("바위") && y.equals("가위")
|| x.equals("보") && y.equals("바위")) {
System.out.println("독자 : "+x+", 컴퓨터 : "+y);
System.out.println("독자님이 이겼습니다.");
}
else if(x.equals("가위") && y.equals("바위")
|| x.equals("바위") && y.equals("보")
|| x.equals("보") && y.equals("가위")) {
System.out.println("독자 : "+x+", 컴퓨터 : "+y);
System.out.println("컴퓨터가 이겼습니다.");
}
}
}
}
'개발자 세릴리 > JAVA' 카테고리의 다른 글
[JAVA] 명품자바프로그래밍 6장 실습 (0) | 2023.03.16 |
---|---|
[JAVA] 명품자바프로그래밍 5장 실습 (0) | 2023.03.13 |
[JAVA] 명품자바프로그래밍 4장 실습 (0) | 2023.02.28 |
[JAVA] 명품자바프로그래밍 2장 실습 (0) | 2023.02.23 |