728x90
[day 06]
1. 배열 array
행
1) 다차원 배열
: 정방배열
*선언* 열열열
int [행][렬] arr; 행
int arr [][]; 행
2) 가변 배열
: 비 정방배열, 길이가 다른 배열
package day06;
public class T123 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [][] arr4 = new int [2][3];
System.out.println(arr4.length);
}
}
package day06;
public class Test50 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
// System.out.println(args[1]);
// 정방배열
// 선언
int [][] arr = new int[2][3];
arr[0][0]=100;
arr[0][1]=200;
arr[0][2]=300;
arr[1][0]=400;
arr[1][1]=500;
arr[1][2]=600;
System.out.println(arr[1][2]);
// 초기화
int[][] arr2= {{10,20,30 },{40,50,60}};
System.out.println(arr2); //주소값 나옴
System.out.println(arr2[0]); // 주소값 나옴
System.out.println(arr2.length); //행의 길이
System.out.println(arr2[0].length); // 정방에서 열의 길이
*/
// 가변배열 : 행크기 지정, 열은 추후에
int [][]arr3 = new int[2][];
arr3[0] = new int[2]; //0번행에 열 2개
arr3[1] = new int[3]; //1번행에 열 3개
arr3[0][0] = 1;
arr3[0][1] = 2;
arr3[1][0] = 3;
arr3[1][1] = 4;
arr3[1][2] = 5;
//초기화
int [][] arr2 = {{10,20},{30,40,50}};
System.out.println("arr2.length :" + arr2.length);
System.out.println(arr2[0].length);
System.out.println(arr2[1].length);
for(int i = 0; i < arr2.length; i++) {//행
for(int j = 0; j< arr2[i].length;j++) {
System.out.println(arr2[i][j]);
}
}
}
}
package day06;
import java.util.Scanner;
public class Test51 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// * (비)정방배열 문제 *
// 문제1. 아래와 같은 형태의 정방배열을 만들어 값을 저장하고 출력해보세요.
/*
10 20 30
40 50 60
70 80 90
*/
// 문제2. int 형 3행 2열의 정방배열을 만들고
// 각 방에 정수를 입력받아 저장하고 출력하세요.
// 문제3. 아래와 같은 형태의 비정방배열을 만들어
// 아래와 같이 값을 저장하고 출력하세요.
/*
10 11 12
20 21
30 31 32
40 41
*/
// 문제4. 한층에 5호씩있는 3층짜리 아파트가 있다.
// 1) 배열로 만들어서 각각 호마다 관리비를 입력받고, 전체 출력해보세요.
// 2) 층별 관리비 평균을 구해서 출력해보세요.
// 3) 전체 관리비 평균을 구해서 출력해보세요.
// 4) 103호와 203호의 관리비가 서로 바뀌었다합니다. 교환해주세요.
// 5) 전체 관리비 평균보다 관리비가 적게 나오는 호수들을 출력하세요.
// 6) 관리비 가장 적게 나온 호수와 가장 많이 나온 호수를 출력하세요.
// 7) (심화) 관리비 적게 나온 순으로 정렬해보세요.
//1번 문제
/*
int [][] arr = {{10,20,30},{40,50,60},{70,80,90}};
for(int i = 0; i < arr.length; i++) {//행
for(int j = 0; j< arr[i].length;j++) {
System.out.println(arr[i][j]);
}
}
*/
// 문제2. int 형 3행 2열의 정방배열을 만들고
// 각 방에 정수를 입력받아 저장하고 출력하세요.
/*
int [][]arr2 = new int[3][2];
Scanner sc = new Scanner (System.in);
System.out.println("[0][1] 입력>");
int num1 = sc.nextInt();
arr2[0][1] = num1 ;
System.out.println("[0][1] 입력>");
int num2 = sc.nextInt();
arr2[0][2] = num2 ;
System.out.println("[1][0] 입력>");
int num3 = sc.nextInt();
arr2[1][0] = num3 ;
*/
/* int [][]arr2 = new int[3][2];
Scanner sc = new Scanner (System.in);
for(int i=0 ; i<arr2.length; i++) {
for(int j=0; j<arr2[i].length; j++) {
System.out.println(i+"행" + j+"렬" + "를 입력하세요" );
arr2[i][j] = sc.nextInt();
}
}
sc.close();
for(int i = 0; i < arr2.length; i++) {//행
for(int j = 0; j< arr2[i].length;j++) {
System.out.println(arr2[i][j]);
}
}
10 11 12
20 21 (22)
30 31 32
40 41 (42)
*/ //3번문제
/* int [][]arr3 = new int[4][3];
int i, j;
for(i=0 ; i<arr3.length; i++) {
for(j=0; j<arr3[i].length; j++) {
System.out.print((i+1)+""+ j+" " );
}System.out.println(" ");
}
*/
/*
if(2%(i+1)==0) {
for(j=0; j<arr3[i].length; j++) {
for(j=0; j<arr3[i].length; j++) {
System.out.print((i+1)+""+ j );
}System.out.println(" ");
}
}else {
for(i=0 ; i<arr3.length; i++) {
}
for(j=0; j<3; j++) {
System.out.print((i+1)+""+ j );
}System.out.println(" ");
}
}
*/
// 문제4. 한층에 5호씩있는 3층짜리 아파트가 있다.
// 1) 배열로 만들어서 각각 호마다 관리비를 입력받고, 전체 출력해보세요.
// 2) 층별 관리비 평균을 구해서 출력해보세요.
// 3) 전체 관리비 평균을 구해서 출력해보세요.
// 4) 103호와 203호의 관리비가 서로 바뀌었다합니다. 교환해주세요.
// 5) 전체 관리비 평균보다 관리비가 적게 나오는 호수들을 출력하세요.
// 6) 관리비 가장 적게 나온 호수와 가장 많이 나온 호수를 출력하세요.
int [][] arr4 = new int [2][3];
Scanner sc = new Scanner (System.in);
int total = 0; //
int tot = 0;
int i, j = 0;
for( i=0; i<arr4.length; i++) {
for(j=0; j<arr4[i].length; j++) {
System.out.println((i+1)+"층" + (j+1)+"호" + "관리비" );
arr4[i][j] = sc.nextInt();
tot += arr4[i][j];
total += arr4[i][j];
}//2번
System.out.println((i+1)+"층 전체 관리비는"+tot );
System.out.println((i+1)+"층 전체 평균값은"+(double)(tot/arr4[i].length));
} //3번
System.out.println("모든층 전체 평균값은"+(double)(total/(arr4.length*arr4[0].length)));
System.out.println(arr4[0][2]);
//4번
int tmp = arr4[0][2];
arr4[0][2] = arr4[1][2];
arr4[1][2] = tmp;
System.out.println(arr4[0][2]);
//5번 전체 관리비 평균보다 관리비가 적게 나오는 호수들을 출력하세요.
for( i=0; i<arr4.length; i++) {
for(j=0; j<arr4[i].length; j++) {
if(arr4[i][j]<(total/(arr4.length*arr4[i].length))) {
System.out.println((i+1)+"동"+(j+1)+"호"+ arr4[i][j]);
System.out.println("관리비가 적은 호수는"+(i+1)+"동"+(j+1)+"호");
}
}
}
/* sc.close();
//4-1
for(int i = 0; i < arr4.length; i++) {//행
for(int j = 0; j< arr4[i].length;j++) {
System.out.println((i+1)+ "층 관리비 총합은" +tot);
System.out.println((i+1)+ "층 관리비 평균은" +tot%arr4[i].length);
System.out.println("다음층");
}
}
for(int i = 0; i < arr4.length; i++) {//행
for(int j = 0; j< arr4[i].length;j++) {
System.out.println(arr4[i][j]);
}
}
*/
}
}
package day06;
import java.util.Scanner;
public class Test52 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// * 1차원 배열 문제 *
// 문제1-1. arr이라는 이름의 방 5개짜리 배열에
// 사용자로부터 서로다른 5개의 정수를 입력받아 저장하고 출력해보세요.
// 문제1-2. 위에서 만들 배열 arr에 저장된 값을 오름차순으로 정렬해보세요.
// 문제1-3. 정수 한개를 더 입력받아 저장해보세요.
// 입력받은 정수는 기존 arr 배열의 마지막 데이터 다음방에 저장되어야한다.
// (즉, 배열크기가 6개가 되어야한다. 단, 배열은 방크기 변경X)
int [] arr = {2, 6, 10, 32, 51};
int [] tmp = arr;
arr = new int [6]; // 6개 짜리 새 방만들기
for(int i = 0; i < tmp.length; i++) {
arr[i] = tmp[i];
}
arr[5] = 200; //마지막 방에 입력받아 저장
// 문제2-1. 게임랭킹보드. 각 5개의 데이터를 저장할 수 있는
// users와 scores라는 이름의 배열이 있고,
// users배열에는 유저이름, scores 배열에는 유저의 게임점수를 입력받아 저장한다.
// 단, 유저이름과 게임점수는 배열 인덱스상 서로 일치하게.
// 문제2-2. 위 저장된 users와 scores를 아래와 같은 형태로 출력해보세요.
/*
user_name score
--------------------
피카츄 87
파이리 24
.....
*/
// 문제2-3. 두번째 유저의 점수와 세번째 유저의 점수가 서로 바뀌었다합니다.
// 교환해주세요.
// 문제2-4. 점수가 높은 순으로 출력되는 게임 랭킹 보드를 출력해주세요.
/* 랭킹보드는 1위부터 5위까지 출력
rank user_name score
----------------------------
1 꼬북이 96
2 피카츄 87
.....
*/
// 문제2-5. 또 한명의 유저가 게임을 끝냈습니다.
// 점수와 유저이름을 입력받고, users와 scores 배열에 추가 저장.
// (문제 1-3. 참고 : 배열길이 6개로)
// 게임 랭킹보드를 업데이트해 5위까지 출력해주세요.
int [][]arr2 = new int[3][2];
Scanner sc = new Scanner (System.in);
for(int i=0 ; i<arr2.length; i++) {
for(int j=0; j<arr2[i].length; j++) {
System.out.println(i+"행" + j+"렬" + "를 입력하세요" );
arr2[i][j] = sc.nextInt();
}
}
sc.close();
for(int i = 0; i < arr2.length; i++) {//행
for(int j = 0; j< arr2[i].length;j++) {
System.out.println(arr2[i][j]);
}
}
}
}
package day06;
public class Test53 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 랜덤 : 난수 : 임의의 수 : 0~ 1 사이 실수의 값으로 돌려줌.
for(int i = 0; i<10; i++) {
//System.out.println(Math.random());
// 0~9 사이 랜덤값
// System.out.println((int)(Math.random()*10));
// 1~5 사이 랜덤값 0- 4 1-5
// System.out.println((int)(Math.random()*10)/2+1);
// 12~ 17 사이 랜덤값 1- 10 0- 5 12 -17
// System.out.println(((int)(Math.random()*10)+1)/2+12);
//== System.out.println(((int)(Math.random()*6+12);
}
}
}
package day06;
import java.util.Scanner;
public class Test54 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 문제1. 아래와같이 2차원 배열 arr을 출력하는 프로그램을 작성하세요.
/*
1
1 2 3
1
1 2 3 4
1 2
int [][]arr = new int[4][];
arr[0] = new int[0];
arr[0][0] = 1;
arr[1] = new int[2];
arr[1][0]= 1;
arr[1][1]= 2;
arr[1][2]= 3;
arr[2] = new int[0];
arr[2][0] = 1;
arr[3] = new int[3];
arr[3][0] = 1;
arr[3][1] = 2;
arr[3][2] = 3;
arr[3][3] = 4;
arr[4] = new int[1];
arr[4][0] = 1;
arr[4][1] = 2;
int [][]arr = new int [][]{
{1},
{1},{2},{3}
{1},
{1},{2},{3},{4}
{1},{2}
}
*/
// 문제2. Scanner로 소문자 알파벳 하나 입력받고,
// 아래와 같이 출력하는 프로그램을 작성하세요.
/*
소문자 알파벳 하나를 입력하세요 >> e <- 콘솔에 입력
a abcde
abcd
abc
ab
a
sca
sc
Scanner sc = new Scanner (System.in);
System.out.println("알파벳을 입력하세요>>");
char a = sc.nextLine().charAt(0); //아스키코드 변환
int b = (int)a;
for (int i = 97; i <= b; i++ ) {
System.out.print((char)i+" ");
}
*/
// 문제3. 양의 정수 10개를 입력받아 배열에 저장하고,
// 3의 배수만 출력하는 프로그램을 작성하세요.
/*
Scanner sc = new Scanner (System.in);
int arr[]= new int [9];
for(int i=0; i<arr.length;i++) {
System.out.println((i+1)+"번째 양의 정수를 입력하세요>>");
arr[i] = sc.nextInt();
}
for(int i=0; i<arr.length;i++) {
if (arr[i]%3==0) {
System.out.println(arr[i]);
}
}
*/
// 문제4. 4x4의 2차원 배열(총16개방)을 만들고,
// 1 ~ 10 까지 범위의 정수를 10개만
// 랜덤하게 생성하여 임의의 위치에 저장하세요.
// 동일한 정수가 있어도 상관없으나,
// 나머지 6개의 숫자는 모두 0으로 만들고
// 4x4의 형태로 출력하세요.
/*
출력예시)
3 0 7 2
0 9 1 4
2 4 0 5
0 8 0 0
*/
int[][]arr4 = new int [4][4];
int[]temp = new int [10];
int i,j=0;
int count = 0;
// 보드판 모두 0으로 초기화
for(i=0; i<arr4.length;i++ ) {
for(j=0; j<arr4[i].length;j++){
arr4[i][j] = 0;
}
}
// 10개 랜덤 생성
for(i=0; i<temp.length;i++ ) {
temp[i] =((int)(Math.random()*10)+1);
}
// 10개 랜덤을 보드에 넣기
for(i = 0; i<temp.length; i++)
//보드의 임의의 위치
// 행 0~3렬 /렬 0~3렬
int x = (int)(Math.random()*4); //행 인덱스 랜덤
int y = (int)(Math.random()*4); //행 인덱스 랜덤
// 중복체크 : 같은 자리가 다시 뽑히면 안된다.
if(arr4[x][y]!=0) {
1--;
System.out.println("자리중복");
count++;
}else {
arr4[x][y]=temp[i];
}
for(i=0; i<arr4.length;i++ ) {
for(j=0; j<arr4[i].length;j++){
System.out.print(arr4[i][j]+" ");
} System.out.println();
}
/* Up & Down 게임
0 ~ 99 사이의 임의의 수를 받아 (사용자로부터) 숨기고, 그수를 맞추는 게임.
임의의 수보다 낮게 입력하면 "Up" 출력,
높게 입력하면 "Down" 출력하면서 범위 좁혀가며 수를 맞춘다.
게임을 반복하기 위해 y/n묻고, n 입력시 프로그램 종료.
콘솔예시)
숫자가 정해졌습니다. 맞춰보세요!
0 ~ 99
1 >> 55 (사용자 입력)
"Up"
55 ~ 99
2 >> 70
"Up"
70 ~ 99
3 >> 85
"Down"
70 ~ 85
4 >> 80
"Down"
70 ~ 80
5 >> 75
"Up"
75 ~ 80
6 >> 77
맞았습니다.
다시 하시겠습니까?(y/n) >> y
숫자가 정해졌습니다. 맞춰보세요!
0 ~ 99
1 >> 30
"Up"
30 ~ 99
2 >> 45
맞았습니다.
다시 하시겠습니까?(y/n) >> n
게임 종료!!
*/
/*
Scanner sc = new Scanner(System.in);
System.out.println("문자 입력>>");
String str = sc.nextLine();
if(str.equals("a")) { //if(str == "A") 문자열은 안된다 !!
System.out.println("같아요");
}
*/
}
}
package day06;
public class Test55 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][]arr4 = new int [4][4];
int[]temp = new int [10];
int i,j=0;
int count = 0;
// 보드판 모두 0으로 초기화
for(i=0; i<arr4.length;i++ ) {
for(j=0; j<arr4[i].length;j++){
arr4[i][j] = 0;
}
}
// 10개 랜덤 생성
for(i=0; i<temp.length;i++ ) {
temp[i] =((int)(Math.random()*10)+1);
}
// 10개 랜덤을 보드에 넣기
for(i = 0; i<temp.length; i++) {
//보드의 임의의 위치
// 행 0~3렬 /렬 0~3렬
int x = (int)(Math.random()*4); //행 인덱스 랜덤
int y = (int)(Math.random()*4); //행 인덱스 랜덤
// 중복체크 : 같은 자리가 다시 뽑히면 안된다.
if(arr4[x][y]!=0) {
i--;
System.out.println("자리중복");
count++;
}else {
arr4[x][y]=temp[i];
}
}
System.out.println(count+"번 반복됨");
for(i=0; i<arr4.length;i++ ) {
for(j=0; j<arr4[i].length;j++){
System.out.print(arr4[i][j]+" ");
} System.out.println();
}
}
}
package day06;
import java.util.Scanner;
public class Test5511 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/* Up & Down 게임
0 ~ 99 사이의 임의의 수를 받아 (사용자로부터) 숨기고, 그수를 맞추는 게임.
임의의 수보다 낮게 입력하면 "Up" 출력,
높게 입력하면 "Down" 출력하면서 범위 좁혀가며 수를 맞춘다.
게임을 반복하기 위해 y/n묻고, n 입력시 프로그램 종료.
콘솔예시)
숫자가 정해졌습니다. 맞춰보세요!
0 ~ 99
1 >> 55 (사용자 입력)
"Up"
55 ~ 99
2 >> 70
"Up"
70 ~ 99
3 >> 85
"Down"
70 ~ 85
4 >> 80
"Down"
70 ~ 80
5 >> 75
"Up"
75 ~ 80
6 >> 77
맞았습니다.
다시 하시겠습니까?(y/n) >> y
숫자가 정해졌습니다. 맞춰보세요!
0 ~ 99
1 >> 30
"Up"
30 ~ 99
2 >> 45
맞았습니다.
다시 하시겠습니까?(y/n) >> n
게임 종료!!
*/
Scanner sc = new Scanner(System.in);
// 게임 전체를 돌리는 반복문 (한판~ 두판~ 세판~)
boolean play = true; // 게임을 다시 돌릴지 안돌릴지 정해줄 변수
while(play) {
int num = (int)(Math.random() * 100); // 0~99 임의의 값 생성
int count = 1; // 입력 회차
int guess = -1; // 사용자가 입력한 수 저장해둘 변수
int low = 0; // 낮은 범위값 들고 있을 변수
int high = 99; // 높은 범위값 들고 있을 변수
System.out.println("숫자가 정해졌습니다. 맞춰보세요!");
while(true) {
// 입력한값과 랜덤값 num이 같을 경우
System.out.println(low + " ~ " + high);
System.out.print(count + " >> ");
guess = Integer.parseInt(sc.nextLine());
//guess = sc.nextInt();
count++;
if(guess == num) {
System.out.println("맞았습니다.");
System.out.println("다시 하시겠습니까?(y/n) >>");
String answer = sc.nextLine();
if(answer.equalsIgnoreCase("n")) {
System.out.println("게임종료!");
play = false; // 겉에 while문 반복을 판단하는 값 false 바꾸기
// 다음 크게 돌때 검사하러가면 false라서 종료된다!!
break; // 숫자 계속 입력받고 검사하는 안쪽 while문 빠져나가기
}else if(answer.equalsIgnoreCase("y")) {
break; // 숫자 계속 입력받고 검사하는 안쪽 while문 빠져나가기
}else {
System.out.println("잘못 입력하셨습니다.");
continue;
}
}
if(guess < num) {
System.out.println("Up");
low = guess;
}
if(guess > num) {
System.out.println("Down");
high = guess;
}
}
}
sc.close();
}
}
package day06;
import java.util.Scanner;
public class Test5522 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
boolean play = true;
while(play) {
int num = (int)(Math.random()*100); //0-99 숫자만들기
int guess = -1;
int count = 1;
int low = 0 ;
int high = 99 ;
System.out.println("숫자가 정해졌습니다! 맞춰보세요!");
while(true) {
System.out.println(low+" ~~"+ high);
System.out.println(count + ">>");
count++;
guess = sc.nextInt();
if(guess==num){
System.out.println("맞췄습니다!");
System.out.println("다시 하겠습니까? y/n>>");
String answer = sc.nextLine();
if(answer.equalsIgnoreCase("n")) {
System.out.println("종료!");
play = false;
break;
}else if (answer.equalsIgnoreCase("y")) {
break;
}else {
System.out.println("잘못 입력하셨습니다");
continue;
}
}
if(guess>num) {
System.out.println("Down");
high = guess;
}
if(guess<num) {
System.out.println("Up");
low = guess;
}
}
}
sc.close();
}
}
728x90
'P-Language > [Java]' 카테고리의 다른 글
[Java] 8 - 메서드 (0) | 2022.06.03 |
---|---|
[Java] 7 - 객체지향 (0) | 2022.06.03 |
[Java] 5 - 배열 (0) | 2022.06.03 |
[Java] 4 - 조건문(switch), 반복문 (0) | 2022.06.03 |
[Java] 3 - 연산자, 제어문, 조건문 (0) | 2022.06.03 |