2013-05-01 200 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的位置,只有當它與前一個字符不同時。簡單!