我正在編寫一個采用中綴表達式并將其轉換為后綴的代碼。然后它采用后綴表達式并解決它。從中綴轉換為后綴工作正常,但由于某種原因,如果后綴表達式包含 2 位或更多,我的代碼無法解決后綴表達式。最初它會讀取 10 2 + 并返回 3,但是使用我當前的代碼,它會讀取 10 2 + 并吐出 540,所以我假設當我從 char 轉到 int 時,我得到的是 ASCII 代碼而不是實際值. 這是我的代碼的一部分,它嘗試讀取后綴字符串,確定它有什么數字,并將其放入堆棧以供以后解決:(注意我知道當前設置僅支持最多 3 位數字)LinkedStack<Integer> stack = new LinkedStack<Integer>(); for (int i = 0; i < str.length(); i++) { if(Character.isDigit(str.charAt(i))) { if(i+1 == str.length()) { stack.push(Character.getNumericValue(str.charAt(i))); break; } if(Character.isDigit(str.charAt(i+1))) { char x = str.charAt(i); char y = str.charAt(i+1); int k = x * 10; int m = k + y; stack.push(m); i++; } else if(Character.isDigit(str.charAt(i+1)) && Character.isDigit(str.charAt(i+2))){ char x = str.charAt(i); char y = str.charAt(i+1); char z = str.charAt(i+2); int k = x * 100; int w = y * 10; int m = x + y + z; stack.push(m); i++; i++; } else{ stack.push(Character.getNumericValue(str.charAt(i))); }任何反饋都會有所幫助。謝謝!
2 回答

慕尼黑5688855
TA貢獻1848條經驗 獲得超2個贊
我可以建議一個完全不同的解決方案
與 lambda 一行:
LinkedStack<Integer> stack = new LinkedStack<Integer>();
Stream.of( str.split( "\\D" ) ).forEach( s -> stack.push( Integer.parseInt( s ) ) );

慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
我自己找到了一個解決方案:
因此,例如,如果 int 應該是 2 位數字(10-99)而不是,我將使用 if 語句:
char x = str.charAt(i);
char y = str.charAt(i+1);
int k = x * 10;
int m = k + y;
stack.push(m);
i++;
我發現這可以代替:
int k = Character.getNumericValue(str.charAt(i)) * 10;
int m = k + Character.getNumericValue(str.charAt(i+1));
stack.push(m);
i++;
添加回答
舉報
0/150
提交
取消