배열-20230601

DONGDONG_JU·2023년 6월 1일
0

자바

목록 보기
8/16
post-thumbnail

조건이 불명확한경우 무한반복을쓴다, ex)사용자가 원할때까지 가위바위보

●배열

-같은종류의 여러데이터들을 효율적으로 저장하고 관리하고 사용할 수 있도록하는 자료구조! ,배열의 각 요소는 연속적인 값이다. 0부터 들어감.

●배열 선언,생성
-타입[ ] 변수이름;
int[ ] score;
String [ ] name;

-타입 변수이름[ ];
int score[ ];
String name[ ];

int[ ] score;
score = new int[5];

**
int [] arr1; //타입뒤에 대괄호 다음 변수 //arr1은 배열변수
int arr2[]; //arr2 배열변수 배열변수가 한개면 []가 앞에오던 뒤에오던 상관 없음
int [] arr3,arr4; //배열변수 2개이상 선언했을땐 틀림. arr3는 배열변수, arr4는 배열변수
int arr5[],arr6; //arr5는 배열변수, arr6은 int 배열뒤에[]오는거만 배열변수

여기서 new = 1.객체생성 2.생성된 객체의 시작주소 반환

●배열 기본값


배열의 초기화

		int [] arr1 = {90,85,70,95,80};
		//int [] arr2;
		//arr2 = {90,85,70,95,80};  에러남!
	
		int [] arr3;
		arr3 = new int[] {90,85,70,95,80}; //new int[]를 넣어줘야함, 이때는 []안에 크기는 명시 못함, {}안에 배열의 수가 배열의 크기 결정
	
		int [] arr4 = new int[] {90,85,70,95,80}; ; 
		
		
		System.out.printf("[arr1]: %d  %d  %d  %d  %d \n",arr1[0],arr1[1],arr1[2],arr1[3],arr1[4]);
		System.out.printf("[arr3]: %d  %d  %d  %d  %d \n",arr3[0],arr3[1],arr3[2],arr3[3],arr3[4]);
		System.out.printf("[arr4]: %d  %d  %d  %d  %d \n",arr3[0],arr3[1],arr3[2],arr3[3],arr3[4]);

배열.length = 배열의 크기를 알려준다.

	for(int i=0; i<arr1.length; i++) {
			System.out.println(arr1[i]);
		}

이런식으로!


과제1

//학생수 입력받고, 학생수만큼의 점수 입력받고 출력하기

		Scanner sc = new Scanner(System.in);
		int stuCount;
		int [] stuScores;
		
		System.out.print("학생 수를 입력하세요: ");
		stuCount = sc.nextInt();
		
		stuScores = new int[stuCount]; // 실행될때마다 배열의크기 달라짐! = 동적배열
		
		System.out.printf("%d명의 학생들의 점수를 입력하세요: ",stuScores.length);
		for(int i=0; i<stuScores.length; i++) {
			stuScores[i] = sc.nextInt();
		}
		
		System.out.println("\n입력한 학생의 점수: ");
		for(int i=0; i<stuScores.length; i++) {
			System.out.print(stuScores[i]+"  ");
		}

과제2

//위에 예시 + 학생들 총점,평균 추가하기

		Scanner sc = new Scanner(System.in);
		int stuCount;
		int [] stuScores;
		int total = 0;  //추가
		
		System.out.print("학생 수를 입력하세요: ");
		stuCount = sc.nextInt();
		
		stuScores = new int[stuCount]; // 실행될때마다 배열의크기 달라짐! = 동적배열
		
		System.out.printf("%d명의 학생들의 점수를 입력하세요: ",stuScores.length);
		for(int i=0; i<stuScores.length; i++) {
			stuScores[i] = sc.nextInt();
			total += stuScores[i]; //추가
		}
		
		System.out.println("\n입력한 학생의 점수: ");
		for(int i=0; i<stuScores.length; i++) {
			System.out.print(stuScores[i]+"  ");
		}
		
		System.out.printf("\n입력한 학생들의 총점: %d, 평균: %.2f\n",total,(double)total/stuScores.length); //추가

int total = 0;
total += stuScores[i];
System.out.printf("\n입력한 학생들의 총점: %d, 평균: %.2f\n",total,(double)total/stuScores.length);

추가 됐음!


과제3-최고,최저 점수찾기

