2013-05-01 1 views
0

안녕하세요 문자열에서 즉시 반복되는 문자를 삭제하려면이 코드를 수정해야합니다. 예 : aaabbbcccdeeff를 입력하면 끝에 abcdef가 반환됩니다. 그러나 클래스의 컴퓨터에서는 "범위를 벗어남 (number of range)"이라는 값을 반환합니다.이 숫자는 사용 된 문자 수에 따라 다릅니다. 내 Mac에서 그러나 그것은 출력으로 3 같은 번호를 반환하고 오류 메시지를 제공합니다. 나는 이클립스에있다.문자열에서 중복 문자 삭제

교수님의 의견을 이해하지 못했고 거의 도움이되지 않습니다. 코드는 (다소 교수에 의해 도움)된다

package firstProgramSimple; 

import java.awt.Toolkit; 
import java.util.Scanner; 

public class SimpleVersion { 

    public static void main(String[] args) { 

    Scanner kb = new Scanner(System. in); 
    System.out.println("Entre String"); 
    String string = kb.nextLine(); 
    //System.out.println(string);   
    int length = string.length(); 
    for (int i = 1; i < length; i++) { 
     if (string.charAt(i) != string.charAt(i - 1)) { 
     System.out.print(i); 
     } else if (string.charAt(i) != string.charAt(i)) { 
     System.out.print(i); 
     } 
    } 
    } 
} 
+0

그건 그렇고, 나는 컴퓨터 프로그래밍의 첫 학기입니다. 그래서 나에게 쉽게 가져 가라. 아주 기본적인 기능과 명령을 사용해야합니다. 그리고 좋은 설명이 필요합니다. 어떤 도움을 주셔서 감사합니다. – user2339846

+0

각 캐릭터를'String'의'Set' (중복을 허용하지 않음)에 넣지 않는 이유는 무엇입니까? – Sam

+1

'else if'조건이 올바르지 않습니다. 'string.charAt (i)'가 자신과 같지 않은지 확인하고 있는데, 항상 false입니다. – Asaph

답변

0

당신은 카운터의 위치에있는 문자의 값을 루프 카운터를 인쇄 및되지 않습니다

System.out.print(i); 

가되어야한다

System.out.print(string.charAt(i)); 

크기가 < 인 입력에 대해 arrayOutOfBoundsException이 발생합니다. 2. 문자열이 초기화 된 후에이 행을 추가 할 수 있습니다.

이 같은
if(string == null || string.length() < 2){ 
    System.out.println(string); 
    return; 
} 

뭔가 :

public static void main(String[] args) { 

    Scanner kb = new Scanner(System. in); 
    System.out.println("Entre String"); 
    String string = kb.nextLine(); 

    //System.out.println(string);   
    int length = string.length(); 
    if(length < 2) { 
     System.out.println(string); 
     return; 
    } 

    System.out.print(string.charAt(0)); 
    for (int i = 1; i < length; i++) { 
     if (string.charAt(i) != string.charAt(i - 1)) { 
      System.out.print(string.charAt(i)); 
      } 
    } 
} 
+0

system.out.println (string.charAt)을 추가하려고 시도했지만 숫자 만 반환합니다. kkeevviinn을 입력하고 2468을 반환합니다. "Kevin"을 반환해야합니다. – user2339846

+0

호출시 값이 할당되면 문자열이 초기화됩니다. String string = kb.nextLine(); – StuPointerException

+0

@StuPointerException'for' 루프가 2보다 작은 길이를 입력하지 않기 때문에'length <2'를 검사 할 필요가 없습니다. 결국'i

0

당신은 string.charAt(i)하지 i를 인쇄해야합니다.

//string.charAt(i) is always equal to itself 
else if (string.charAt(i) != string.charAt(i)) { 
    System.out.print(i); 

당신이 i = 1에서 시작하기 때문에 인덱스 0char가 인쇄되지 않습니다 : 항상 false를 반환하기 때문에

또한,이 코드 조각은 필요하지 않습니다.

System.out.print(string.charAt(0)); 
+0

감사합니다. 프로그램이 이제 완벽하게 실행됩니다. 나는 또한 그것이 효과가 없었던 이유에 대해 좋은 생각을 가지고 있다고 생각한다. 도와 주셔서 감사합니다. – user2339846

+0

@ user2339846 StuPointerException이 지적했듯이, 주된 문제는'char' 자체가 아니라'char' (즉, 카운터)의 인덱스를 출력하고 있다는 것이 었습니다. –

0

그냥 우는 소리처럼 for 루프를 대체 :

System.out.print(string.charAt(0)); 
    for (int i = 1; i < length; i++) { 
     if (string.charAt(i) != string.charAt(i - 1)) { 
      System.out.print(string.charAt(i)); 
     } 
    } 

먼저 시작하는 문자를 인쇄 된 아이디어는, 다음 에있는 문자를 인쇄 for -loop 전에이 줄을 추가해야합니다 i th 위치. 이전 문자와 다른 경우에만. 단순한!