기록
day 0514 배열_메소드 본문
배열 : 자료형이 같은 기억장소의 모임
package com.kosta.exam;
public class D01ArrayTest {
public static void main(String[] args) {
// [0] [1] [2] [3] [4]
int[] data = {10,20,30,40,50};
for(int i = 0; i < data.length; i++) { // i : 0,1,2,3,4
// System.out.println(data[0]); // [0]번째 있는 10 출력
System.out.println(data[i]); // 모든 배열 요소 출력
}
}
}
for each 반복문 : 배열의 요소만큼 반복 실행시키는 문장을 말한다
for문 간단하게 쓰는 for each
for( 자료형 변수명 : 배열명 ){ // 배열을 꺼내 올 자료형과 변수명을 정해준다
명령어(들)
}
package com.kosta.exam;
public class D01ArrayTest {
public static void main(String[] args) {
// [0] [1] [2] [3] [4]
int[] data = {10,20,30,40,50};
/*
// for문 : 배열의 인덱스를 가져온다
for(int i = 0; i < data.length; i++) { // i : 0,1,2,3,4
// System.out.println(data[0]); // [0]번째 있는 10 출력
System.out.println(data[i]); // 모든 배열 요소 출력
}
*/
// for each 반복문 : 배열의 요소, 값을 가져온다
for( int i : data ) {
System.out.println(i);
}
}
}
package com.kosta.exam;
public class D02ArrayForEach {
public static void main(String[] args) {
String[] name = {"사과", "포도", "오렌지", "수박", "딸기"};
// for-each 반복문을 이용하여 배열의 모든 요소를 출력 해 봅니다
for (String i : name) {
System.out.println(i);
}
}
}
/EXERCISE 문제 풀기/
EXERCISE
(문장을 보고 프로그래밍으로 표현 가능 해야한다)
1. 다음과 같은 배열을 생성하는 문장을 작성하시오.
1-1. 30개의 원소를 가지는 int형 배열로 studentNumbers 변수로 참조된다.
int[] studentNumbers = new int[30];
1-2. 100개의 원소를 가지는 double형 배열로 profits 변수로 참조된다.
double[] profits = new double[100];
1-3. 2000개의 원소를 가지는 char형 배열로 proverbs 변수로 참조된다.
char[] proverbs = new char[2000];
1-4. 1.2, 3.3, 6.7과 같은 값을 가지는 double형 배열을 생성하고 초기화한다.
double[] num = {1.2, 3.3, 6.7};
2. 다음의 배열 선언에서 잘못된 점을 지적하시오.
2-1. int[] numbers = new numbers[100];
==> int[] numbers = new int[100];
2-2. double rainfalls[100] = new double();
==> double rainfalls[] = new double[100];
4. 다음 문장의 출력을 쓰시오.
int[] numbers = new int[5];
for(int i = 0; i < 5; i++)
numbers[i] = i + 1;
for(int i : numbers)
System.out.println(numbers[i]); // numbers의 [1]번째
==> 2 3 4 5
[0][1][2][3][4]
package com.kosta.exam;
public class D03ArrayForEach {
public static void main(String[] args) {
int[] numbers = new int[5];
for(int i = 0; i < 5; i++) {
numbers[i] = i + 1;
}
for(int i : numbers) {
System.out.println(numbers[i]); // numbers의 [1]번째
}
}
}
5. 프로그램이 다음과 같은 선언을 가지고 있다.
double[] readings;
사용자에게 배열의 크기를 물어보고 그 크기대로 배열을 생성하는 문장을 작성하라.
double[] readings;
Scanner sc = new Scanner(System.in);
int n; // 배열 크기는 정수만 올 수 있다
System.out.print("배열이 몇개 필요한가요?");
n = sc.nextInt();
readings = new double[n];
- 기본자료형 : 자기 자신이 값을 갖는 것
- 참조자료형 : 변수 자신이 값을 갖고있는것이 아니라 값이 있는 메모리를 참조하는 자료형
배열은 참조자료형이기 때문에 일치하지 않다.
(서로 다른 메모리를 참조하고 있음)
package com.kosta.exam;
public class D04ArrayEqualsTest {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = {1, 2, 3, 4, 5};
if(a == b) {
System.out.println("배열의 내용이 일치합니다.");
}else {
System.out.println("배열의 내용이 일치하지 않습니다.");
}
}
}
package com.kosta.exam;
public class D05PrimitiveTypeAndArray {
public static void main(String[] args) {
int age1 = 20;
int age2 = 20;
double height = 185.9;
int[] data1 = {10, 20, 30, 40, 50};
int[] data2 = {10, 20, 30, 40, 50};
if(age1 == age2) {
System.out.println("나이가 같아요");
}else {
System.out.println("나이가 달라요");
}
/*
if(data1 == data2) {
System.out.println("배열이 같아요");
}else {
System.out.println("배열이 달라요");
}
*/
System.out.println("== 방법1 ==");
// 두개의 배열의 원소가 모두 동일한지 판별하는 프로그램을 작성 해 봅니다.
// 배열의 길이가 같고, loop문으로 하나하나 비교하고 탈출한다
for(int i = 0; i < data1.length; i++) {
if(data1[i] == data2[i]) {
System.out.println("배열이 같아요");
}else {
System.out.println("배열이 달라요");
break;
}
}
System.out.println("== 방법2 ==");
// 방법2)
int[] a = {1, 2, 3, 4, 5};
int[] b = {1, 2, 3, 4, 5};
boolean flag = true;
if(a.length != b.length){
flag = false;
}else{
for(int i =0; i < a.length; i++){
if(a[i] != b[i]) {
flag = false;
break;
}
}
}
if(flag == true) {
System.out.println("배열의 내용이 일치합니다.");
}else {
System.out.println("배열의 내용이 일치하지 않습니다.");
}
}
}
package com.kosta.exam;
public class D06ArrayCopyTest {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int b[] = new int[a.length]; // D07 : 배열 값 [5]대신 a.length로 바꾼다
// b = a; 를 한 후에 a값을 바꾸면 b는 안바뀌기 때문에 복사되지 않는다
b = a;
//a, b 배열 요소 확인하기
System.out.print("a배열의 요소");
for (int data:a) {
System.out.printf("%5d", data);
}
System.out.println();
System.out.print("b배열의 요소");
for (int data:b) {
System.out.printf("%5d", data);
}
// a, b 복사하기
for(int i = 0; i < a.length; i++) {
b[i] = a[i];
}
System.out.println();
System.out.println("=========================");
// a[0]번째 바꾼후 출력해보기
a[0] = 100;
System.out.print("a배열의 요소");
for (int data:a) {
System.out.printf("%5d", data);
}
System.out.println();
System.out.print("b배열의 요소");
for (int data:b) {
System.out.printf("%5d", data);
}
}
}
/메소드의 정의/
- 메소드 : 어떤 기능을 수행하기 위한(어떤 문제해결을 위한) 서로 관련있는 명령어들의 집합
필요한만큼 호출해서 사용 할 수 있다
- 메소드 형식 :
메소드이름( 매개변수(들) ){
명령어(들);
return [값]; // return value, type이 일치해야한다
}
package com.kosta.exam;
public class D08ArrayCopyTest {
// 정수형 배열을 전달받아서 배열의 요소를 모두 출력하는 메소드를 정의
// 매개변수 (String data), (int a, b) 등 전달 받을 변수를 넣는다
// int[] arr : 정수형 변수의 배열을 받겠다
public static void printArray(int[] arr){ // public static void 메소드명(매개변수){}
for(int data:arr) {
System.out.printf("%5d", data);
}
System.out.println();
// return; 이 생략되어 있다
}
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = new int[a.length];
for(int i = 0; i < a.length; i++) {
b[i] = a[i];
}
System.out.print("a배열의 요소");
printArray(a); // printArray 메소드 호출
System.out.print("b배열의 요소");
printArray(b);
a[0] = 100;
System.out.print("a배열의 요소");
printArray(a);
System.out.print("b배열의 요소");
printArray(b);
}
}
:: chatGPT ::
위의 코드와 아래 코드의 출력 값이 다른 이유 : 배열의 복사 방식과 배열 참조가 다르기때문이다.
1)
public class D06ArrayCopyTest {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int b[] = new int[a.length];
b = a;
for(int i = 0; i < a.length; i++) {
b[i] = a[i];
}
a[0] = 100;
System.out.print("a배열의 요소");
for (int data:a) {
System.out.printf("%5d", data);
}
System.out.println();
System.out.print("b배열의 요소");
for (int data:b) {
System.out.printf("%5d", data);
}
}
}
b = a; 문장에서 배열 b는 배열a와 동일한 배열을 참조하게된다.
즉, a와 b는 같은 메모리 주소를 가리키고 있다.
같은 배열을 참조하므로, 하나의 배열이 수정되면 다른 배열도 같이 수정된다.
여기서 사용한 for문은 불필요한 중복 루프이다.
2)
public class D08ArrayCopyTest {
public static void printArray(int[] arr){
for(int data:arr) {
System.out.printf("%5d", data);
}
System.out.println();
}
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = new int[a.length];
for(int i = 0; i < a.length; i++) {
b[i] = a[i];
}
a[0] = 100;
System.out.print("a배열의 요소");
printArray(a);
System.out.print("b배열의 요소");
printArray(b);
}
}
배열 b는 new int[a.length];로 새로운 배열을 할당받는다.
for문을 통해 a의 값을 b에 복사한다. 이때 b는 a와 독립적인 새로운 배열이다.
a[0] = 100; 문장은 a의 첫 번째 요소를 100으로 변경하지만,
b는 여전히 독립적인 배열이므로 영향을 받지 않는다.
= 1번 코드에도 int[] b = new int[a.length];가 있지만,
그 후에 b = a;를 사용해서 b가 새로운 배열이 아니라 a와 같은 배열을 참조하도록 변경되었다.
따라서, b = a; 라인이 b가 새로운배열을 참조하는 것을 무효화한다.
여기서 두 코드의 차이점은 b = a; 라인에 의해 발생한다.
1번 코드 : b = a; 때문에 b는 a와 동일한 배열을 가리키고, 변경이 서로에게 영향을 미친다.
2번 코드 : b는 새로운 배열로, for문을 통해 a의 값을 독립적으로 복사하므로,
a의 변경이 b에 영향을 미치지 않는다.
package com.kosta.exam;
public class D09ArrayCopyTest {
// 정수형 배열을 전달받아서 배열의 요소를 모두 출력하는 메소드를 정의
// 매개변수 (String data), (int a, b) 등 전달 받을 변수를 넣는다
// int[] arr : 정수형 변수의 배열을 받겠다
public static void printArray(String title, int[] arr){ // public static void 메소드명(매개변수){}
System.out.println(title);
for(int data:arr) {
System.out.printf("%5d", data);
}
System.out.println();
return; // return; 이 생략되어 있다
}
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = new int[a.length];
for(int i = 0; i < a.length; i++) {
b[i] = a[i];
}
// printArray(String title) 추가하면 error 사라짐
printArray("a배열의 요소 : ", a);
printArray("b배열의 요소 : ", b);
a[0] = 100;
printArray("a배열의 요소 : ", a);
printArray("b배열의 요소 : ", b);
}
}
/메소드 만들기/
package com.kosta.exam;
public class D10MethodTest {
public static void main(String[] args) {
// 서로 관련있는 명령어들을 모아놓은 집합 : 메소드
System.out.println("안녕");
System.out.println("안녕");
System.out.println("안녕");
String title = "KOSTA 교육센터";
System.out.println(title);
System.out.println("안녕");
System.out.println("안녕");
System.out.println("안녕");
int year = 2024;
System.out.println(year);
System.out.println("안녕");
System.out.println("안녕");
System.out.println("안녕");
}
}
package com.kosta.exam;
public class D11MethodTest {
// public static void는 나중에 차차 배운다
public static void sayHello(){
System.out.println("안녕");
System.out.println("안녕");
System.out.println("안녕");
// return; 생략되어 있다
}
public static void main(String[] args) {
sayHello();
String title = "KOSTA 교육센터";
System.out.println(title);
sayHello();
int year = 2024;
System.out.println(year);
sayHello();
}
}
package com.kosta.exam;
public class D12MethodTest {
public static void sayHello(){
// 반복문으로 바꾸기
for(int i = 1; i <= 3; i++) {
System.out.println("안녕");
}
}
public static void main(String[] args) {
sayHello();
String title = "KOSTA 교육센터";
System.out.println(title);
sayHello();
int year = 2024;
System.out.println(year);
sayHello();
}
}
package com.kosta.exam;
public class D12MethodTest {
// 매개변수안에 출력 횟수 정하기 (int n)
public static void sayHello(int n){
// 반복문으로 바꾸기
for(int i = 1; i <= n; i++) {
System.out.println("안녕");
}
}
public static void main(String[] args) {
sayHello(2);
String title = "KOSTA 교육센터";
System.out.println(title);
sayHello(5);
int year = 2024;
System.out.println(year);
sayHello(10);
}
}
package com.kosta.exam;
public class D13MethodTest {
// 매개변수에 String name 추가
public static void sayHello(String name, int n){
for(int i = 1; i <= n; i++) {
System.out.println(name + " 안녕");
}
}
public static void main(String[] args) {
sayHello("가", 2);
String title = "KOSTA 교육센터";
System.out.println(title);
sayHello("나", 5);
int year = 2024;
System.out.println(year);
sayHello("다", 3);
}
}
/EditPlus로 main에 배열 전달하기/
// 프로그램 실행시에 두 개의 정수를 전달받아 더하기 한 결과를 출력
// java MainArgsTest 3 4
class MainArgsTest {
public static void main(String[] args) {
// Integer 안에 parseInt가 있다
int add = Integer.parseInt(args[0]) + Integer.parseInt(args[1]);
System.out.println("더하기 결과 : " + add);
}
}
/*
전달하지 않으면 오류 :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at MainArgsTest.main(MainArgsTest.java:7)
*/
/Eclipse로 매개변수에 전달하기/
// 정수형 변수 두개를 매개변수로 전달받아 더하기 한 결과를 출력하는 메소드 정의
package com.kosta.exam;
public class D14MethodTestAdd {
public static void printAdd(int a, int b){ // 메소드 정의
int add = a + b;
System.out.println("더하기 결과 : " + add);
return; // 생략, 호출 한 곳으로 돌아가라
}
public static void main(String[] args) {
printAdd(10, 20); // 메소드 호출
printAdd(3, 4);
}
}
package com.kosta.exam;
public class D15MethodTestSumArray {
// 정수형 배열을 매개변수로 전달받아 배열의 총합을 누적하여 출력하는 메소드 정의
public static void printSumArray(int[] arr) {
int sum = 0;
for(int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("배열의 총 합 : " + sum);
}
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = {10, 20, 30, 40, 50};
printSumArray(a);
printSumArray(b);
}
}
package com.kosta.exam;
public class D16MethodTestMax {
/*
두개의 실수를 매개변수로 전달받아 그 중에 큰 수를 찾아 출력하는 메소드를 정의하고
호출 해 봅니다.
*/
public static void printMax(double a, double b) {
double max;
if(a > b) {
max = a;
}else {
max = b;
}
System.out.println("최대 값 : " + max);
/*
방법2)
double max = a;
if(b > max){
max = b;
}
System.out.println("최대 값 : " + max);
*/
}
public static void main(String[] args) {
printMax(2.3, 5.3);
}
}
14:00 ~
package com.kosta.exam;
public class D17MethodTestGugudan {
// 몇단을 출력할지를 매개변수로 전달받아 해당하는 구구단을 출력하는 메소드를 정의합니다.
public static void printGugudan(int dan){
// dan이 2보다 작거나 9보다 크다면 : 논리합 ||
if(dan < 2 || dan > 9) {
return;
}
System.out.printf("*** %d단 ***\n", dan);
for(int i = 1; i <= 9; i++) {
System.out.printf("%d * %d = %d\n", dan, i, dan*i);
}
System.out.println();
}
public static void main(String[] args) {
printGugudan(2);
printGugudan(12); // 출력안됨
}
}
package com.kosta.exam;
public class D18MethodMaxArray {
// 정수형 배열을 매개변수로 전달받아 가장 큰 값을 찾아 출력하는 메소드를 정의합니다.
public static void printMaxArray(int[] arr){
int max = arr[0];
for(int i = 1; i < arr.length; i++) {
if(arr[i] > max) { // arr[i]번째가 현재 max보다 큰가요
max = arr[i];
}
}
System.out.println("배열의 요소중에 가장 큰 수는 : " + max);
}
public static void main(String[] args) {
// 배열의 요소 맨 첫번째부터 비교한다
// [0] [1] [2] [3] [4]
// 10, 20, 30, 40, 50
int[] data = {10, 20, 30, 40, 50};
printMaxArray(data);
}
}
package com.kosta.exam;
public class D19MethodAddReturn {
// 두개의 정수를 매개변수로 전달받아 더하기 한 결과를 반환하는 메소드를 정의
// void : return 값이 없다
public static int getAdd(int a, int b){
int add;
add = a + b;
return add;
}
public static void main(String[] args) {
int result = getAdd(30, 40); // 메소드 실행 결과를 int result에 넣는다(대입)
System.out.println("더하기 결과 : " + result);
System.out.println(getAdd(3,4)); // 메소드 호출 결과를 출력해라
}
}
package com.kosta.exam;
public class D20MethodGetFactorial {
// 정수형 변수 n을 매개변수로 전달받아서 n!을 구하여 반환하는 메소드를 정의 합니다.
public static int getFactorial(int n){ // 5
int result = 1;
for(int i = n; i >=1; i--) { // 5, 4, 3, 2, 1
result = result * i; // result *= i;
}
return result;
}
public static void main(String[] args) {
int data = getFactorial(3);
System.out.println(data);
System.out.println(getFactorial(5));
}
}
package com.kosta.exam;
public class D21MethodEqualsArray {
/*
실수형 배열 2개를 매개변수로 전달받아 두 배열이 서로 동일한지 판별하여
boolean을 반환하도록 메소드를 정의한다
*/
// 실수형 배열 : double[] __
public static boolean isEquals(double[] a, double[] b) {
boolean re = true;
if(a.length != b.length) {
return false; // a와 b의 길이다 다르다면 false;
}
// i 가 a의 length보다 작을때까지
for(int i = 0; i < a.length; i++) {
if(a[i] != b[i]) {
return false;
}
}
return re;
}
public static void main(String[] args) {
double[] data1 = {1.2, 1.3, 1.4, 1.5};
double[] data2 = {1.2, 1.3, 1.4, 1.5};
double[] data3 = {1.3, 1.3, 1.5, 1.7};
System.out.println("== data1, data2 ==");
if(isEquals(data1, data2)) {
System.out.println("두 배열이 같아요");
}else {
System.out.println("두 배열이 달라요");
}
System.out.println("== data1, data3 ==");
if(isEquals(data1, data3)) {
System.out.println("두 배열이 같아요");
}else {
System.out.println("두 배열이 달라요");
}
}
}
<< 1차원 배열 >>
int[] a = new int[3]; // 변수 a에 정수형 배열 3개
[][][] : 정수형 변수가 3칸 있다
==> 배열의 요소가 정수
<< 2차원 배열 >>
int[][] b = new int[4][3];
[4][3] : 정수형 변수 3칸 짜리가 4줄 있다 (값 12개)
0 1 2
0 [ ][ ][ ]
1 [ ][ ][ ]
2 [ ][5][ ]
3 [ ][ ][ ]
행(줄) 지정 > 열(칸) 지정
b[2][1] = 5;
package com.kosta.exam;
public class D23MatrixTest {
public static void main(String[] args) {
/*
0 1 2
0 [ ] [ ] [ ]
1 [ ] [ ] [ ]
2 [ ] [ ] [ ]
3 [ ] [ ] [ ]
*/
int[][] a = new int[4][3];
// 각 배열의 요소에 1부터 1씩 증가한 값을 차례로 저장
int n = 1;
// 0번째부터 4칸
for(int i = 0; i < 4; i++) { // i : 0,
// 0번째부터 3칸 증가
for(int j = 0; j < 3; j++) { // 2) j : 0, n증가 0번째 줄 0번째 칸 1, n증가 0번째 줄 1번째칸 2 ..
// a[0][0]과 같다.
a[i][j] = n++; // 1) n증가 : 0번째 줄, 0번째 칸에 1을 넣어라
} // 3) [j] 0번째 칸 채우고 [i]로 돌아간다. 0번째줄 1번째칸 4
}
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 3; j++) {
System.out.printf("%5d", a[i][j]);
}
System.out.println(); // 줄바꿈
}
}
}
package com.kosta.exam;
public class D24MatrixTest {
public static void main(String[] args) {
/*
0 1 2
0 [ ] [ ] [ ]
1 [ ] [ ] [ ]
2 [ ] [ ] [ ]
3 [ ] [ ] [ ]
*/
int[][] a = new int[4][3];
int n = 1;
// a.length; 로 바꿀 수 있다
for(int i = 0; i < a.length; i++) {
for(int j = 0; j < a[i].length; j++) {
a[i][j] = n++;
}
}
for(int i = 0; i < a.length; i++) {
for(int j = 0; j < a[i].length; j++) {
System.out.printf("%5d", a[i][j]);
}
System.out.println(); // 줄바꿈
}
}
}
/*
0 [ ] [ ] [ ] [ ] [ ]
1 [ ] [ ]
2 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
배열의 요소에 1부터 1씩 증가한 값을 차례대로 저장한 후 출력 해 봅니다.
*/
package com.kosta.exam;
public class D25MatrixTest {
public static void main(String[] args) {
// 행의 크기만 정하고, 열의 크기는 정하지 않는다
int[][] a = new int[3][];
// java의 배열은 각 행마다 열의 크기가 다를 수 있다
a[0] = new int[5];
a[1] = new int[2];
a[2] = new int[10];
int n = 1;
for(int i = 0; i < a.length; i++) {
// i가 0이면 [5], i가 1이면 [2], i가 2라면 [10]
for(int j = 0; j <a[i].length; j++) {
a[i][j] = n++;
}
}
System.out.println("for-each ==>");
for(int[] arr:a) {
for(int data:arr) {
System.out.printf("%5d", data);
}
System.out.println();
}
System.out.println("for ==>");
// for-each문을 for문으로 ,,
for(int i = 0; i < a.length; i++) {
int[] arr = a[i];
for(int j = 0; j < arr.length; j++) {
int data = arr[j];
System.out.printf("%5d", data);
}
System.out.println();
}
}
}
package com.kosta.exam;
public class D26MatrixTest {
/*
정수형의 2차원 배열을 매개변수로 전달받아
모든 요소를 출력하는 메소드를 정의하고 호출 해 봅니다
(int b, c를 모두 출력할 수 있도록)
*/
public static void printArray(int[][] arr){
for(int[] row:arr) {
for(int data:row) {
System.out.printf("%5d", data);
}
System.out.println();
}
/*
// for문
for(int i = 0; i < arr.length; i++){
int[] row = arr[i];
for(int j = 0; i < row.length; j++){
int data = row[j];
System.out.printf("%5d", data);
}
System.out.println();
}
*/
}
public static void main(String[] args) {
// int[] a = {10, 20, 30, 40, 50};
int[][] b = {{10,20,30},
{40,50,60},
{70,80,90},
{100,110,120}};
int[][] c = {
{1,2,3,4,5},
{6,7},
{8,9,20}
};
System.out.println("b ==>");
printArray(b);
System.out.println("c ==>");
printArray(c);
}
}
- 오늘 학습한 내용에 대하여 요약 및 정리하고 궁금한 점 질문하도록 합니다.
- 요약 및 정리가 다 된 사람들은 다음을 프로그래밍 해 봅니다
pdf "배열"의 프로그래밍 2번, 3번
/*
PROGRAMMING 2.
객관식 문제의 시험 점수를 채점하는 클래스 Exam를 작성하여 보자.
Exam에는 10개의 객관식 문제와 답이 저장되어 있다. 예를 들면 다음과 같다.
<< 예 >>
문제 1) 캐나다의 수도는?
(a)밴쿠버 (b)토론토 (c)오타와 (d)재스퍼
답 : (c)오타와
학생들은 시험을 통과하기 위하여 7문제 이상을 맞추어야 한다.
Exam 클래스 안에 배열을 선언하고 문제와 답을 저장한 후에 학생들에게 문제를 제시하고
학생들의 답도 역시 배열에 저장한다. 다음과 같은 메소드를 제공하여야 한다.
- isPassed(): 학생이 시험에 통과했는지를 true와 false로 반환된다.
- correctAnswers(): 정답 횟수
- incorrectAnswers() : 오답 횟수
완전한 프로그램을 작성하여서 Exam 클래스를 테스트하도록 하고
학생들의 답변은 a, b, c, d만 입력이 가능하도록 프로그램을 작성하라.
*/
/*
PROGRAMMING 3.
1차원 정수 배열을 입력으로 받아서 다음과 같은 계산을 하는 메소드를 작성하고 테스트하라.
- getTotal(): 1차원 배열 원소의 합계를 구한다.
- getAverage(): 1차원 배열 원소의 평균을 구한다.
- getMaximum(): 1차원 배열 원소 중에서 가장 높은 값을 반환한다.
- getMinimum(): 1차원 배열 원소 중에서 가장 낮은 값을 반환한다.
*/
<< 숙제 >>
사용자한테 이름, 생년(띠), 생월, 생일, 생시를 입력받아 사주팔자를 판별하여
출력하는 프로그램을 작성 해 봅니다.
(사주팔자 풀이 및 그림 참조)
천귀 : 귀인 대접
천액 : 액땜
천권 : 권력, 리더십
천파 : 파동이 있어요, 해외 이주
천인 : 인간성, 법 없이도 살 사람
천문 : 머리가 좋아
천복 : 복을 갖고태어남
천고 : 외로움을 많이 타요
천역 : 역마살, 다방면에 관심
천간 : 이성에게 매력
천수 : 손재주가 있어요.
천명 : 명이 길어요
package com.homework;
import java.util.Scanner;
public class Fortune {
public static String getFortune(String tti, int month, int day) {
String[] getGanji = {"자", "축", "인", "묘", "진", "사", "오", "미", "진", "유", "술", "해"};
String[] getTti = {"쥐", "소", "범", "토끼", "용", "뱀", "말", "양", "원승이", "닭", "개", "돼지"};
// 띠에서 월에 해당하는 만큼 이동
int ttiIndex = -1;
for (int i = 0; i < getTti.length; i++) {
if (tti.equals(getTti[i])) {
ttiIndex = i;
break;
}
}
// 일에서 월에 해당하는 만큼 이동
int monthIndex = (ttiIndex + month - 1) % getGanji.length;
// 월에서 일에 해당하는 만큼 이동
int dayIndex = (monthIndex + day - 1) % getGanji.length;
// 결과 반환
return getGanji[dayIndex];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String name, tti;
int month, day, time;
System.out.print("이름을 입력하시오. : ");
name = sc.next();
System.out.print("띠를 입력하시오. : ");
tti = sc.next();
System.out.print("월을 입력하시오. : ");
month = sc.nextInt();
System.out.print("일을 입력하시오. : ");
day = sc.nextInt();
String result = getFortune(tti, month, day);
System.err.println(result);
}
}
// ** 태어난 시간은 도저히 이해불가 ,, **
이거눈 고수 엉ㄴㅣ가 초밥 맞춤형으로 짜준 코드 🥺
왕초밥이라 아직 이해를 못해서 나중에 다시 봐야겠다,, 엉ㄴㅣ 고마오요 ꕀ ☺️☺️
//1차원 배열
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요 : ");
String name = sc.next();
System.out.print("띠를 입력하세요 : ");
String year = sc.next();
System.out.print("생월을 입력하세요 : ");
int month = sc.nextInt();
System.out.print("생일을 입력하세요 : ");
int day = sc.nextInt();
System.out.print("생시를 입력하세요 : ");
int time = sc.nextInt();
String[] animal = { "쥐", "소", "범", "토끼", "용", "뱀", "말", "양", "원숭이", "닭", "개", "돼지" };
String[] chineseZodiac = { "자", "축", "인", "묘", "진", "사", "오", "미", "신", "유", "술", "해" };
int[][] times = {
{ 23, 1 },
{ 1, 3 },
{ 3, 5 },
{ 5, 7 },
{ 7, 9 },
{ 9, 11 },
{ 11, 13 },
{ 13, 15 },
{ 15, 17 },
{ 17, 19 },
{ 19, 21 },
{ 21, 23 }
};
String[] result = { "천귀", "천액", "천권", "천파", "천인", "천문", "천복", "천고", "천역", "천간", "천수", "천명" };
String[] description = {
"귀인 대접",
"액땜",
"권력,리더십",
"파동이 있어요,해외 이주",
"인간성, 법 없이도 살 사람",
"머리가 좋아",
"복을 갖고태어남",
"외로움을 많이 타요",
"역마살, 다방면에 관심",
"이성에게 매력",
"손재주가 있어요.",
"명이 길어요"
};
int idx = 0;
for (int i = 0; i < animal.length; i++) {
if (year.equals(animal[i])) {
idx = i;
break;
}
}
System.out.println("생년 : " + year + "띠(" + chineseZodiac[idx] + ") -> " + result[idx]);
idx = (--idx + month) % 12;
System.out.println("생월 : " + month + "월(" + chineseZodiac[idx] + ") -> " + result[idx]);
idx = (--idx + day) % 12;
System.out.println("생일 : " + day + "일(" + chineseZodiac[idx] + ") -> " + result[idx]);
if (time != 0 && time != 23 && time != 24) {
for (int i = 1; i < times.length; i++) {
if (times[i][0] <= time && time < times[i][1]) {
idx = (idx + i) % 12;
break;
}
}
}
System.out.println("생시 : " + time + "시(" + chineseZodiac[idx] + ") -> " + result[idx]);
System.out.println(name + "님의 사주팔자는 " + result[idx] + "입니다. (" + description[idx] + ")");
}
}
// 2차원 배열
import java.util.Scanner;
public class App2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요 : ");
String name = sc.next();
System.out.print("띠를 입력하세요 : ");
String year = sc.next();
System.out.print("생월을 입력하세요 : ");
int month = sc.nextInt();
System.out.print("생일을 입력하세요 : ");
int day = sc.nextInt();
System.out.print("생시를 입력하세요 : ");
int time = sc.nextInt();
String[][] chineseZodiac = {
{ "쥐", "자", "천귀" },
{ "소", "축", "천액" },
{ "범", "인", "천권" },
{ "토끼", "묘", "천파" },
{ "용", "진", "천인" },
{ "뱀", "사", "천문" },
{ "말", "오", "천복" },
{ "양", "미", "천고" },
{ "원숭이", "신", "천역" },
{ "닭", "유", "천간" },
{ "개", "술", "천수" },
{ "돼지", "해", "천명" },
};
int[][] times = {
{ 23, 1 },
{ 1, 3 },
{ 3, 5 },
{ 5, 7 },
{ 7, 9 },
{ 9, 11 },
{ 11, 13 },
{ 13, 15 },
{ 15, 17 },
{ 17, 19 },
{ 19, 21 },
{ 21, 23 }
};
String[] result = {
"귀인 대접",
"액땜",
"권력,리더십",
"파동이 있어요,해외 이주",
"인간성, 법 없이도 살 사람",
"머리가 좋아",
"복을 갖고태어남",
"외로움을 많이 타요",
"역마살, 다방면에 관심",
"이성에게 매력",
"손재주가 있어요.",
"명이 길어요"
};
int idx = 0;
for (int i = 0; i < chineseZodiac.length; i++) {
if (year.equals(chineseZodiac[i][0])) {
idx = i;
break;
}
}
System.out.println("생년 : " + year + "띠(" + chineseZodiac[idx][1] + ") -> " + chineseZodiac[idx][2]);
idx = (--idx + month) % 12;
System.out.println("생월 : " + month + "월(" + chineseZodiac[idx][1] + ") -> " + chineseZodiac[idx][2]);
idx = (--idx + day) % 12;
System.out.println("생일 : " + day + "일(" + chineseZodiac[idx][1] + ") -> " + chineseZodiac[idx][2]);
if (time != 0 && time != 23 && time != 24) {
for (int i = 1; i < times.length; i++) {
if (times[i][0] <= time && time < times[i][1]) {
idx = (idx + i) % 12;
break;
}
}
}
System.out.println("생시 : " + time + "시(" + chineseZodiac[idx][1] + ") -> " + chineseZodiac[idx][2]);
System.out.println(name + "님의 사주팔자는 " + chineseZodiac[idx][2] + "입니다. (" + result[idx] + ")");
}
}
음력으로
생년 : 개띠 천수(술)
생월 : 3월 천귀(자신 포함 카운드 : 3월 3칸 > 자)
생일 : 15일 천권 (자신 포함 카운드 : 15일 15칸 > 인)
생시 : 저녁 8시(술시), 생일(인)에서부터 술시까지 카운트 '자축인묘지나오미신유술' 까지 (자) : 천귀
==> 천귀가
강하게 들어있다 : 어딜가든 귀인대접
음력으로
생년 : 쥐('자'에서 출발) : 천귀
생월 : 1 ('자'에서 생월만큼 카운트 1칸 '자') : 천귀
생일 : 11 ('자'에서 11일 카운트 11칸 '술') : 천수
생시 : 자시 ('술'에서 자시'자축인묘진사오미신유술해에서'만큼 이동 '술') : 천수
인시라면 '자축인' 3칸 이동
생년 : 닭 ('유' 출발) : 천간
생월 : 9 ('유' 출발 9칸 '사') : 천문
생일 : 21 ('사' 출발 21칸 '축') : 천액
생시 : 낮 3시 신시 ('축' 출발 신시까지, 자축인묘진사오미신 이동 '유') : 천간
롸????
😥😥😭😭😭😫😫😫😫😫😫😫😫😫😫😫😫😫😫😫
🙀
나 : "이성을 잃어서 ㄱㅖ속 웃음이나 ㅏ하하하"
너 : "우리는 그걸 실성이라 해~"
'📖' 카테고리의 다른 글
day 0517 객체와 클래스_생성자_this (0) | 2024.05.17 |
---|---|
day 0516 정렬_객체와 클래스 (0) | 2024.05.16 |
day 0513 반복문_배열 (1) | 2024.05.13 |
day 0510 선택문_반복문 (0) | 2024.05.10 |
day 0509 연산자_선택문 (0) | 2024.05.09 |