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

3 回答 3

0

您需要打印string.charAt(i)而不是i.

此外,这段代码是不必要的,因为它总是返回 false:

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

由于您从 at 开始i = 1charat 索引0将永远不会被打印。在for-loop 之前,您应该添加以下行:

System.out.print(string.charAt(0));
于 2013-05-01T15:27:07.390 回答
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位置的字符,前提是它与前一个字符不同。简单的!

于 2013-05-01T16:06:37.960 回答
0

您正在打印循环计数器,而不是计数器位置的 char 值:

System.out.print(i);

应该:

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

对于大小 < 2 的输入,您将获得一个 arrayOutOfBoundsException。在初始化字符串后,您可能希望添加此行:

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));
          } 
    }
}
于 2013-05-01T15:22:30.443 回答