2013-05-01 3 views
0

Привет, мне нужно исправить этот код, чтобы удалить символы, которые повторяются непосредственно в строке. Например: если я нахожу aaabbbcccdeeff, он должен возвращать abcdef в конце. Однако на компьютере в классе он возвращает что-то из «вне диапазона (числа)», причем число зависит от количества символов, которые я использовал. Однако на моем Mac он просто возвращает число, подобное 3, в качестве вывода и не дает сообщения об ошибке. Я нахожусь на Eclipse.Удаление повторяющихся символов в строке

Пожалуйста, помогите, я не понял, что сказал профессор, и он редко помогает. Код (несколько помог профессор):

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

Почему бы вам не поместить каждый символ в 'Set' (не допускает дублирования)' String'? – Sam

+1

Состояние 'else if' выглядит неправильно. Вы проверяете, является ли 'string.charAt (i)' не равным себе, что всегда ложно. – Asaph

ответ

0

Вы печатаете свой счетчик цикла, а не значение полукокса в положении счетчика:

System.out.print(i); 

Должно быть:

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

Вы получите массивOutOfBoundsException для входов размера < 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. Мне нужно это вернуть «Кевин» – user2339846

+0

Ваша строка инициализируется после того, как ей присвоено значение: String string = kb.nextLine(); – StuPointerException

+0

@StuPointerException Нет необходимости проверять, '' length <2', поскольку 'for'-loop не будет введен для длин менее 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, то char по индексу 0 никогда не будут напечатаны. Перед for -loop, вы должны добавить следующую строку:

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)); 
     } 
    } 

Идея, распечатайте начальный символ, а затем напечатать символ в i th положение, только если оно отличается от предыдущего символа. Просто!

Смежные вопросы