중간고사 대비 java 3, 4단원 정리
- java
혼자 공부하는 자바 3단원의 연산자와 4단원의 조건문과 반복문 관련 내용이다. 이미 C등에서 많이 본 내용이 있으므로 주의할 점만 간단히 정리했다.
- 단항 연산자로 부호 연산자가 있는데 이 계산도 int형으로 자동 타입 변환이 일어난다. 따라서 다음과 같은 코드는 에러가 발생한다.
byte a=1;
byte b=-a; // -a의 결과가 int형이 되므로 에러
byte a=1;
byte b=-a; // -a의 결과가 int형이 되므로 에러
- Math.random() 을 사용해서 0.0<=x<1.0 범위의 값을 뽑을 수 있다. 1.0은 미포함이다.
이를 이용해서 start부터 시작하는 n개의 정수 중 하나를 얻기 위한 연산식을 다음과 같이 만들 수 있다. (int)(Math.random()*n)+start
- java의 switch문은 문자열에도 적용할 수 있다. 더 구체적으로는 switch문의 조건식은 int, char, String, enum 타입이어야 한다.
package study;
import java.util.Scanner;
public class Hello {
public static void main(String[] args){
// 스캐너 객체 생성 후 sc에 저장
Scanner sc = new Scanner(System.in);
// 이름을 입력받아 name에 저장
String name = sc.nextLine();
switch (name){
case "김성현":
System.out.println("안녕하세요 김성현님");
break;
default:
System.out.println("안녕하세요");
}
}
}
package study;
import java.util.Scanner;
public class Hello {
public static void main(String[] args){
// 스캐너 객체 생성 후 sc에 저장
Scanner sc = new Scanner(System.in);
// 이름을 입력받아 name에 저장
String name = sc.nextLine();
switch (name){
case "김성현":
System.out.println("안녕하세요 김성현님");
break;
default:
System.out.println("안녕하세요");
}
}
}
- 루프 카운터 변수는 실수를 사용하면 안된다.
컴퓨터 내에서 실수를 완벽히 정확하게 표현할 수 없기 때문에 잘못된 카운팅이 될 수 있다.
package study;
public class Hello {
public static void main(String[] args){
for(double i=0.1;i<=1.0;i+=0.1){
System.out.println(i);
// 중간중간 정확하게 0.1씩 증가하지 않는 부분이 존재하며 경우에 따라 의도대로 실행되지 않을 수 있다
}
}
}
package study;
public class Hello {
public static void main(String[] args){
for(double i=0.1;i<=1.0;i+=0.1){
System.out.println(i);
// 중간중간 정확하게 0.1씩 증가하지 않는 부분이 존재하며 경우에 따라 의도대로 실행되지 않을 수 있다
}
}
}
- 라벨을 이용해서 중첩 반복문을 한번에 탈출할 수 있다.
탈출하고 싶은 반복문 앞에 적절한 이름의 Label을 붙인 후 break Label;
을 사용하면 된다. Label은 지정한 라벨명으로 적절히 바꾸면 된다.
package study;
public class Hello {
public static void main(String[] args){
Label:for(int i=0;i<5;i++){
for(int j=0;j<i;j++){
for(int k=0;k<j;k++){
System.out.printf("%d %d %d\n", i,j,k);
if(k==1){break Label;}
}
}
}
}
}
package study;
public class Hello {
public static void main(String[] args){
Label:for(int i=0;i<5;i++){
for(int j=0;j<i;j++){
for(int k=0;k<j;k++){
System.out.printf("%d %d %d\n", i,j,k);
if(k==1){break Label;}
}
}
}
}
}