您好我需要修复此代码以删除字符串中立即重复的字符。例如:如果我键入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 :(得分:0)
您正在打印循环计数器,而不是计数器位置的char值:
System.out.print(i);
应该是:
System.out.print(string.charAt(i));
对于大小为&lt;的输入,您将获得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));
}
}
}
答案 1 :(得分: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);
由于您从i = 1
开始,因此永远不会打印索引char
处的0
。在for
- 循环之前,您应该添加以下行:
System.out.print(string.charAt(0));
答案 2 :(得分: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 位置打印字符,只要它与前一个字符不同。简单!