본문 바로가기
JAVA

JAVA 복습 2

by 사브나19 2022. 8. 29.

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가 변경될 때마다 개행 문자가 나와 자연스럽게 표를 형성한다. 

__ 여기까지 내가 이해한 부분이고 이해가 안 될 때 코드를 지워보면서 이해하도록 한다. 

 

 

 

'JAVA' 카테고리의 다른 글

JAVA 복습 3  (0) 2022.08.30
예외 선언하기  (0) 2022.08.30
예외 처리  (0) 2022.08.28
내부 클래스  (0) 2022.08.28
추상 클래스 (abstract)  (0) 2022.08.27

댓글