第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有字符數(shù)組功能的Java for循環(huán)

帶有字符數(shù)組功能的Java for循環(huán)

人到中年有點(diǎn)甜 2021-09-26 14:23:25
我在這里遇到了循環(huán)問題,我正在編寫一個腳本,該腳本將接收字符串“geij”或“abab”,并且必須將其轉(zhuǎn)換為“6478”或“0101”之類的雙精度值。由于二維數(shù)組,我進(jìn)行了從字母到數(shù)字的轉(zhuǎn)換:String crypt = "geij"; char twoD[][] = {{'a','b','c','d','e','f','g','h','i','j'}, {'0','1','2','3','4','5','6','7','8','9'}};首先,我將字符串傳遞到一個字符數(shù)組中:char tab[] = crypt.toCharArray();然后我使用循環(huán)將字母轉(zhuǎn)換為數(shù)字:for(int c=0;c<tab.length;c++) {    for(int z=0;z<twoD.length;z++) {        if(tab[c] == twoD[0][z]) {                      tab[c] = twoD[1][z];    }}然后我創(chuàng)建一個名為“second”的新字符串實(shí)例,將數(shù)組轉(zhuǎn)換為字符串String second = new String(tab);我把這個 String 變成了 doubledouble finalC = Double.parseDouble(second);問題在于這個循環(huán),如果字符串 crypt 是“abab”,則循環(huán)將返回 0101,因?yàn)樗鼞?yīng)該返回 0101,但是如果字符串包含來自兩個數(shù)組的第一個數(shù)組中的“a”或“b”之后的任何字母 -維數(shù)組,例如字符串“geij”,程序?qū)⒑唵蔚胤祷亍癵eij”。我不明白為什么這個程序沒有比 b 更進(jìn)一步,它開始給我一個蛋頭。如果有人有想法,我將不勝感激!以下是字符串 "abcd" 循環(huán)之后的選項(xiàng)卡數(shù)組內(nèi)部示例:Indice : 0 value: 0Indice : 1 value: 1Indice : 2 value: cIndice : 3 value: d
查看完整描述

3 回答

?
慕無忌1623718

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());


查看完整回答
反對 回復(fù) 2021-09-26
?
慕尼黑8549860

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ù)字。


查看完整回答
反對 回復(fù) 2021-09-26
?
墨色風(fēng)雨

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)在遇到的問題。


查看完整回答
反對 回復(fù) 2021-09-26
  • 3 回答
  • 0 關(guān)注
  • 260 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號