簡體   English   中英

有人可以告訴我for循環怎么了嗎?

[英]Can someone tell me what's wrong with the for loops?

所以這是我的代碼。 我想要做的是在字符串數組中標識每個唯一字母,然后將唯一字母保存在字符數組中。 我嘗試了以下代碼,但是Eclipse行為異常。 它只會在字符串數組中添加第一個字母,並將重復的相同字母添加到char數組中,這不是我想要做的,代碼看起來也不會實現這樣的目的。

public class Minglish {   
 public static String answer(String[] words) {
    char[] letters = new char[25];
    int i = 0;
    //iterate through words to get every unique letters
    for (String word: words) {
        for (char letter: word.toCharArray()) {
            if (!(letters.toString().contains(String.valueOf(letter)))) {
                letters[i] = letter;
                i++;
            }
        }
    }
    return (letters.toString()); 
} 
}

有人可以向我解釋這是我的代碼/邏輯問題,還是我的編譯器中的錯誤?

另外,當您嘗試使用打印輸出結果數組時

System.out.println

它只會打印出字符串的地址。

謝謝您的幫助! :)

數組不會覆蓋toString因此您只獲取輸入數組的Object#toString表示形式。 你可以做

return new String(letters);

letter.toString()提供了一些奇怪的輸出。 在Java中,要么必須重寫toString方法以查看使用非原始類型時想要什么,要么必須創建自己的方法來打印它們。

您可以使用for循環來循環打印,簡單而快速的解決方案:)

用於搜索..

可以有許多不同的實現方式來在數組中進行搜索,但是如果數據很小且沒有順序,我可以使用這種方式。當然,這種實現方式可以與其他對象一起使用,其行為是使用equals方法代替'=='。 順便說一下,對於通用列表,java Collections類提供了排序和搜索方法

public int indexOf(char key, char[] arr) {
    // Like a linear search.. 
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == key)
            return i;
    }
    return -1; //defeault return is -1
}

我建議使用charValue()方法,並使用該方法將字符直接映射到數組。 如果您具有所有小寫英文字符,則可以簡單地從小寫字符的charValue()中減去字符'a'的charValue()並獲得一個可以完美映射到數組索引的數字。

如果執行此操作,則實際上可以保留任何字符的出現次數(作為一個整數數組而不是字符),或使用布爾數組。

回答我自己的問題...就像@Reimeus'所說的那樣,

charArray.toString() 

將僅返回數組的內存地址,而不是其字符串值。 您可以使用

 new String(char[] array) 

獲取字符數組的字符串值,或者

String.valueOf(char[] array)也可以工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM