JAVA 배열

강정우·2022년 7월 1일
0

JAVA

목록 보기
9/31
post-thumbnail

7/1 강의

  1. 어제 낙뢰로 인하여 수업을 하지 않았다.
  2. 오늘 어제 못 다한 반복문 예제와 배열에 대해 배웠다.
  3. SQL은 예제 약 20문제를 풀었다.

#8 JAVA 복습

1. 3항 연산자 " ? "

  • 기본이고 배웠지만 자주 쓰지 않다 보니 적용을 하는데 있어 깜빡했다.
  • 문제 : 2~30의 약수를 순서대로 출력하시오.
  • 분석 : 없음
  • 문제점 : 없음
  • 해결 :
  • 코드 :
public class 2_30약수 {
	public static void main(String[] args) {
		for (int i = 2; i <= 30; i++) {	//2~30회까지
			System.out.print(i + "의 약수: "); 
			for (int j = 1; j <= i; j++) {	//j로 돌면서 약수를 출력
				System.out.print(i % j == 0 ? j + " " : ""); // 3항 연산자를 
			}	// 이용한 print문 
			System.out.println("");
		}
	}
}

2. 자료구조

  • Queue : 원기둥형 자료구조로 push를 하면 순서대로 자료가 pop되는 선입선출의 개념을 가짐 (FIFO 구조)
  • Tree : HTML처럼 생긴 구조로 전체 기둥 하나에서 여러 가지로 뻗어나가는 data구조
  • List
  • Stack : 비커모양의 자료구조로 push를 하면 차곡차곡 쌓여 pop을 한다면 가장 최근 data부터 나가짐. 선인후출의 구조(FILO) 이것은 Android에서 많이 쓰이는 구조임.
  • Array : 옆으로 순차적으로 쌓이는 자료구조 reperence 자료형이라 볼 수 있음.

3. 배열 선언 및 출력

  • 배열이란 같은 타입의 여러 번수를 하나의 묶음으로 나누는 것.
  • index와 index에 대응하는 data들로 이루어진 자료구조임.
  • data들이 옆으로 순차적으로 쌓이며 반복문을 이용하여 처리하기 적합한 자료구조
  1. 선언 : 생성자 생성후 각 index값에 value 저장
  2. 선언 및 생성 : 중괄호로 감싸면서 선언과 동시에 배열 생성
  3. 출력(1) : print 문을 하나하나 찍어봄
  4. 출력(2) : for문을 돌면서 출력함
  5. 출력(3) : Arrays.toString method를 이용함.

4. 배열의 주소값

import java.util.Arrays;

public class ArrayAddress {

	public static void main(String[] args) {
		int[] array1 = { 10, 20, 30, 40, 50 };
		System.out.println("길이: " + array1.length);
		System.out.println(array1);
		int[] array2 = array1;	//배열을 만든것이 아니라 같은 주소로 표시됨.
		System.out.println(array2);
		array1[2] = 9999;
		System.out.println(Arrays.toString(array2));	//주소만 바뀌었기에
	}		// 값은 배열 1을 바꿨어도 배열 2도 바뀐 값으로 나옴.
}
#result
## 길이: 5 
## [I@6504e3b2
## [I@6504e3b2
## [10, 20, 9999, 40, 50]

배열문제

  • 문제 : 5번의 수를 입력받아 최대, 최소값과 총합, 평균값을 모두 구하라.
  • 분석 : 최저, 최고 점수 할 때 2중 for문을 쓰며 각각의 값을 모두 비교해야한다고 생각했음.
  • 애로사항 : 코드가 너무 길고 복잡해 지며 결과값이 제대로 나오지 않았음.
  • 해결 : 일단 min과 max에 각각 최댓값 최솟값으로 초기화를 해주고 min과 max를 for문을 돌며 조건문과 함께 max보다 크다면 max에 저장 또 min보다 작다면 min에 저장을 해주는 구조로 짰음.
  • 코드 :
import java.util.Scanner;

