본문 바로가기
공부 기록/JAVA

[java] 실습_random 클래스 + 배열 연산

by 윤wander 2021. 4. 7.
728x90
728x90

 1. Random 클래스를 이용하여 0~10까지 임의 숫자를 11개를 배열에 채운 다음 배열의 첫번째 숫자는 0, 두번째 숫자는 1로 순차적으로 10까지 나누어 합계를 구하시오. 정수를 0으로 나눌 경우 발생하는 예외처리를 하시오.

 > 1차시도

더보기
public class RandomArray {
	public static void main(String[] args) {
		int p[][];		//배열 선언
		p = new int[1][11];	
		int sum=0;	//합 선언
		
		// 11개의 정수를 랜덤하게 발생 + 저장
		for(int i=0; i<1; i++)
			for(int j=0; j<11; j++)
				p[i][j] = (int)(Math.random()*11);
		
		// 배열 출력
		for(int i=0; i < p.length; i++) {
			for(int j=0; j < p[i].length; j++)
				System.out.print(p[i][j] + " ");
			System.out.println();}
		
		//배열의 첫번째 숫자는 0, 두번째 숫자는 1로 순차적으로 10까지 나누기
		for(int i=0; i<1; i++){
			for(int j=0; j<11; j++)
				for(int m=0; m<10; m++) {
					System.out.print(p[i][j]/m + " ");
		System.out.println();	}}
		
		
		//나눈 배열의 원소 합계
		for(int i=0; i<1; i++){
			for(int j=0; j<11; j++)
					sum += p[i][j];
		System.out.println();	}
		System.out.println("합계 >> " + sum);
	}
}

 

배열 출력까지는 괜찮은데 0나누기 시 예외 발생으로 강제 종료.

​ > 2차시도

더보기
public class test {
	public static void main(String[] args) {
		int p[][];		//배열 선언
		p = new int[1][11];	
		int n=0;
		int sum=0;	//합 선언
		
		// 11개의 정수를 랜덤하게 발생 + 저장
		for(int i=0; i<1; i++)
			for(int j=0; j<11; j++)
				p[i][j] = (int)(Math.random()*11);
		
		// 배열 출력
		for(int i=0; i < p.length; i++) {
			for(int j=0; j < p[i].length; j++)
				System.out.print(p[i][j] + " ");
			System.out.println();	
			System.out.println("배열의 첫번째 숫자는 0, 두번째 숫자는 1로 순차적으로 10까지 나누어 합계를 구하시오.");	
			System.out.println();	}
		
		//배열의 첫번째 숫자는 0, 두번째 숫자는 1로 순차적으로 10까지 나누기
		for(int m=0; m<10; m++) 
			for(int i=0; i<1; i++)
				for(int j=0; j<11; j++){
				try{if(p[i][j]>=1) {
						n=p[i][j]/m; 
						System.out.print(n + " "); }
					else {
						n=p[i][j];
						System.out.print(n + " "); }}
				catch(ArithmeticException e) {}}
	
		//나눈 배열의 원소 합계
		for(int i=0; i<1; i++){
			for(int j=0; j<11; j++)
					sum += p[i][j];
		System.out.println();	}
		System.out.println("합계 >> " + sum);
	}	}

원인: for문 3번 반복

해결: 나누기 연산 결과를 나타낼 배열 하나 더 만들기 = b[][] 

간략ver  (배열 발생 후 연산처리까지 끝내고 배열 저장.)

public class RandomArray2 {
	public static void main(String[] args) {
		int a[];		//배열 선언
		a = new int[11];	
		int sum=0;	//합 선언
		
		// 11개의 정수를 랜덤하게 발생 + 저장 + 나누기 연산
		for(int i=0; i<11; i++)
			for(int j=0; j<10; j++)
				try{	a[i] = (int)(Math.random()*11)/j;	}
				catch(ArithmeticException e) {} //예외 처리 코드
		
		// 배열 출력
		for(int i=0; i < a.length; i++)
				System.out.print(a[i] + " ");
			System.out.println();
				
		// 배열의 원소 합계
		for(int i=0; i<11; i++)
					sum += a[i];
		System.out.println();	
		System.out.println("합계 >> " + sum);
	}
}	

1번 출력

 

2. 1번 문제의 배열을 숫자가 중복되지 않게 만드시오.

 


 

> 1번 문제에서 정수를 0으로 나눌 경우 발생하는 예외처리를 안 하면? 실행 중 강제 종료

 

> 1번 문제에서 나누기 연산하지 않은 배열 출력 시

1-1
1-1 출력

 

> 2번 문제에서 나누기 연산하지 않은 배열 출력 시

 

728x90
728x90

댓글