3 回答

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個贊
Kevin Cruijssen解決了您的問題,但您還可以:
使用HashMap解決這個問題?,F(xiàn)在,您的算法時間復(fù)雜度為O(n*m)(n 基字符串長度,m - 表中的字母數(shù)量),因?yàn)槟仨毐闅v每個字母的整個字母數(shù)組。
使用 HashMap,您可以在 O(1) 中找到正確的字母??炝撕芏唷K袁F(xiàn)在你的算法有O(n) 的時間復(fù)雜度。
簡單的例子:
Map<Character, Integer> encoding = new HashMap<>();
encoding.put('a', 0);
encoding.put('b', 1);
encoding.put('c', 2);
encoding.put('d', 3);
String toEncode = "abcd";
char[] chars = toEncode.toCharArray();
StringBuilder sb = new StringBuilder();
for(char c : chars){
int newInt = encoding.getOrDefault(c, -5); //-5 is just a flag that there is no char to encode
if(newInt == -5){
continue; //or do something else, e.g throw exception;
}
sb.append(newInt);
}
System.out.println(sb.toString());
//Parse double if you want, but remember that what *Nikolas* said in the comments under your post.
//Double.parseDouble(sb.toString());

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個贊
你的 twoD 數(shù)組的長度是 2。你的第二個循環(huán)應(yīng)該從z = 0
到迭代twoD[0].length
。
嘗試有意義地命名您的變量,以便更容易找到這樣的錯誤。還要檢查 foreach 循環(huán),這樣您就不必?fù)?dān)心索引。Java Maps 可以更好地將字符映射到數(shù)字。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個贊
問題出在您的內(nèi)部循環(huán)中:twoD.length是 2,因?yàn)閠woD包含您的兩個內(nèi)部字符數(shù)組。
你應(yīng)該使用twoD[0].length:
for(int c=0; c<tab.length; c++) {
for(int z=0; z<twoD[0].length; z++) {
...
但是,由于您使用的是所有十位數(shù)字,因此最好改用它:
char twoD[][] = {{'a','b','c','d','e','f','g','h','i','j'}, {'0','1','2','3','4','5','6','7','8','9'}};
int amountOfDigitsUsed = 10; // Equal to `twoD[0].length` or `twoD[1].length`.
for(int c=0; c<tab.length; c++) {
for(int z=0; z<amountOfDigitsUsed; z++) {
...
無論您是否使用硬編碼twoD轉(zhuǎn)換和amountOfDigits使用與否。在您當(dāng)前的實(shí)現(xiàn)中,您twoD.length是 2,導(dǎo)致您現(xiàn)在遇到的問題。
添加回答
舉報