배열(Array) 예제
문제 01.
길이가 10인 배열을 선언하고 1부터 10까지의 값을 반복문을 이용하여 순서대로 배열 인덱스에 넣은 후 그 값을 출력하세요.
ex.
1 2 3 4 5 6 7 8 9 10
public void practice1() {
int[] arr = new int[10];
for(int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
문제 02.
길이가 10인 배열을 선언하고 1부터 10까지의 값을 반복문을 이용하여 역순으로 배열 인덱스에 넣은 후 그 값을 출력하세요.
ex.
10 9 8 7 6 5 4 3 2 1
public void practice2() {
int[] arr = new int[10];
int num = arr.length;
for(int i = 0; i < arr.length; i++) {
arr[i] = num;
num --;
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ") ;
}
}
문제 03.
사용자에게 입력 받은 양의 정수만큼 배열 크기를 할당하고 1부터 입력 받은 값까지 배열에 초기화한 후 출력하세요.
ex.
양의 정수 : 5
1 2 3 4 5
public void practice3() {
Scanner sc = new Scanner(System.in);
System.out.print("양의 정수 : ");
int num = sc.nextInt();
int[] arr = new int[num];
for(int i = 0; i < arr.length; i++) {
arr[i] = i+1;
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
sc.close();
}
문제 04.
길이가 5인 String배열을 선언하고 “사과”, “귤“, “포도“, “복숭아”, “참외“로 초기화 한 후 배열 인덱스를 활용해서 귤을 출력하세요.
ex.
귤
public void practice4() {
String[] arr = {"사과","귤","포도","복숭아","참외"};
System.out.print(arr[1]);
}
문제 05.
문자열을 입력 받아 문자 하나하나를 배열에 넣고 검색할 문자가 문자열에 몇 개 들어가 있는지 개수와 몇 번째 인덱스에 위치하는지 인덱스를 출력하세요.
ex.
문자열 : application
문자 : i
application에 i가 존재하는 위치(인덱스) : 4 8
i 개수 : 2
public void practice5() {
Scanner sc = new Scanner(System.in);
System.out.print("문자열 : ");
String str = sc.nextLine();
System.out.print("문자 : ");
char ch = sc.nextLine().charAt(0);
char[] arr = new char[str.length()];
for(int i = 0; i < arr.length; i++) {
arr[i] = str.charAt(i);
}
int count = 0;
System.out.print("application에 i가 존재하는 위치(인덱스) : ");
for(int i = 0; i < arr.length; i++) {
if(arr[i] == ch) {
System.out.print(i +" ");
count++;
}
}
System.out.println();
System.out.println("i 개수 : " + count);
sc.close();
}
문제 06.
“월“ ~ “일”까지 초기화된 문자열 배열을 만들고 0부터 6까지 숫자를 입력 받아 입력한 숫자와 같은 인덱스에 있는 요일을 출력하고 범위에 없는 숫자를 입력 시 “잘못 입력하셨습니다“를 출력하세요.
ex.
0 ~ 6 사이 숫자 입력 : 4
금요일
0 ~ 6 사이 숫자 입력 : 7
잘못 입력하셨습니다.
public void practice6() {
char[] week = {'월','화','수','목','금','토','일'}; // char형 배열은 ""가 아닌 '' 써야된다.
Scanner sc = new Scanner(System.in);
System.out.print("0 ~ 6 사이 숫자 입력 : ");
int num = sc.nextInt();
if(num >= 0 && num < 7) {
System.out.print(week[num]);
}else {
System.out.println("잘못 입력하셨습니다.");
}
sc.close();
}
문제 07.
사용자가 배열의 길이를 직접 입력하여 그 값만큼 정수형 배열을 선언 및 할당하고 배열의 크기만큼 사용자가 직접 값을 입력하여 각각의 인덱스에 값을 초기화 하세요. 그리고 배열 전체 값을 나열하고 각 인덱스에 저장된 값들의 합을 출력하세요
ex.
정수 : 5
배열 0번째 인덱스에 넣을 값 : 4
배열 1번째 인덱스에 넣을 값 : -4
배열 2번째 인덱스에 넣을 값 : 3
배열 3번째 인덱스에 넣을 값 : -3
배열 4번째 인덱스에 넣을 값 : 2
4 -4 3 -3 2
총 합 : 2
public void practice7() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 : ");
int num = sc.nextInt();
int[] arr = new int[num];
for(int i = 0; i < arr.length; i++) {
System.out.printf("배열 %d번째 인덱스에 넣을 값 : ",i);
arr[i] = sc.nextInt();
}
int sum = 0;
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
sum += arr[i];
}
System.out.println();
System.out.println("총 합 : " + sum);
sc.close();
}
문제 08.
3이상인 홀수 자연수를 입력 받아 배열의 중간까지는 1부터 1씩 증가하여 오름차순으로 값을 넣고, 중간 이후부터 끝까지는 1씩 감소하여 내림차순으로 값을 넣어 출력하세요. 단, 입력한 정수가 홀수가 아니거나 3 미만일 경우 “다시 입력하세요”를 출력하고 다시 정수를 받도록 하세요.
ex. 정수 : 4
다시 입력하세요.
정수 : -6
다시 입력하세요.
정수 : 5
1 2 3 2 1
public void practice8() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("정수 : ");
int num = sc.nextInt();
int count = 0;
if ((num >= 3) && (num % 2 == 1)) {
int[] arr = new int[num];
for(int i = 0; i < arr.length; i++) {
if(i <= arr.length/2) {
arr[i] = ++count;
}else {
arr[i]= --count;
}
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
break;
}else {
System.out.println("다시 입력하세요.");
}
}
sc.close();
}
강사님 풀이
public void practice8_teacher() {
Scanner sc = new Scanner(System.in);
// 조건 맞을때까지 반복 => while
while(true) {
// 정수 입력
System.out.print("정수 : ");
int num = sc.nextInt();
if(num >= 3 && num % 2 == 1) { // num이 3이상 홀수 일때만 작동
int[] arr = new int[num];
/*
* 5입력시 => {1,2,3,2,1} => 2번 인덱스까지 증가 그 이후로 감소
* 7입력시 => {1,2,3,4,3,2,1} => 3번 인덱스까지 증가 그 이후로 감소
* 9입력시 => => 4번 인덱스까지 증가 그 이후로 감소
* => 배열의 길이 / 2 인덱스까지 증가 그 이후부터 감소
*/
int value = 1;
for(int i = 0; i < arr.length; i++) {
arr[i] = value;
if(i < arr.length / 2) {
value ++;
}else {
value--;
}
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
break;
}else {
System.out.println("다시 입력하세요.");
}
}
sc.close();
}
문제 09.
사용자가 입력한 값이 배열에 있는지 검색하여 있으면 “OOO 치킨 배달 가능“, 없으면 “OOO 치킨은 없는 메뉴입니다“를 출력하세요. 단, 치킨 메뉴가 들어가있는 배열은 본인 스스로 정하세요.
ex. 치킨 이름을 입력하세요 : 양념
양념치킨 배달 가능
치킨 이름을 입력하세요 : 불닭
불닭치킨은 없는 메뉴입니다.
public void practice9() {
Scanner sc = new Scanner(System.in);
String[] arr = {"양념", "후라이드", "순살"};
System.out.print("치킨 이름을 입력하세요. : ");
String food = sc.nextLine();
int yesNo = 0;
for(int i = 0; i < arr.length; i++) {
if(arr[i].equals(food)) {
yesNo += 1;
break;
}
}
if(yesNo == 0) {
System.out.println(food + "은(는) 없는 메뉴입니다.");
}else {
System.out.println(food + "치킨 배달 가능");
}
sc.close();
} // return; 사용해보기.
문제 10.
주민등록번호 성별자리 이후부터 *로 가리고 출력하세요. 단, 원본 배열 값은 변경 없이 배열 복사본으로 변경하세요.
ex.
주민등록번호(-포함) : 123456-1234567
123456-1******
public void practice10() {
Scanner sc = new Scanner(System.in);
System.out.print("주민등록번호(-포함) : ");
String num = sc.nextLine();
char[] arr = new char[14];
for(int i = 0; i < num.length(); i++) {
arr[i] = num.charAt(i);
}
char[] copy = arr.clone();
for(int i = 7; i < copy.length; i++) {
copy[i] = '*';
}
System.out.println(copy);
sc.close();
}
문제 11.
10개의 값을 저장할 수 있는 정수형 배열을 선언 및 할당하고 1~10 사이의 난수를 발생시켜 배열에 초기화한 후 출력하세요.
ex.
9 7 6 2 5 10 7 2 9 6
public void practice11() {
int[] arr = new int[10];
for(int i = 0; i < arr.length; i++) {
int random = (int)(Math.random()* 10 +1);
arr[i] = random;
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
문제 12.
10개의 값을 저장할 수 있는 정수형 배열을 선언 및 할당하고 1~10 사이의 난수를 발생시켜 배열에 초기화 후 배열 전체 값과 그 값 중에서 최대값과 최소값을 출력하세요.
ex. 5 3 2 7 4 8 6 10 9 10
최대값 : 10
최소값 : 2
public void practice12() {
int[] arr = new int[10];
for(int i = 0; i < arr.length; i++) {
int random = (int)(Math.random() * 10 + 1);
arr[i] = random;
}
int max = arr[0];
int min = arr[0];
for(int i = 0; i < arr.length-1; i++) {
if(arr[i] >= max) {
max = arr[i];
}
if(arr[i] <= min) {
min = arr[i];
}
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+ " ");
}
System.out.println();
System.out.println("최대 값 : " + max);
System.out.println("최소 값 : " + min);
}
문제 13.
10개의 값을 저장할 수 있는 정수형 배열을 선언 및 할당하고 1~10 사이의 난수를 발생시켜 중복된 값이 없게 배열에 초기화한 후 출력하세요.
ex.
4 1 3 6 9 5 8 10 7 2
public void practice13() { // ******참고했음
int[] arr = new int[10];
for(int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*10+1);
for(int j = 0; j < i; j++) {
if(arr[i] == arr[j]) {
i--;
}
}
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
강사님 풀이
public void practice13_teacher() {
int[] arr = new int[10];
for(int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*10+1);
for(int j = 0; j < i; j++){
if(arr[i] == arr[j]) {
i--; // 랜덤한수를 다시 만드는 코드
}
}
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
문제 14.
로또 번호 자동 생성기 프로그램을 작성하는데 중복 값 없이 오름차순으로 정렬하여 출력하세요.
ex.
3 4 15 17 28 40
public void practice14() {
int[] lotto = new int[6];
for(int i = 0; i < lotto.length; i++) {
int random = (int)(Math.random()*45+1);
lotto[i] = random;
for(int j = 0; j < i; j++) {
if(lotto[i] == lotto[j]) {
i--;
break;
}
}
}
for(int i = 0; i < lotto.length; i++) {
System.out.print(lotto[i] + " ");
}
System.out.println();
int temp = 0; // 임시저장소 .. 근데 이렇게 해도 되나...
for(int i = 0; i < lotto.length; i++) {
for(int j = i; j < lotto.length; j++) {
if(lotto[i] > lotto[j]) { // 만약 45 > 10 이면
temp = lotto[i]; // 45는 임시저장소
lotto[i] = lotto[j]; // 앞에 자리에 10 이들어가고
lotto[j] = temp; // 뒤에 45가 들어간다.
}
}
}
for(int i = 0; i < lotto.length; i++) {
System.out.print(lotto[i] + " ");
}
}
문제 15.
문자열을 입력 받아 문자열에 어떤 문자가 들어갔는지 배열에 저장하고 문자의 개수와 함께 출력하세요.
ex.
문자열 : application
문자열에 있는 문자 : a, p, l, i, c, t, o, n
문자 개수 : 8
public void practice15() {
Scanner sc = new Scanner(System.in);
System.out.print("문자열 : ");
String str = sc.nextLine();
char[] arr = new char[str.length()];
int count = 0;
for(int i = 0; i < arr.length; i++) {
int same = 0; // 중복체크 변수 선언, 0이면 다르다. 1이면 같다.
arr[i] = str.charAt(i); // 어떤문자가 들어갔는지 배열에 저장 하고 출력이라기보단
// 이건 배열에 저장하고 중복없이 출력
// 어떻게 수정하지..
for(int j = 0; j < i; j++) {
if(arr[i] == arr[j]) {
same = 1;
}else {
continue;
}
}
if(same == 0) {
if(i == 0) {
System.out.print("문자열에 있는 문자 : " + arr[i]);
}else {
System.out.print(", " + arr[i]);
}
count ++;
}
}
System.out.println();
System.out.println("문자 개수 : " + count);
sc.close();
}
강사님 풀이
public void practice15_teacher() {
Scanner sc = new Scanner(System.in);
System.out.print("문자열 : ");
String str = sc.nextLine();
char[] arr = new char[str.length()];
int count = 0; // 문자 개수 출력
System.out.print("문자열에 있는 문자 : ");
for(int i = 0; i < arr.length; i++) { // char 배열 값대입
arr[i] = str.charAt(i);
// 중복제거 ?? 출력.. apple => a p l e
boolean flag = true;
for(int j = 0; j < i; j++) {
if(arr[j] == arr[i]) {
flag = false;
}
}
if(flag) { // if(flag) == if(flag == true)
count ++ ;
if(i == 0) {
System.out.print(arr[i]);
}else {
System.out.print(", " + arr[i]);
}
}
}
System.out.println();
System.out.println(count);
sc.close();
}
문제 16.
사용자가 입력한 배열의 길이만큼의 문자열 배열을 선언 및 할당하고 배열의 인덱스에 넣을 값 역시 사용자가 입력하여 초기화 하세요. 단, 사용자에게 배열에 값을 더 넣을지 물어보고 몇 개를 더 입력할 건지, 늘린 곳에 어떤 데이터를 넣을 것인지 받으세요. 사용자가 더 이상 입력하지 않겠다고 하면 배열 전체 값을 출력하세요.
ex.
배열의 크기를 입력하세요 : 3
1번째 문자열 : 자바의 정석
2번째 문자열 : 알고리즘
3번째 문자열 : C프로그래밍
더 값을 입력하시겠습니까?(Y/N) : y
더 입력하고 싶은 개수 : 2
4번째 문자열 : 인간관계
5번째 문자열 : 자기계발
더 값을 입력하시겠습니까?(Y/N) : y
더 입력하고 싶은 개수 : 1
6번째 문자열 : 영단어600
더 값을 입력하시겠습니까?(Y/N) : n
[자바의 정석, 알고리즘, C프로그래밍, 인간관계, 자기계발, 영단어600]
public void practice16() {
Scanner sc = new Scanner(System.in);
System.out.print("배열의 크기를 입력하세요 : ");
int num = sc.nextInt();
sc.nextLine();
String[] arr = new String[num];
for (int i = 0; i < num; i++) {
System.out.print(i+1 + "번째 문자열 : ");
String str = sc.nextLine();
arr[i] = str;
}
int arrLength = 0; // ************
while(true) {
System.out.print("더 값을 입력하시겠습니까?(Y/N) : ");
char yesNo = sc.nextLine().charAt(0);
if (yesNo == 'y' || yesNo == 'Y') {
System.out.print("더 입력하고 싶은 개수 : ");
int add = sc.nextInt();
sc.nextLine();
arr = Arrays.copyOf(arr, num += add); // 배열은 확장이 안되므로 새로 만들어야함
for(int i = num-add; i < arr.length; i++) {
System.out.print(i+1 + "번째 문자열 : ");
String strAdd = sc.nextLine();
arr[i] = strAdd;
arrLength = arr.length;
continue;
}
}else if(yesNo == 'N' || yesNo == 'n'){
System.out.print("[");
for(int i = 0; i < arrLength; i++) { // arr.length 가 if문의 {}안에서 선언된 지역변수라 여기에서 호출이안된다..
// 그래서 *******부분처럼 새로운 변수를 만들어서 대입
if(i < arrLength - 1) {
System.out.print(arr[i] + ", "); // 어떻게 마지막 값 뒤에는 ,를 안붙이지?
}else { // 이게 맞나 ?
System.out.print(arr[i] + "]");
}
}
break;
}
}
sc.close();
}
강사님 풀이
public void practice16_teacher() {
Scanner sc = new Scanner(System.in);
System.out.print("배열의 크기를 입력하세요 : ");
int num = sc.nextInt();
String[] origin = new String[num];
String[] copy = null;
sc.nextLine();
for(int i = 0; i < origin.length; i++) {
System.out.printf("%d번째 문자열 : ", i+1);
origin[i] = sc.nextLine();
}
while(true) {
System.out.print("더 값을 입력하시겠습니까?(Y/N) : ");
char ch = sc.nextLine().charAt(0); // y Y n N
if(ch == 'y' || ch == 'Y') { // 더 입력하겠다는 경우
System.out.print("더 입력하고 싶은 개수 : ");
num = sc.nextInt(); // num 또 써도 됨
copy = Arrays.copyOf(origin,origin.length + num);
sc.nextLine();
for(int i = origin.length; i < copy.length; i++) {
System.out.printf("%d번째 문자열 : ", i+1);
copy[i] = sc.nextLine();
}
origin = copy; // origin의 주소값을 바꿔줌
}else { // 그만하는 경우
System.out.print("[");
for(int i = 0; i < origin.length; i++) {
if(i == copy.length - 1) { // 마지막 인덱스인경우
System.out.printf("%s", copy[i]);
}else {
System.out.printf("%s, ",copy[i]);
}
}
System.out.print("]");
break;
}
}
sc.close();
}