for 문 사용하여 입력된 문자열 거꾸로 출력하기
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int i;
System.out.print("Input Words");
String str=s.nextLine();
for(i=str.length()-1;i>=0;i--) {
System.out.printf("%c",str.charAt(i));
}
}
입력된 문자열을 받기 위해 String 타입 변수 선언 필요.
출력은 맨 뒤에서 부터 하는 것이기 때문에 for문의 시작점은 입력한 문자의 맨 마지막 글자.
.length() 는 입력된 문자열의 길이를 구하는 메소드.
.charAt(i) 는 입력된 문자열에서 i번째에 있는 문자를 구하는 메소드.
자바에서 문자열이 입력되면 1번째부터 세어지는게 아니라 0번째 부터 시작함.
예를 들면, 12345를 입력했을때 세 번째 문자는 3이 아닌 4가 되는 것. 왜냐면 0번째 문자가 1이 되기 때문에!
그래서 str.length()에 -1을 해주는 것.
즉, 내가 원하는 n번째의 문자를 구하고 싶다면 -1을 해줘야 내가 생각한 그 값이 나옴.
만약 for(i=str.length();i>-0;i--) 문을 런 해본다면 순서는 이렇게 된다.
1. 입력한 문자열의 크기가 i에 저장됨. (abcde를 입력했다면 i에는 5가 저장됨)
2. i>=0 비교. 5가 0보다 크니까 통과 밑에 실행문으로 이동.
3. str.charAt(5) 5번째 문자(%c)를 입력.
근데 자바에서는 항상 우리가 생각하는 1번째 문자를 0번째 문자로 받아들이기 때문에 5글자를 입력했다면 최대 입력된 n번째는 4번째가 됨.
a b c d e 글자수 5
0 1 2 3 4 번째 글자
4. 5번째 문자는 없는 셈이니 Error.
For(i=str.length()-1;i>-0;i--)문을 실행해보면
1. 문자열의 크기 5에서 1을 뺀 4가 i에 저장.
2. i>=0비교. 4가 0보다 크다. 참=>실행
3. str.charAt(i) 는 str입력된 문자열에서 4번째 글자. 즉 abcde 에서 e를 입력하게 됨.
4. 포문 처음으로 돌아감.
5. 이때는 i-- 증감식 실행. i--란 i의 값을 1씩 줄여나가는 것.
6. 그렇게해서 i의 값은 3이 되었고 3>=0 참이기 때문에 계속 실행하다가
7. 0 값에서 i--실행시 -1이 되므로 i>=0이라는 조건식에 반하게 되어 출력 중지.