[자바] 강의시간 이것저것 03

오늘·2021년 2월 25일
0

문제풀기

목록 보기
6/24

배열

설정된 여러 기능(Array 메소드 같은..)을 사용하지 않고, 요구사항에 맞게 설하도록

1. 클래스와 배열의 모습

1-1.

//// 1. 클래스 선언
//// 2. 메모리에 클래스 올리기
//// new Student()
//// 3. 메모리에 올린 후 주소를 담는다
//// ss = new Student();
//// 4. ss의 주소타입을 써준다
//// Student ss = new Student()

int a = 10;
int[] arr = { 1, 2, 3 };

Student ss = new Student();
// 메모리에 Student 클래스 올려주고 메모리에 주소 반환
// new로 불러와야 사용이 가능하다

ss.name = "홍길동";

}

class Student {
	// 클래스 선언만으로 메모리에 자동 등록 x
	String name;
	int jumsu;
}

1-2. 조금 더 '형태만' 확인해볼까요

public class Home {
	public static void main(String[] args) {
		Shape[] shA = new Shape[5];
        	//클래스 shape 배열 크기 5개
		//shape 클래스의 참조변수를 담아둘 배열 선언
	}
}

class Shape {
	//Shape 클래스
}

2. 키보드로 입력 받아 배열에 넣기

-iiA 배열을 5개 선언, 키보드로 입력 받아 배열에 넣어 출력

public class Home {
	public static void main(String[] args) {

		int[] iiA = new int[5];
		// int 형의 배열 iiA을 만든다
		// new로 선언하고 배열은 5칸으로 설정

		Scanner sc = new Scanner(System.in);

		for (int i = 0; i < iiA.length; i++) {
        		// iiA의 길이만큼만 돌아라
			System.out.println("정수를 입력해주세요");
			iiA[i] = sc.nextInt();
		}
		for (int i = 0; i < iiA.length; i++) {
			System.out.print(iiA[i] + " ");
			// 저장된 iiA배열을 순서대로 하나씩 출력
		}
	}
}

3. 배열 5칸 키보드로 값 입력, 합계와 평균 출력

+숫자 중 10이 넘는 수만 출력

public class Home { 
	public static void main(String[] args) {

		int[] iA = new int[5];
		int sum = 0;
		double avg = 0;
		
		Scanner sc= new Scanner(System.in);
		
		System.out.println("정수 5개 입력");
		
		for (int i=0; i<iA.length; i++) {
        	//iA의 칸 수만큼 돌아라
			iA[i] = sc.nextInt();
			sum += iA[i];
            		// 스캐너로 입력받아서 iA 배열에 넣고
                    	// 배열에 넣으면서 sum 에 차곡차곡 더해 넣기
			if (iA[i] >= 10) {
            		//만약 10보다 큰수가 배열에 들어온다면
				System.out.println("10이 넘는 수 : " + iA[i]);
			}
		}
		for (int i = 0; i<iA.length; i++) {
			avg = (double) sum / iA.length;
		}
		System.out.println("평균 : " +avg);
		System.out.println("합 : " + sum);
		
	}
}

4.입력 숫자 5개 중 가장 큰 수 찾기

public class Home{
	public static void main(String[] args) {
		System.out.println("숫자 5개 중 가장 큰 수는?");

		int[] num = new int[5];
		int out = num[0];
        	//변수 선언과 배열 크기 지정
		
		Scanner sc = new Scanner(System.in);
		
		for(int i = 0; i<num.length; i++) {
        	//num 크기만큼 돌면서 스캐너로 입력받기
			num[i] = sc.nextInt();
			
			if(num[i]>out) {
				out = num[i];
                		//입력받은 수가 이전 값이 저장된
                        	//out에 있는 수보다 크다면
                            	//지금 num[i]의 값으로 숫자 교체
			}
		}
		System.out.println("가장 큰 수 : "+ out);
	}
}

5.버블 정렬

