조건이 불명확한경우 무한반복을쓴다, 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]);
}
이런식으로!
//학생수 입력받고, 학생수만큼의 점수 입력받고 출력하기
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]+" ");
}
//위에 예시 + 학생들 총점,평균 추가하기
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);
추가 됐음!
//입력된 점수들 중에서 제일 높은점수, 낮은 점수 찾아서 출력하기
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쓸려고는 했는데 잘 안풀렸었다. 나중에 다시 풀어봐야지.
//중복발생하지않는 임의의 로또 번호 출력 코드
-별로 좋지는 않은 코드라고 하셨다. 그래도 다시 해보기~!
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]+" ");
}
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(); //한줄 출력 끝나면 개행
}
두개 같이 하면 사진 처럼 나옴!
[내가한거]
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오타!
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]+" ");
}
cmd javac 실행안됨 고쳐봐야함
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);
내가해본거
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]);
집가서 해봐야지
이게 왜끝..? 진짜 생각도 못했네...
참고문헌- 자바의정석 (남궁성)