다양한 변수의 데이터타입이 있는만큼 형변환도 자주 이루어지는데 이 때의 형변환은 앞에 (데이터타입)
을 적어주는 식으로 이루어진다. 그리고 숫자에서 문자로 문자에서 숫자로 형변환이 될 때는 아스키 코드를 사용한다.
예를 들어 이런 식이다.
//정수->문자
char A = (char)정수변수명
//정수->실수
double B = (double)정수변수명
//실수->정수
int C = (int)실수변수명
1주차의 숙제는 요리 레시피 메모장 만들기였는데
중간에 실수가 포함된 여러 줄의 입력을 하고 이를 한 줄씩 출력하는 것이었다.
예를 들어 첫 줄은 제목, 두 번째 줄은 평점(이때 실수로 입력받아 정수로 출력), 세 번째 줄부터는 레시피를 10줄 입력해서 앞에 인덱스(1., 2., ...) 를 붙이는 식이다.
처음에는 쉽게 될 줄 알고 코드를 작성했는데 문제가 생겼다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
double star = sc.nextDouble();
String n1 = sc.nextLine();
String n2 = sc.nextLine();
String n3 = sc.nextLine();
String n4 = sc.nextLine();
String n5 = sc.nextLine();
String n6 = sc.nextLine();
String n7 = sc.nextLine();
String n8 = sc.nextLine();
String n9 = sc.nextLine();
String n10 = sc.nextLine();
int intstar = (int)star;
System.out.println("[ "+title+" ]");
System.out.println("별점 : " + intstar + " ("+intstar*20 + "%)");
System.out.println("1. "+n1);
System.out.println("2. "+n2);
System.out.println("3. "+n3);
System.out.println("4. "+n4);
System.out.println("5. "+n5);
System.out.println("6. "+n6);
System.out.println("7. "+n7);
System.out.println("8. "+n8);
System.out.println("9. "+n9);
System.out.println("10. "+n10);
}
}
출력을 하니 이렇게 첫 번째 줄의 레시피가 공백으로 뜨고 그 다음부터 입력돼서 레시피 입력을 9번째 줄까지밖에 못하는 것이었다.
왜지? 코드를 보니 걸릴만한 부분이 입력부분에서 문자열 입력sc.nextLine()
사이에 실수 입력 인풋sc.nextDouble()
이 있다는 것 뿐이었다.
그래서 이 sc.nextLine()
의 Line이 문제인가 싶어
sc.nextLine()
과 sc.next()
의 차이를 검색해 보기로 했다.
쉽게 말하면 next()는 공백을 기준으로 한 단어씩 입력받고
nextLine()은 엔터를 기준으로 한 줄씩 입력을 받는다.
next()는 개행문자(\n)
를 포함하지 않고 nextLine()은 개행문자(\n)
를 포함한다.
그래서 나는 오류가 위의 것이었다.
sc.nextDouble()
를 사용해서 숫자를 입력하면 개행문자를 포함하지 않고 가져오기때문에 뒤의 \n
가 남게 된다.
이 때, 바로 다음 줄의 sc.nextLine()
가 이 남은 \n
를 입력받아 넘겨버리기 때문에 한 줄의 공백이 생겨버리는 것이었다.
이를 해결하기 위해 나는 중간에 한 줄의 sc.nextLine()
를 넣어 저 남는 \n
를 없애어 문제를 해결했다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
double star = sc.nextDouble();
String skip = sc.nextLine();
String n1 = sc.nextLine();
String n2 = sc.nextLine();
String n3 = sc.nextLine();
String n4 = sc.nextLine();
String n5 = sc.nextLine();
String n6 = sc.nextLine();
String n7 = sc.nextLine();
String n8 = sc.nextLine();
String n9 = sc.nextLine();
String n10 = sc.nextLine();
int intstar = (int)star;
System.out.println("[ "+title+" ]");
System.out.println("별점 : " + intstar + " ("+intstar*20 + "%)");
System.out.println("1. "+n1);
System.out.println("2. "+n2);
System.out.println("3. "+n3);
System.out.println("4. "+n4);
System.out.println("5. "+n5);
System.out.println("6. "+n6);
System.out.println("7. "+n7);
System.out.println("8. "+n8);
System.out.println("9. "+n9);
System.out.println("10. "+n10);
}
}