작성
·
339
·
수정됨
0
String[][] seats3 = new String[10][15];
char ch = 'A'; // 아스키코드 넣기
for (int i = 0; i < seats3.length; i++) {
for (int j = 0; j < seats3[i].length; j++) {
seats3[i][j] = String.valueOf(ch) + (i + 1); // 아스키 코드를 문자열로 바꿔서
}
ch++;
}
여기서 ch라는 변수에 넣은 아스키 코드는 기본적으로 문자열로 넣은걸로 알고있는데 반복문 안에 들어가면 정수형으로 자동 형변환 되는건가용? 왜 에러가 뜨고 메소드를 써야하는지 더 자세한 설명이 궁금합니다 원리가 따로 있는건지....
seats[i][j] 여기는 각각 index번호가 들어가야 하지 않나용
답변 1
0
안녕하세요?
먼저 다차원 배열인 seats 의 자료형은 String 입니다. 10 x 15 크기만큼의 공간에 모두 문자열이 대입되기를 기대하는 배열이죠. 질문에 대한 답변을 조금 쉽게 드리기 위해 다음과 같이 바꾸겠습니다.
String seat;
이렇게 하면 seat 라는 이름의 String 변수가 하나 만들어집니다.
이때 다음과 같은 식을 사용할 수 있을까요?
seat = 93; // 정수
seat = 98.8; // 실수
seat = 'A'; // 문자
안됩니다.
seat 는 자료형이 String 인데 우항에는 문자열이 아닌 다른 값들이 들어와서 에러가 발생하게 되지요.
하지만 다음 식은 어떨까요?
seat = Integer.toString(93); // 정수를 문자열로
seat = Double.toString(98.8); // 실수를 문자열로
seat = String.valueOf('A'); // 하나의 문자를 문자열로
seat = "안녕하세요"; // 문자열
됩니다.
원래의 값은 정수(93), 실수(98.8), 문자('ㅁ')이지만 모두 String 으로 변환을 하였으므로 사용 가능합니다.
그럼 이렇게 하면 어떨까요?
seat = String.valueOf('A') + 11;
여기서 String.valueOf('A') 는 "A" 라는 문자열이 되며 11 은 정수입니다. 그리고 자바에서 문자열과 정수를 더하게 되면 그 결과는 문자열이 되지요. 그래서 "A" + "11" 의 결과인 "A11" 이라는 문자열이 됩니다. 결국 위 문장은 아래 문장과 같은 의미가 되는 거에요.
seat = "A11";
참고로 String(문자열) 과 Number(수) 간의 연산 결과는 이렇습니다.
1) Number + Number => Number; // 1 + 1 = 2
2) Number + String => String; // 1 + "1" = "11"
3) String + Number => String; // "1" + 1 = "11"
4) String + String => String; // "1" + "1" = "11"
그래서 다음 식은
String.valueOf('A') + 11;
3) String + Number 형태이므로 결과는 String 이며 seat 변수에 대입이 가능합니다.
결과적으로 다음 코드에서는 ch 변수에 저장된 하나의 문자를 String.valueOf() 를 통해 문자열로 변환한 뒤, 정수와 결합하여 최종적으로 문자열 형태로 seats3[i][j] 에 대입하게 되는 것이랍니다.
seats3[i][j] = String.valueOf(ch) + (j + 1);
천천히 읽어보시고 여전히 궁금증이 해소되지 않는다면 다시 질문 남겨주세요 😊
감사합니다.