iT邦幫忙

0

JAVA 新手問題 請問我錯在哪裡 100求解~(已解決 感謝)

要把輸入的數字反轉輸出 我是這樣寫的

package studentdatademo;

public class AntiNumbers
{

public static void main(String[] args) 
{
  // TODO Auto-generated method stub

 System.out.println(antiNum(-23) );
}
public static int antiNum (int x)
{
	if (x<0)
	{
		char[] numArray=new StringBuffer(x).deleteCharAt(0).toString().toCharArray();
		char[] cRet = new char[numArray.length];
		int j =0;
		for(int i =numArray.length-1;i<0;i--) 
		{
			cRet[j]=numArray[i];
			j++;
	    }
		int ansNum = Integer.valueOf(String.valueOf(cRet));
		ansNum =Math.negateExact(ansNum);
		return ansNum ;
    }else if(x>0)
     {
    	char[] numArray=new StringBuffer(x).toString().toCharArray();
		char[] cRet = new char[numArray.length];
		int j =0;
		for(int i =numArray.length-1;i<0;i--) 
		{
			cRet[j]=numArray[i];
			j++;
	    }
		int ansNum = Integer.valueOf(String.valueOf(cRet));
		return ansNum ;
     }
     else    
     {
    	 int ansNum=0; 
    	 return ansNum ;
     }
	
 }

}

付100求解答~ 深知專業要付錢 但小弟錢錢有限

感謝各位 小弟完成新手任務後向各位回覆

0
喵凹咿唉思嗯
iT邦新手 4 級 ‧ 2021-06-09 11:43:12
最佳解答

試著去看Exception給你的訊息跟IDE環境提供的建構說明吧

一執行完第一個遇到的錯誤就是NegativeArraySizeException

簡單說就是Array的長度不能為負的

錯誤指向這一行

char[] numArray=new StringBuffer(x).deleteCharAt(0).toString().toCharArray();

如果你仔細看建構說明
Java Doc

你傳int給他的時候int代表的作用如下

StringBuffer(int capacity)
Constructs a string buffer with no characters in it and the specified initial capacity.

所以如果你是想把數字轉入StringBuffer

char[] numArray=new StringBuffer().append(x).deleteCharAt(0).toString().toCharArray();

再來就會遇到 NumberFormatException
內容物亂碼無法轉成數字, 這個問題就上面小魚講的問題囉

不過數字出來是-32 這是你要的?

試著把重覆的程式組合在一起,不然會不好維護喔..

soloo951 iT邦新手 5 級 ‧ 2021-06-09 23:04:34 檢舉

謝謝 原來是這麼簡單的錯誤....
已私簡訊

soloo951 iT邦新手 5 級 ‧ 2021-06-09 23:22:33 檢舉

我試試看把重複的組合看看

4
小魚
iT邦大師 1 級 ‧ 2021-06-09 05:43:40
for(int i =numArray.length-1;i<0;i--) 

這甚麼...

改成這樣看看

for(int i =numArray.length-1;i>=0;i--) 

你可能需要重新理解一下for迴圈...

soloo951 iT邦新手 5 級 ‧ 2021-06-09 23:05:00 檢舉

謝謝 原來是這麼簡單的錯誤....
已私簡訊

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-06-09 08:38:24

https://ithelp.ithome.com.tw/upload/images/20210609/20001787CtcY89DE3K.png

如果結果是你要的
請捐款100元至創世基金會

貼上收據
程式碼隨後貼上

soloo951 iT邦新手 5 級 ‧ 2021-06-09 23:13:19 檢舉

https://ithelp.ithome.com.tw/upload/images/20210609/20138271KgmARtIBjO.jpg

謝謝~已完成捐款

不是「已解決」了嗎
/images/emoticon/emoticon19.gif

public class HelloWorld{
    public static void main(String []args){
        System.out.println(antiNum(23) );
        System.out.println(antiNum(-23) );
    }
    public static int antiNum (int x) {
        if (x<0) {
        	char[] numArray = ("" + x).toCharArray();    	
        	char[] cRet = new char[numArray.length-1];
        	int j =0;
        	for(int i =numArray.length-1;i>0;i--) {
        		cRet[j]=numArray[i];
        		j++;
            }
        	int ansNum = Integer.valueOf(String.valueOf(cRet));
        	ansNum =Math.negateExact(ansNum);
        	return ansNum ;
        } else if(x>0) {
            char[] numArray = ("" + x).toCharArray();    	
        	char[] cRet = new char[numArray.length];
        	int j =0;
        	for(int i=numArray.length-1;i>=0;i--) {
        		cRet[j]=numArray[i];
        		j++;
            }
        	int ansNum = Integer.valueOf(String.valueOf(cRet));
        	return ansNum ;
         }
         else {
        	 int ansNum=0; 
        	 return ansNum ;
         }
    }
}     

我要發表回答

立即登入回答