//입력된 점수들 중에서 제일 높은점수, 낮은 점수 찾아서 출력하기

	int [] scores = {100,75,60,85,100,60};
		int minScore,maxScore;
		
		minScore = scores[0];
		maxScore = scores[0];
		
		for(int i=1; i< scores.length; i++) {
			if(minScore >scores[i]) {
				minScore = scores[i];
			}
			if(maxScore < scores[i]) {
				maxScore = scores[i];
			}
		}
		
		System.out.printf("최고점수: %d, 최저점수: %d\n",maxScore,minScore);

min,max쓸려고는 했는데 잘 안풀렸었다. 나중에 다시 풀어봐야지.


과제4-로또번호

//중복발생하지않는 임의의 로또 번호 출력 코드
-별로 좋지는 않은 코드라고 하셨다. 그래도 다시 해보기~!

	int [] ball = new int[45];
		
		for(int i=0; i<ball.length; i++) {
			ball[i] = i+1;
		}
			int temp =0;
			int j =0;
			
			for(int i=0; i<100; i++) {  //100번섞기
				j= (int)(Math.random() * 45);
				temp = ball[0];
				ball[0] = ball[j];
				ball[j] = temp;
			}
			for(int i=0; i<6; i++) {
				System.out.println(ball[i]+"  ");
			}

과제5-입력한 문자열 16진수로 변경

	char[] hex = { 'C','A','F','E'};
		
		String[] binary = {"0000","0001","0010","0011"
						  ,"0100","0101","0110","0111"
						  ,"1000","1001","1010","1011"
						  ,"1100","1101","1110","1111"};
		
		String result="";
		
		for(int i=0; i<hex.length; i++) {
			if(hex[i] >= '0' && hex[i] <='9') {
				result +=binary[hex[i] - '0'];
			}else {
				result +=binary[hex[i]-'A'+10];
			}
		}

		System.out.println("hex:"+new String(hex));
		System.out.println("binay: "+result);

다차원 배열

마지막차원의 배월만 실제값을 가짐

EX)
int[ ][ ] score = new int [5][3];

--> 크기가 3인 배열을 5줄 만들어라
[0][0][0],
[0][0][0],
[0][0][0],
[0][0][0],
[0][0][0],


int[][]arr =  {{1,2,3,4},{5,6,7,8},{9,10,11,12}};   //int[3][4]  크기가 4인 배열 3개
		
		System.out.println("arr배열의 크기: "+arr.length);
		System.out.println("arr[0]배열의 크기: "+arr[0].length);
		System.out.println("arr[1]배열의 크기: "+arr[1].length);
		System.out.println("arr[2]배열의 크기: "+arr[2].length);
	for(int i=0; i<arr.length; i++) {   //0,1,2 반복
			for(int j=0; j < arr[i].length; j++) {   //arr[i].length = 4
				System.out.printf("%2d  ",arr[i][j]);   //자릿수 맞추기위해 %2d 넣기
			}
			
			System.out.println();  //한줄 출력 끝나면 개행
		}

두개 같이 하면 사진 처럼 나옴!


과제1-점수입력받아 배열에 넣기

[내가한거]

package chap05;
import java.util.Scanner;

//사용자에게 3명의 학생에 대한 국어,영어,수학,과학 점수를 입력받아 1등인 학생의 성적과 총점, 평균을 출력하는 코드를 작성하세요.

//int[3][4] 배열크기4인 거 3줄


		Scanner sc = new Scanner(System.in);
		
		int [][] scores= new int[3][4];
		int total =0, firstIdx=0, temp;
		
		
		for(int i=0; i<scores.length; i++){
			
	           System.out.printf("%d학생의 점수를 입력하세요: \n",i+1);
	           temp=0;
	           for(int j=0; j<scores[i].length; j++) {
	        	   scores[i][j] = sc.nextInt();
	        	   temp += scores[i][j];
			}
	           
	           if(temp > total) {
	        	   total =temp;
	        	   firstIdx = i;
	           }
		}
		sc.close();
		
		System.out.print("\n 1등학생의 성적: ");
		for(int i=0; i<scores[firstIdx].length; i++) {
			System.out.printf("%2d ", scores[firstIdx][i]);
		}
		
		System.out.printf("\n 총점 : %d, 평균 : %.2 \n", total, (double) total / scores[firstIdx].length);