public class Home{
	public static void main(String[] args) {
		
		int[] num = new int[5];
		
		for(int i=0; i<num.length-1; i++) {
			for (int j=0; j<num.length-1-i; j++) {
				if(num[j] > num[j+1]) {
					int tmp = num[j];
					num[j] = num[j+1];
					num[j+1] = tmp;
				}
			}
		}
	}
}

6. true/false 형으로 배열 입력, 출력

public class Home {
	public static void main(String[] args) {

		boolean[] boA = new boolean[5];
		int passCnt = 0;

		for (int i = 0; i < boA.length; i++) {
			String oxTxt = JOptionPane.showInputDialog("정답은 'true' 오답은 'false' 입력");

			boA[i] = Boolean.parseBoolean(oxTxt);

		}
		for (int i = 0; i < boA.length; i++) {
			System.out.print(boA[i] + " ");
		}
		for (int i = 0; i < boA.length; i++) {
			if (boA[i]) {
				passCnt++;
			}
		}
		System.out.println("\n맞은 갯수 : " + passCnt);
		System.out.println("점수 : " + passCnt * 20);
	}
}

7. 명단끼리 비교해 확인하기

-왜 결과가 이상하지

public class Home {
	public static void main(String[] args) {
		// 4명 입력받아 배열에 넣기
		Scanner sc = new Scanner(System.in);

		String[] per = new String[4];

		for (int i = 0; i < per.length; i++) {
			System.out.println("이름을 입력해주세요");
			System.out.print(">");
			per[i] = sc.next();
		}

		System.out.println("명단 출력");

		for (int i = 0; i < per.length; i++) {
			System.out.println(per[i] + " ");
		}
		
		System.out.println("----------------------------------");
		System.out.println("명단에 있는지 확인");
		
		String[] name = new String[4];
		
		for (int j = 0; j<name.length; j++) {
			System.out.println("이름 입력해주세요");
			System.out.print(">");
			name[j] = sc.next();
		}
		
      		for (int i = 0; i<per.length; i++) {
         		if(per[i].equals(name[i])) {
            		System.out.println(name[i] + " 은(는) 명단에 있습니다.");
         		} else {
            		System.out.println(name[i] + " 은(는) 명단에 없습니다.");
         		}
      		}
		}
	}
}
  • 먼저 per 명단에 4명의 사람을 입력 받는다. 그리고 name 명단에 4명을 입력받아 그 이름이 per 에 있는지 확인하고 싶었다.
  • 길이만큼 돌려 per와 name에 각각 명단을 저장 한 뒤, 따로 for문을 돌려 검사해주고자 했다. 하지만 결과가 원하는 대로 나오지 않았다.
for (int i = 0; i<per.length; i++) {
	if(per[i].equals(name[i])) {
		System.out.println(name[i] + " 은(는) 명단에 있습니다.");
	} else {
       		System.out.println(name[i] + " 은(는) 명단에 없습니다.");
	}
}

마지막에 있는 이 부분이 문제였다. 저런식으로 돌리면 per 1번에 있는 이름과 name 1번에 있는 이름만을 비교하게 된다
(per - name)
1. 영희 - 철수
2. 철수 - 영희
이런식으로 저장되어 둘 다 명단에 있음에도 불구하고 명단에 없다고만 출력되는 것이다.

for (int i = 0; i < per.length; i++) {
	for (int j = 0; j < name.length; j++) {
		if (name[i].equals(per[j])) {
			System.out.println(name[i] + " 은(는) 명단에 있습니다.");
			break;
		} else {
			System.out.println(name[i] + " 은(는) 명단에 없습니다.");
			break;
		}
	}
}
  • 그래서 구구단을 하듯 이중 for문을 돌려 per 와 name을 각각 비교해주었다. 하지만 이 방법은 1번-1번, 1번-2번 ... 의 실행 결과를 다 출력해주니 출력결과가 더러울 수 밖에 없었다.
for (int i = 0; i < per.length; i++) {
	for (int j = 0; j < name.length; j++) {
		if (name[i].equals(per[j])) {
			System.out.println(name[i] + " 은(는) 명단에 있습니다.");
			break;
		}
	}
}

그래서 else를 빼주었다. 결과가 깔끔하다.

0개의 댓글