2013-05-01 99 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 2013-05-01 15:17:48

+0

为什么不把每个字符放在'String'的'Set'(不允许重复)? – Sam 2013-05-01 15:20:25

+1

你的'else if'条件看起来不正确。你正在检查'string.charAt(i)'是否不等于它本身,它总是假的。 – Asaph 2013-05-01 15:23:07

回答

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 2013-05-01 15:26:00

+0

一旦为该字符串分配了一个值,该字符串就无需使用:String string = kb.nextLine(); – StuPointerException 2013-05-01 15:26:45

+0

@StuPointerException由于'for'循环不会输入小于2的长度,所以不需要检查'length <2'。毕竟,条件'i 2013-05-01 15:38:55

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 -loop之前,您应该加入这一行:

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

谢谢,程序现在运行完美。我也认为我有一个很好的想法,为什么它不工作。谢谢您的帮助。 – user2339846 2013-05-01 15:32:05

+0

@ user2339846正如StuPointerException指出的那样,主要问题是您打印的是'char'(即计数器)的索引,而不是“char”本身。 – 2013-05-01 15:35:12

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的位置,只有当它与前一个字符不同时。简单!