PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   請問javascript轉JAVA這樣改寫 對嗎? (https://www.pcdvd.com.tw/showthread.php?t=1052035)

公不 2014-06-17 07:30 PM

請問javascript轉JAVA這樣改寫 對嗎?
 
請問這個javascript
代碼:
	function hexstr2array(input, length) {
		var output = new Array(length);
		var i=0;

		for (i=0; i<length; i++) {
			if (i < input.length/2) {
				output[i] = parseInt(input.substr(i*4,4),16);
			} else {
				output[i] = 0;
			}
		}
		return output;
	}

轉成JAVA

代碼:
public static String[] hexstr2array(String input,int length) {
	String[] output = new String[length];
    for (int i=0; i<length; i++) {
			if (i < (input.length())/2) {
				int ss = Integer.parseInt(input.substring((i*4),4));				
				output[i] =""+ss;
			} else {
				output[i] = "0";
			}
         }
 
		return output;
    }


是這樣寫嗎?

謝謝

micall.lee 2014-06-17 07:38 PM

引用:
作者公不
請問這個javascript
function hexstr2array(input, length) {
var output = new Array(length);
var i=0;

for (i=0; i<length; i++) {
if (i < input.length/2) {
output[i] = parseInt(input.substr(i*4,4),16);
} else {
output[i] = 0;
}
}
return output;
}
轉成JAVA

public static String[] hexstr2array(String input,int length) {
String[] output = new String[length];
for (int i=0; i<length; i++) {
if (i < (input.length())/2) {
int ss = Integer.parseInt(input.substring((i*4),4));
output[i] =""+ss;
} else {
output[i] = "0";
}
}

return output;
}

是這樣寫嗎?

謝謝

看起來沒錯

不過算是多嘴 ... 你執行看看不就知道了?

公不 2014-06-17 07:54 PM

引用:
作者micall.lee
看起來沒錯

不過算是多嘴 ... 你執行看看不就知道了?

我改成java

執行到

代碼:
for (int i=0; i<length; i++) {
if (i < (input.length())/2) {
int ss = Integer.parseInt(input.substring((i*4),4));	
output[i] =""+ss;


直接 Exception

不是很懂哪邊錯了

謝謝

micall.lee 2014-06-17 08:00 PM

引用:
作者公不
我改成java

執行到

for (int i=0; i<length; i++) {
if (i < (input.length())/2) {
int ss = Integer.parseInt(input.substring((i*4),4));
output[i] =""+ss;

直接 Exception

不是很懂哪邊錯了

謝謝

JAVA 我不熟,但直覺就是資料型別或許要注意一下兩種語言的規範

還有 Java 有 parseInt 這個方法嗎?有的話你也可能要注意一下用法,或許不一樣,Javascript 雖然也有 Java 二字,但兩者可能不一樣

smallwall 2014-06-17 08:13 PM

引用:
作者公不
我改成java

執行到

for (int i=0; i<length; i++) {
if (i < (input.length())/2) {
int ss = Integer.parseInt(input.substring((i*4),4));
output[i] =""+ss;

直接 Exception

不是很懂哪邊錯了

謝謝



基本上大部分的錯誤, 看Exception的訊息就知道哪裡錯
以下為人腦debug, 如果出錯請勿見怪
當 input.length() >= 6,且 length >= 3 時,
i的範圍可能會大於2
當i >= 2時, input.substring((i*4),4) 就會爆掉

傳說 2014-06-17 08:42 PM

編譯能過那就是邏輯或資料有問題
猜測如下:
1.從函數名稱看起來是要把16進位的字串轉成陣列
那麼Integer.parseInt(String args)是當10進位在解析
如果資料有A~F鐵定Exception
2.length從外部傳入,如果length<(input.length/2)
則回傳的陣列內容就有問題,這種寫法並不適當吧?
3.就算是檢查資料正確性,但都已經解成int了,為何要浪費效能再轉回String?

PS.絕大部份Exception都把原因寫的很清楚,就算看不懂也貼出來
不然人腦模擬執行不一定會和你遇到的錯誤一樣!!!

darkangel 2014-06-18 03:49 AM

把 output 設成 static,不要 return。
很多年沒碰 java~ 我忘了可不可以這樣,不過你的程式有一個明顯的問題:return local variable...
我是用 C 的觀點來看的。

記憶我的RDesign 2014-06-18 05:15 AM

引用:
作者傳說
編譯能過那就是邏輯或資料有問題
猜測如下:
1.從函數名稱看起來是要把16進位的字串轉成陣列
那麼Integer.parseInt(String args)是當10進位在解析
如果資料有A~F鐵定Exception
2.length從外部傳入,如果length<(input.length/2)
則回傳的陣列內容就有問題,這種寫法並不適當吧?
3.就算是檢查資料正確性,但都已經解成int了,為何要浪費效能再轉回String?

PS.絕大部份Exception都把原因寫的很清楚,就算看不懂也貼出來
不然人腦模擬執行不一定會和你遇到的錯誤一樣!!!


+1

直接把input和exception貼出來吧。

silent 2014-06-18 06:38 AM

input.substring((i*4),4)

這裡怪怪的,
理解沒錯的話,
String substring(int beginIndex, int endIndex),

i = 0, 0 ~ 4,
i = 1, 4 ~ 4,
i = 2, 8 ~ 4 .....?!

silent 2014-06-18 07:00 AM

StringIndexOutOfBoundsException
如果是這個的話..


所有的時間均為GMT +8。 現在的時間是04:59 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。