<명품 JAVA Programming> - Chapter3 연습문제(7, 8, 9, 10, 11, 12)

7. 정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위의 정수를 랜덤하게 생성하여 배열에 저장하라. 그리고 배열에 든 숫자들과 평균을 출력하라.

 

package chapter3;
import java.util.Scanner;
public class chapter3_7 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int arr[] = new int[10];
		int sum = 0;
		double ave = 0;
		System.out.print("랜덤한 정수들: ");
		for(int i = 0; i < 10; i++) {
			arr[i] = (int)(Math.random()*10 + 1);
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		for(int i = 0; i < 10; i++)
			sum += arr[i];
		ave = sum / 10.0;
		
		System.out.println("평균은 " + ave);
		scanner.close();		
	}
}

 


 

8. 정수를 몇 개 저장할지 키보드로부터 개수를 입력받아(100보다 작은 개수) 정수 배열을 생성하고, 이곳에 1에서 100까지 범위의 정수를 랜덤하게 삽입하라. 배열에는 같은 수가 없도록 하고 배열을 출력하라.

 

package chapter3;
import java.util.Scanner;
public class chapter3_8 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int arr[];
		System.out.print("정수 몇개?>>");
		int num = scanner.nextInt();
		
		arr = new int[num];
		int count = 0;
		for(int i = 0; i < num; i++) {
			arr[i] = (int)(Math.random()*100 + 1);	//1에서 100까지 난수 생성
			
			for(int j = 0; j < i; j++) {
				if(arr[i] == arr[j])		//같은 수가 있으면
					i--;				//난수 다시 만들기
			}
		}
		for(int i = 0; i < num; i++) {
			System.out.print(arr[i] + " ");
			count++;
			if(count % 10 == 0) System.out.println();	//10개 출력 되면 개행
		}
		
		scanner.close();
	}
}

 


 

9. 4*4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 랜덤하게 생성하여 정수16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.

 

package chapter3;

public class chapter3_9 {
	public static void main(String[] args) {
		int arr[][] = new int [4][4];
		
		int i, j;
		for(i = 0; i < 4; i++) {
			for(j = 0; j < 4; j++) {
				arr[i][j] = (int)(Math.random()*10 + 1);
				System.out.print(arr[i][j] + "  ");
			}
			System.out.println();
		}
	}
}

 


 

10. 4*4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 10개만 랜덤하게 생성하여 임의의 위치에 삽입하라. 동일한 정수가 있어도 상관없다. 나머지 6개의 숫자는 모두 0이다. 만들어진 2차원 배열을 화면에 출력하라.

 

package chapter3;

public class chapter3_10 {
	public static void main(String[] args) {
		int arr[][] = new int [4][4];
		int count = 0;
		
		int i, j;
		while(count < 16) {
			count++;
			i = (int)(Math.random()*4);		//임의의 위치
			j = (int)(Math.random()*4);		//임의의 위치
			if(arr[i][j] != 0) {		//이미 값이 변경되어 있으면
				count--;				//다시 시도
				continue;
			}
			if(count <= 10)	//수 10개만 집어넣고
				arr[i][j] = (int)(Math.random()*10 + 1);
			else arr[i][j] = 0;
		}
		
		for(i = 0; i < 4; i++) {
			for(j = 0; j < 4; j++) {
				System.out.print(arr[i][j] + "   ");
			}
			System.out.println();
		}
	}
}

 

다시 보니 이미 0으로 초기화된 상태이니 count가 10이 될 때까지만 하면 될 것 같다. if else문이 없어도 될 듯.


 

11. 다음과 같이 작동하는 Average.java를 작성하라. 명령행 인자는 모두 정수만 사용되며 정수들의 평균을 출력한다. 다음 화면은 컴파일된 Average.class 파일을 c:\temp 디렉터리에 복사한 뒤 실행한 경우이다. 원본 Average.class 파일은 이클립스의 프로젝트 폴더 밑에 bin 폴더에 있다.

 

package chapter3;

public class chapter3_11 {
	public static void main(String[] args) {
		int sum = 0;
		double ave;
		for(int i = 0; i < args.length; i++)
			sum += Integer.parseInt(args[i]);
		ave = sum / args.length;
		
		System.out.println(ave);
	}
}

 


 

12. 다음과 같이 작동하는 Add.java를 작성하라. 명령행 인자 중에서 정수만을 골라 합을 구하라.

 

package chapter3;

public class chapter3_12 {
	public static void main(String[] args) {
		int sum = 0;
		for(int i = 0; i < args.length; i++) {
			try {
				sum += Integer.parseInt(args[i]);
			}
			catch(NumberFormatException e) {}
		}
		System.out.println(sum);
	}
}