반응형
배열
: 변수를 nm개 선언하고 저장하기엔 코드 낭비가 발생한다. 그렇기에 배열의 형식으로 많은 양의 데이터를 적은 코드로 처리하는 방식을 말한다.
사용법은 아래와 같다.
타입[] 변수명 = new 타입[배열크기]; // 객체를 만들 때 new를 사용한다.
타입 변수명[] = new 타입[배열크기];
package kr.or.ddit.study05;
import java.util.Scanner;
public class ArrayExample01 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayExample01 obj = new ArrayExample01();
obj.method1();
obj.method2();
}
public void method1() {
/*
* int 변수 10개 선언 및 저장
* 10개 변수 출력 해보기.
*/
int i1 = 1;
int i2 = 2;
int i3 = 3;
int i4 = 4;
int i5 = 5;
int i6 = 6;
int i7 = 7;
int i8 = 8;
int i9 = 9;
int i10 = 10;
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
System.out.println(i5);
System.out.println(i6);
System.out.println(i7);
System.out.println(i8);
System.out.println(i9);
System.out.println(i10);
}
public void method2() {
/*
* int 변수 10개 선언 및 저장
* 10개 변수 출력 해보기.
*
* int <- 타입
* [] <- 배열 선언
* new <- 메모리 할당
* int[10] <- 생성 숫자.
*/
// int arr[] = new int[10];
int[] arr = new int[10]; // 객체를 만들 때 new를 사용한다.
System.out.println(arr);
for (int i = 0; i < 10; i++) {
arr[i] = i;
System.out.println(arr[i]);
}
}
}
package kr.or.ddit.study05;
import java.util.Scanner;
public class ArrayExample01 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayExample01 obj = new ArrayExample01();
obj.method3();
}
public void method3() {
/*
* 정수 5개를 저장하고 역순으로 출력.
*/
int[] num = new int[5];
num[0] = 1;
num[1] = 2;
num[2] = 3;
num[3] = 4;
num[4] = 5;
/*
* 배열.length <- 배열의 길이를 나타냄.
*/
for (int i = 0; i < num.length; i++) {
System.out.println(num[num.length-i-1]);
}
}
}
package kr.or.ddit.study05;
import java.util.Scanner;
public class ArrayExample01 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayExample01 obj = new ArrayExample01();
obj.method4();
}
public void method4() {
/*
* 배열을 만들어 정수 5개 값을 저장 해보기.
*/
int[] num = {1,2,3,4,5};
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
}
package kr.or.ddit.study05;
import java.util.Scanner;
public class ArrayExample01 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayExample01 obj = new ArrayExample01();
obj.method5();
}
public void method5() {
/*
* 학생 10명의 점수를 입력하고
* 1. 평균, 총점을 구하시오.
* 2. 최대값, 최소값.
*/
int[] scores = {75,77,43,83,90,65,82,94,55,70};
int sum = 0;
double avg;
int max = scores[0];
int min = scores[0];
for (int i = 0; i < scores.length; i++) {
sum += scores[i]; // 총점과 평균
max = max > scores[i] ? max : scores[i]; // 최대값
min = min < scores[i] ? min : scores[i]; // 최소값
}
avg = (double)sum/scores.length;
System.out.println("평균 : " + avg);
System.out.println("총점 : " + sum);
// System.out.printf("총점 : %d 평균 : %f ", sum, avg);
// 위와 같은 삼항연산 방식으로 해도 문제 없다.
for(int i = 0; i < scores.length; i++) {
if(max < scores[i]) {
max = scores[i];
}
if(min > scores[i]) {
min = scores[i];
}
}
System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);
// System.out.printf("최대값 : %d 최소값 : %d ", max, min);
}
}
버블 정렬
: 서로 인접한 두 데이터를 검사하여 정렬하는 방식이다.
인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환한다.
여러 정렬 중에 가장 느리다.
package kr.or.ddit.study05.sec02;
import java.util.Scanner;
public class ArrayExample01 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayExample01 obj = new ArrayExample01();
obj.method6();
}
public void method6() {
// int a = 7;
// int b = 3;
//
// System.out.println("a : " + a + " b : " + b);
//
// /*
// * a 값과 b 값을 바꿔 보세요.
// */
// int temp = a;
// a = b;
// b = temp;
//
// System.out.println("a : " + a + " b : " + b);
/*
* 버블 정렬
* 원본자료가 n개 일때 n-1차 운행한다.
* 각 회차에서 인접한 두 값을 비교하여
* 오름 차순인 경우 작은 값을 앞에 위치시킴
* 내림 차순인 경우 큰 값을 앞에 위치시킴
*/
int[] scores = {75, 77, 43, 83, 90, 65, 82, 94, 55, 70};
// 정렬 전 출력 구문
System.out.println("정렬 전");
for (int i = 0; i < scores.length; i++) {
int j = scores[i];
System.out.print(j + "\t");
}
System.out.println();
// 정렬
for(int i=0; i<scores.length-1; i++) { // 마지막 숫자를 제일 앞에 놓기 위해선 n-1 만큼 실행이 되어야 함
// j = 0 : 77, 75, 43, 83, 90, 65, 82, 94, 55, 70
// j = 1 : 77, 75, 43, 83, 90, 65, 82, 94, 55, 70
// j = 2 : 77, 75, 83, 43, 90, 65, 82, 94, 55, 70
for(int j=0; j<scores.length-1; j++) { // 작은 수가 앞으로 오는 방법으로 바꿀 시
if(scores[j] < scores[j+1]) { // scores[j] > scores[j+1] 로 변경하면 된다.
int temp = scores[j];
scores[j] = scores[j+1];
scores[j+1] = temp;
}
}
}
// 정렬 후 출력 구문
System.out.println("정렬 후");
for(int i=0; i<scores.length; i++) {
int j = scores[i];
System.out.print(j + "\t");
}
}
}
향상된 버블 정렬
package kr.or.ddit.study05.sec02;
import java.util.Scanner;
public class ArrayExample01 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayExample01 obj = new ArrayExample01();
obj.method7();
}
public void method7() {
int[] scores = {75, 77, 43, 83, 90, 65, 82, 94, 55, 70};
// 정렬 전 출력 구문
System.out.println("정렬 전");
for (int i = 0; i < scores.length; i++) {
int j = scores[i];
System.out.print(j + "\t");
}
System.out.println();
// 향상된 버블 정렬
// 1, 2, 3, 4, 6, 5
for(int i=0; i<scores.length-1; i++) {
boolean end = true;
for(int j=0; j<scores.length-1; j++) {
if(scores[j] < scores[j+1]) {
int temp = scores[j];
scores[j] = scores[j+1];
scores[j+1] = temp;
// 바뀌는 값이 있을 시 false로 변경
end = false;
}
}
// 바뀌는 데이터들이 없다면 break 문을 탄다.
if(end) break;
}
// 정렬 후 출력 구문
System.out.println("정렬 후");
for(int i=0; i<scores.length; i++) {
int j = scores[i];
System.out.print(j + "\t");
}
}
}
package kr.or.ddit.study05.sec02;
import java.util.Scanner;
public class ArrayExample01 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayExample01 obj = new ArrayExample01();
obj.method8();
}
public void method8() {
/*
* 5명의 점수를 스캐너를 통해 입력 받고,
* 점수 순으로 정렬해 보시오.
*
* 높은 점수가 앞으로.
*/
int[] scores = new int[5];
for (int i = 0; i < scores.length; i++) {
System.out.print("점수 입력해 주세요 : ");
scores[i] = sc.nextInt();
}
System.out.println();
/*
* 1. 입력된 점수 출력하기
*/
System.out.println("정렬 전");
for (int i = 0; i < scores.length; i++) {
int j = scores[i];
System.out.print(j + "\t");
}
System.out.println();
/*
* 2. 정렬 하기
*/
for (int i = 0; i < scores.length-1; i++) {
boolean end = true;
for (int j = 0; j < scores.length-1; j++) {
if(scores[j] < scores[j+1]) {
int temp = scores[j];
scores[j] = scores[j+1];
scores[j+1] = temp;
end = false;
}
}
if(end) break;
}
/*
* 3. 출력하기
*/
System.out.println("정렬 후");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i] + "\t");
}
}
}
선택 정렬
: 데이터들 중 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식이다.
package kr.or.ddit.study05.sec02;
import java.util.Scanner;
public class ArrayExample01 {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayExample01 obj = new ArrayExample01();
obj.method9();
}
public void method9() {
/*
* 선택 정렬
*
* 최소값 혹은 최대값으로
* 행을 먼저 맞춘 후 바꿈
*/
int[] scores = {75, 77, 43, 83, 90, 65, 82, 94, 55, 70};
/*
* 향상된 for 문
*
* for (배열 혹은 리스트의 타입 i : 배열 혹은 리스트){
*
* }
*/
// for(int i=0; i<scores.length; i++) {
// int score = scores[i];
// System.out.print(score + "\t");
// }
// 위의 코드와 같은 방식으로 아래처럼 쓸 수 있다.
for (int score : scores) {
System.out.print(score + "\t");
}
System.out.println();
for (int i = 0; i < scores.length - 1; i++) {
int min = i;
for (int j = i; j < scores.length; j++) {
if(scores[j] < scores[min]) {
min = j;
}
}
int temp = scores[min];
scores[min] = scores[i];
scores[i] = temp;
}
System.out.println("정렬 후");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i] + "\t");
}
}
}
Tip
- 향상된 for 문
: 처음부터 끝까지 반복하는 경우 사용할 수 있다.
주로 배열을 처음부터 끝까지 출력할 때 사용한다.
사용법은 아래와 같다.
for(자료형 변수명 : 배열명) {
실행문;
}
// 배열명의 처음부터 끝까지 출력한다.
반응형
'자바' 카테고리의 다른 글
[Java 초급] 11장 2차원 배열 (0) | 2023.12.12 |
---|---|
[Java 초급] 10.5.1장 테스트 (0) | 2023.12.11 |
[Java 초급] 9장 참조 타입 (0) | 2023.12.11 |
[Java 초급] 8장 반복문 while문, do-while문 (0) | 2023.12.11 |
[Java 초급] 7.5장 테스트 (0) | 2023.12.08 |