public class Q1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] array = new int[5];	// 배열 선언
		int max = 0;	// 초기화
		int min = 0;	// 초기화
		int sum = 0;	// 초기화
		for (int i = 0; i < array.length; i++) {
			System.out.print((i + 1) + "번째 입력>>");
			int num = sc.nextInt();
			array[i] = num;
		}
		System.out.print("입력된 점수: ");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + " ");
		}	// 입력된 배열 확인.
		System.out.println("");
		System.out.print("최고 점수: ");
		for (int i = 0; i < array.length; i++) {
			sum += array[i];
			if (max < array[i]) {
				max = array[i];
			}
		}		// max 값 확인
		System.out.println(max);
		System.out.print("최저 점수: ");
		min = max;	
  //min 값을 max값으로 대입하여 어떤 수를 넣어도 예외사항이 발생하지 않도록 코딩.
		for (int i = 0; i < array.length; i++) {
			if (min > array[i]) {
				min = array[i];
			}
		}		// min값 확인
		System.out.println(min);
		System.out.println("총합: " + sum);
		System.out.println("평균: " + (double) sum / array.length);
		sc.close();
	}
}
#result
## 1번째 입력>>11
## 2번째 입력>>12
## 3번째 입력>>13
## 4번째 입력>>14
## 5번째 입력>>15
## 입력된 점수: 11 12 13 14 15 
## 최고 점수: 15
## 최저 점수: 11
## 총합: 65
## 평균: 13.0

추가문제 1

  • 부담임쌤께서 나에게 추가 문제를 내주셨다.

  • 문제 :

    *
   ***
  *****
 *******
*********
*********
 *******
  *****
   ***
    *
    
다음과 같이 출력하라.
  • 분석 : 앞에 만들었던 3각형을 만들고 나머지 절반 삼각형은 조건을 조절하여 만들어 붙여야겠다고 생각함.
  • 애로사항 : 없음.
  • 해결 :
  • 코드 :



public class diamond {
	
public static void main(String[] args) {
	for (int i = 1; i <= 5; i++) {	// 위에 피라미드
		for (int j = 5; j > i; j--) {
			System.out.print(" ");
		}
		for (int k = 0; k < i; k++) {
			System.out.print("*");
		}		//우선 삼각형을 만들어 붙힌다음
		if (i >= 2) {	//나머지 삼각형 출력
			for (int l = 2; l <= i; l++) {
				System.out.print("*");
			}
		}
		System.out.println("");
	}
	for (int m = 0; m <= 4; m++) {	// 아래 피라미드
		for (int o = 0; o < m; o++) {
			System.out.print(" ");
		}
		for (int n = 4; n >= m; n--) {
			System.out.print("*");
		}
		if (m >= 0) {
			for (int p = 3; p >= m; p--) {
				System.out.print("*");
			}
		}
		System.out.println("");
	}
}

}

추가문제 2

  • 문제 : 1~1000 까지 숫자 중 완전수인 숫자를 모두 출력하세요.
    완전수란 자신의 약수중에 자신을 제외한 모든 약수의 합이 자신과 같은 수
  • 분석 : for문 쓸 때 <=이 아닌 <를 사용하여 본인 수 전까지 계산이 되야겠다고 for문의 조건을 생각했음.
  • 애로사항 : 진행하면서 완전수를 비교하기위한 sum의 변수를 while 밖에 두어서 초기화가 안 되어 결과값이 없어서 힘들었음.
  • 해결 : 머리로 디버깅을 하다 문제점을 찾음.
  • 코드 :
public class Q2 {
	public static void main(String[] args) {
		for (int i = 1; i <= 1000; i++) {	// 1~1000 까지 반복
			int sum = 0;	// 본인 수와 비교할 약수들의 합을 계속 초기화 해줌.
			for (int j = 1; j < i; j++) {	// 본인 수 전까지 약수를 찾음.
				if (i % j == 0) {
					sum += j;	// 약수라면 변수에 계속 더함
				}
			}
			if (i == sum) {	// 약수들의 합과 본인 수가 같다면 결과값 출력.
				System.out.println(sum);
			}
		}
	}
}
#result
## 6
## 28
## 496

추가문제 3

  • 문제 : 배열의 인덱스의 추 만큼 별을 출력하세요.
  • 분석 : for문을 돌며 각 index의 수를 가져와 for문을 또 돌며 print해야한다고 생각했음. 또한 2중 for문 안의 조건은 숫자만큼 찍어야 하기에 index의 값이 되어야한다고 생각했음.
  • 애로사항 : 없음
  • 해결 :
  • 코드 :
public class Q3 {
	public static void main(String[] args) {
		int[] starcount = {3,4,4,2,1};	// 주어진 배열
		for(int i=0;i<starcount.length;i++) { // 배열의 길이만 큼 반복
			System.out.print(starcount[i] + " : ");	// index를 명시 후
			for(int j=0;j<starcount[i];j++) {	// 숫자만큼 별찍기 진행.			
				System.out.print('*');
			}
			System.out.println("");
		}
	}
}

#result
## 3 : ***
## 4 : ****
## 4 : ****
## 2 : **
## 1 : *
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글