[답]


		// 2차원 배열 예제

		Scanner sc = new Scanner(System.in);
		int[][] score = new int[3][4];
		int total = 0, firstIdx = 0, temp; // 1등학생의 총점, 1등학생의순서번호, 각 학생의 총점을 저장하는 임시변수

		for (int i = 0; i < score.length; i++) {
			System.out.printf("%d번째 학생의 국어, 영어, 수학, 과학 점수를 입력하세요 : ", i + 1);
			temp = 0;
			for (int j = 0; j < score[i].length; j++) {
				score[i][j] = sc.nextInt();
				temp += score[i][j];
			}

			if (temp > total) {
				total = temp;
				firstIdx = i;
			}
		}

		sc.close();

		System.out.print(" \n 1등 학생의 성적 : ");
		for (int i = 0; i < score[firstIdx].length; i++) {
			System.out.printf("%2d	", score[firstIdx][i]);
		}
		System.out.printf("\n 총점 : %d, 평균 : %.2f \n", total, (double) total / score[firstIdx].length);

뭐가 틀린것일까.. 찾아봐야지

--

맨밑에 총점,평균 구하는 줄이 오타가 있었다.
%d 랑 %.2f오타!


Arraycopy()

System.arraycopy()를 이용한 배열의 복사

char [] arr1 = {'0','1','2','3','4'};
		char [] arr2 = {'A','B','C','D','E'};
		
		System.arraycopy(arr1, 1, arr2, 2, 2);
		
		for(int i=0; i<arr2.length; i++) {
			System.out.print(arr2[i]+"  ");
		}

커맨드라인, InputDialog

cmd javac 실행안됨 고쳐봐야함


과제2-가위바위보 배열로

	Scanner sc = new Scanner(System.in);
		
		int user, com;
		
		String [] kbb = {"가위","바위","보"};
		String result="";
		String intro ="\n\t[가위바위보 게임]\n"
				+ "\n"
				+ "\t1.가위\n"
				+ "\t2.바위\n"
				+ "\t3. 보\n"
				+ "\n\t입력하세요:";
		
		com = (int)(Math.random()*3);
		
		System.out.print(intro);
		user = sc.nextInt()-1;  //제로베이스위해서 사용자입력을 0부터시작하게함
		
		switch(user-com) {
		case 0: result= "비겼습니다"; break;
		case 1: case -2: result= "이겼습니다"; break;
		case -1: case 2: result= "졌습니다"; break;
		}
		
		sc.close();
		
		System.out.printf("\n\t사용자: %s , 컴퓨터: %s \n",kbb[user],kbb[com]);
		System.out.println("\t게임의 결과는 "+result);

과제3-마지막날짜계산 배열로

내가해본거

Scanner sc = new Scanner(System.in);
		int year,month;
		int temp=0;
		System.out.printf("년도와 월을 입력하세요: ");
		year = sc.nextInt();
		month= sc.nextInt();
		
		int Lastday[] = {30,31,28,29};
		
		if(month==4 || month==6 || month==9 || month==11) {
			temp+= 0;
		}else if(month==2) {
			if( (year %4 ==0 && year%100 !=0) || year%400==0 ) {
				temp += 3;
			}else {
				temp += 2;
			}
		}else {
			temp += 1;
		}
	
		System.out.printf("입력하신 %d년 %월의 마지막날짜는 %d입니다.",year,month,Lastday[temp]);

될꺼같은데 절대 안돌아감 ㅋㅋ 날짜를 배열에 넣어서 뽑아내는거 같은데...

<답>

	Scanner sc = new Scanner(System.in);
		
		int year,month;
		
		int [] monthLastDays= {-1,31,29,31,30,31,30,31,31,30,31,30,31}; //배열과 인덱스 값을 일치시키기 위해 -1을 해준다? 그냥 자리수 채우기라 암꺼나 넣어두됨..
        //월은 1월부터고 배열은 0번부터라 0번자리수 채워주기용 이였음
		System.out.printf("년도와 월을 입력하세요: ");
		year = sc.nextInt();
		month= sc.nextInt();
		sc.close();
		
		if(year%4==0 && year % 100 !=0 || year %400 ==0) {
			monthLastDays[2]=29;
		}
		
		
		
		System.out.printf("입력하신 %d년의 %d월의 마지막날짜는 %d일 입니다.",year,month,monthLastDays[month]);

집가서 해봐야지


이게 왜끝..? 진짜 생각도 못했네...

참고문헌- 자바의정석 (남궁성)

profile
웹개발자로 취업하고싶어 공부중인 HDJ 입니다

0개의 댓글