2010-10-28 156 views
1

在下面的代碼中,我試圖檢查一個int(轉換爲String)是否包含重複數字。Java indexOf和lastIndexOf返回-1 ??請幫忙

public static boolean hasDupes(int n) 
    { 
    String number = new String(); 
    number = Integer.toString(n); 
    int digit = 0; 
    System.out.println(num.indexOf(digit)); 
    System.out.println(num.lastIndexOf(digit)); 
    while(digit < 10) 
    { 
     if(number.indexOf(digit) != number.lastIndexOf(digit)) 
     { 
     return true; 
     } 
     digit++; 
    } 
    //System.out.println(n); 
    return false; 
    } 

我放在System.out.println行,因爲我不能肯定,爲什麼我的方法是行不通的。他們總是打印'-1'。我不明白如何索引可以是-1,以及爲什麼它不工作。

+4

指數-1意味着它不能在字符串中被發現。按照文檔... – EboMike 2010-10-28 23:09:01

+0

你的printlns說「num」,但你的字符串被稱爲「數字」。 – 2010-10-28 23:15:08

+0

我假設有一個拼寫錯誤,因爲你初始化'number'並且調用'num'上的方法。哦,永遠不要調用String構造函數,這是沒用的。只要'String number = Integer.toString(n);'而不是。 – 2010-10-28 23:23:17

回答

5
number.indexOf(digit) 

digitint。傳遞到indexOf它將用作字符編號,因此您將查找char 0(空字符)而不是ASCII數字'0'。當然,該字符不在字符串中,所以你得到-1。

您可能正在考慮indexOf(String)方法。例如

var dstr= ""+digit; 
if (number.indexOf(dstr) != number.lastIndexOf(dstr)) 
    return true; 

或者,如果你想與一個範圍的字符代碼做到這一點:

for (char digit= '0'; digit<='9'; digit++) 
    if (number.indexOf(digit) != number.lastIndexOf(digit)) 
     return true; 
2

這可能是因爲您使用int參數調用indexOf,但它正在尋找具有該unicode值的字符,而不是字符串值。轉換數字爲字符串,像這樣:

while(digit < 10) 
    { 
     String digitString = String.valueOf(digit); 
     if(number.indexOf(digitString) != number.lastIndexOf(digitString)) 
     { 
     ... 
+0

非常感謝你:) – Deho 2010-11-10 01:12:09