String str ="yes"
이는 str.equals("yes") 이렇게 표현된다. 익숙해지게 자주 써보기
str.equals("yes")
조건문은 if와 switch문이 있는데 처리해야 할 경우의 수가 많을 때 switch문을 사용한다.
_ 조건식과 일치하는 case문으로 이동한다.>> break문이 나오면 switch 전체를 빠져나간다.
_만약 일치하는 값이 없으면 default 문으로 간다.
_ 스위치는 조건식이 정수나 문자열이 될 수 있다.
_ 제약조건이 있다. 1) 조건식의 결과는 정수 또는 문자열이여야 한다.
2) case문의 값은 정수 상수, 문자열 가능하면 중복되면 안 된다.
임의의 정수 만들기_ 난수 만들기 (섞기나 게임할 때 쓰임)
Math.random()은 0.0<= Math.random() < 1.0 임의의 double값은 반환한다.
만약 1~3사이 정수를 얻고 싶다면 각 변에 3을 곱한다.
0.0 <= Math.random()<1.0
0*3 <=Math.random()*3 <1.0*3
0 <=Math.random()*3 <3.0 정수를 만들기 위해 int 형 변환
(int) 0 <=(int)(Math.random()*3)<(int) 3.0
0 <=(int)(Math.random()*3)<3
이렇게 될 때 3이 포함이 안되니 1을 더해준다.
0+1 <=(int)(Math.random()*3)+1 <3+1
여기서 곱하기는 원하는 값의 개수만큼 곱해준다.
만약 주사위라면 6을 곱하면 된다.
위의 식을 보자면
반복문의 i는 굳이 사용하지 않아도 그 밑으로 랜덤 함수를 쓰면 적용되는 것 같다.
* 할 개수는 내가 구해야 할 갯 수만큼이고 범위 지정에 있어서 +만 구한다면 +1이고 만약 범위가 -까지 지정된다면 빼주면 된다. 즉 random 함수 범위가 0.0부터 <1.0이라는 사실을 꼭 인지할 것
for 문은 반복 횟수를 알 때 적합한 반복문이다.
for(int i=1; i <=8; i++)
system. out.println("love")
이 예제를 보더라도 i에 대한 특별한 서식이 없음에도 이 조건식 밑에 있으니 그 횟수가 정해진다.
for( 초기화; 조건식; 증감식)
for문에서 중요한 것은 조건식이다.
만약 i를 반복문 안뿐만 아니라 밖에서 사용하고 싶다면 i의 초기화를 반복문 안에서 뿐 아니라 밖에서 초기화를 해주면 된다. for( ; ; ) 혹은 for( ; true ; ) 이렇게 표현될 수 있다.
for문 안에 초기화/조건식/증감식은 생략할 수 있다. 만약 for문 안에 초기화/조건식/증감 식이 생략된다면 조건식은 true로 간주하고 무한반복이 진행된다.
while은 반복 횟수를 모를 때 쓰임 if문하고 비슷하다.
while(조건식){ }
while문하고 for문은 100% 호환이 가능하다.
for문처럼 while문도 초기화 조건식 증감식으로 이루어져 있다.
조건식에 while(i--!=0)이라고 쓰여 있는 것은 조건식과 증감 식이 같이 있기 때문이다.
즉 이 말은i!=0이라는 조건식과 i--이라는 증감 식이 합친 거다.
위 사진을 보면 Scanner 통해 입력받고 받은 string을 Integer.parseInt로 int로 변환시킨다.
do-while문은 { }가 앞에 먼저 나와 적어도 한 번은 시행한다. 조건식이 참이든 거짓이든
사용자 입력받을 때 사용한다.
do {
} while(조건식);
끝에 세미콜론 잊지 말기를
일단 while문으로 작성하고 코드 중복이 있다면 do while문으로 수정한다.
무한 반복할 때 for문은 for( ; ; ) 이렇게 내용을 생략해도 좋지만 while문은 항상 while(true) 이런 식으로 true을 써주어야 한다.
continue문? 건너뛰는 것 다음 내역을 건너뜀 다음 반복문으로 넘어감
break를 넣어주면 반복문을 나가지만 continue를 넣어주면 건너뛰는 것임
두 개 이상의 반복문을 벗어나고 싶으면 벗어나고 싶은 반복문에 이름을 붙이고 break loop;
배열? 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
int [] score = new int [5]; 이런 식으로 만든다. 배열은 이름이 없고 인덱스가 붙는다.
0부터 시작되며 0,1,2,3 이런식으로 배열의 인덱스가 형성된다.
배열을 다루려면 참조 변수가 필요하다. 배열을 다룰 때 참조 변수를 통해서 저장공간을 다룬다.
참조 변수를 통해 배열을 다루는 방법은
score [0] score [1] 이런 식으로 참조 변수와 배열 인덱스 번호를 넣어주면 된다.
배열을 쓸 때 타입 옆에 [ ]를 넣어주어도 되고 변수 이름 옆에 [ ] 해줘도 된다.
전자는 자바 스타일 후자는 C언어 스타일이다.
보통 배열 선언과 생성을 같이 해준다.
선언은 int [ ] score ;
배열 생성은 score = int [ 4] ;
이는 보통 한 줄로 표현되는데 int [ ] score = new int [4 ];
인덱스 범위는 0부터 배열 길이-1까지 이다.
왜 -1을 빼주어야 하나? 이유는 배열의 인덱스가 0부터 시작되었기 때문이다.
배열의 길이는 배열 이름. length를 통해 알 수 있다.
int [] arr = new int [5];
int tmp= arr. length; 변수 tmp에서 배열 이름. length라는 명령으로 길이를 알 수 있다.
배열은 한번 생성하면 그 길이를 바꿀 수 없다.
배열을 한번 컴파일하고 실행하면 길이를 바꿀 수 없고 상수라는 것 인지
왜? 배열은 변경이 불가능하지?
메모리 안에 공간이 연속적으로 이어져 비어있으리라는 보장이 없다. 연속적으로 비어있을 수도 있고 없을 수도 있기 때문에 배열을 생성 후 길이를 바꾸지 않는다.
그렇다면 배열의 길이가 부족할 때는? 큰 배열을 만들고 기존의 것들을 복사한다.
배열의 초기화는 위 사진과 같다.
보통int [ ] score = { 50,60,70}; 이는 사실 , int [ ] score= new int [ ] {50,40,20};
배열의 초기화 방법
int [ ] score = new int [ 5 ] {10,12,23,60,50}
이를 보통 new int 생략해서
int [ ] score={10,20,30,40,20};
배열을 출력할 때
int [ ] iarr={100,20,30};
sysout(iarr)
이렇게 하면 출력이 안된다. 오직 캐릭터 배열일 때만 가능 그 외는 안된다.
그러면
for(int i =0; i <iarr.length; i++){
sysout(iarr [i]) 이렇게 해야 한다.
혹은
sysout(Arrays.toString(iarr));이라고 해야 하는데 여기서 Arrays는 배열을 다루는 매소드 이걸 이용하면 배열의 내용을 문자로 반환 toString이 문자로 반환한다는 뜻
위 식은 배열의 최솟값과 최댓값을 내는 코드이다.
일단 최대 최솟값은 변수를 설정하고 초기화로 제일 첫 번째 배열로 설정한다.
반복문을 이용하는데 가장 큰 값을 맥스에 넣고 그렇지 않은 값은 if else로 연결해서 min 값에 넣으면 된다.
배열 섞기
int [ ] numArr = { 0,1,2,3,4,5,6,7,8,9} ; 배열의 생성과 초기화 진행
sysout(Arrays.toString(numArr)); Arrays.toString은 배열을 출력할 때 쓰는 메서드이다. (암기)
for문을 이용해서 100번 정도 섞는다.
변수 n에 math.random함수를 *10 곱한다. 여기서 곱한 값은 나올 수 있는 수로 현재 0부터 9는 총 10 임으로 10을 곱한다.
메스 함수 범위는 0.0 <=Math.random <1임을 기억
그리고 배열 두 수를 바꿔줄 예정이기에 변수 tmp도 필요하다. 이는 임의적으로 첫 번째 배열을 넣는다.
그래서 첫번째 배열과 랜덤 함수로 섞어준 배열을 서루 바꿔주면 된다.
즉 numArr [0] 배열에 numArr [n]을 넣어주고 numArr[n] 여기에 tmp를 넣어주면 끝
빈 컵이 필요한데 그것이 tmp이다.
String은 참 조형이고 참조형의 기본값은 null이다.
이 코드 내가 직접 만든 것 임
ramdom 함수로 숫자를 섞어주고 이 숫자는 인덱스 번호가 되는 거다.
그래서 출력할 때 배열을 담은 변수와 인덱스 번호 대신 이 ramdom함수가 들어있는 변수를 넣어주면 된다.
이클립스에서 art+엔터 치면 내가 있는 위치 알 수 있다.
sysout() 안에 어떨 때는 쉼표를 쓰고 어떨때는 +를 쓰는지 알겠다.
보통 +가 기본이지만 " score [% d][% d] ", j, y 이런 식으로 % d를 채워져야 할 때는 쉼표를 쓴다.
2차 배열의 합을 구하는 공식 2차 배열이기 때문에 2중 포문을 이용한다.
일단 배열의 초기화와 변수 sum의 초기화 진행 후에 2차 포문
score.length 은 스코어의 길이를 이야기한다. 즉 열을 이야기하고 0~3을 이야기한다.
score [i]. length은 score [0] 일 때 score [1]일 때의 행을 이야기하고 그래서 3개이다.
위 사진 이해가 안돼서 한참을 보았다/ %5d % 3d의 차이점은 간격을 이야기한다.
일단 배열의 생성과 초기화 변수의 생성과 초기화를 해준다.
그리고 모양 틀을 printout으로 출력해주고 for 문을 돌려준다. 처음 i는 행을 말하고 그다음 j 열을 이야기한다.
각 과목별 점수합을 변수에 넣어놓고 일단 일련번호를 출력해야 한다. 모든 건 일단 행단 위로 출력된다. 1 2 3 4 5
그다음 열에 대한 for문을 작성하고 이를 이용해서 번호별 합계 계산 코드를 작성한다.
지금 까지 일련번호와 번호별 점수 합산을 끝냈다. 그리고 이를 출력한다. 일단 점수들만 나열한다. 이때 모두 가로로 출력된다. j 포문을 나온 상태에서 이제 총점과 평균을 나타내고 개행 문자를 넣어준다. 그렇게 되면 i가 변경될 때마다 개행 문자가 나와 자연스럽게 표를 형성한다.
__ 여기까지 내가 이해한 부분이고 이해가 안 될 때 코드를 지워보면서 이해하도록 한다.
댓글