2014-02-07 48 views
0

我遇到了兩個小的意外類型錯誤,我在嘗試解決時遇到了問題。發生在意外的類型錯誤

的錯誤:

swapped.charAt(temp1) = str.charAt(temp2); 
swapped.charAt(temp2) = temp1; 

有什麼建議?

public class SwapLetters 
{ 
    public static void main(String[] args) 
    { 

     System.out.println("Enter a string: "); 
     String str = new String(args[0]); 
     String swapped = str; 

     char[] charArray = str.toCharArray(); 

     System.out.println("Enter a position to swap: "); 

     int Swap1 = Integer.parseInt(args[1]); 

     System.out.println("Enter a second position to swap: "); 

     int Swap2 = Integer.parseInt(args[2]); 

     char temp1 = str.charAt(Swap1); 
     char temp2 = str.charAt(Swap2); 

     swapped.charAt(temp1) = str.charAt(temp2); 
     swapped.charAt(temp2) = temp1; 

     System.out.println("Original String = " + str); 
     System.out.println("Swapped String = " + swapped); 
    } 
} 
+0

你得到的錯誤是什麼 –

+0

你看過編譯器有什麼要說的嗎? –

+0

好ole lside vs rside – pamphlet

回答

2

您可以將值分配給變量,而不是其他值。諸如5 = 2'a' = 'z'之類的語句在Java中不起作用,這就是您遇到錯誤的原因。 swapped.charAt(temp1)返回一些char您正在嘗試覆蓋,它不是對String中某個特定位置的引用,也不是您可以更改的變量(另外,請注意,Java字符串是不可變的,因此您不能在任何情況下更改它們在創建之後)。

有關使用String的信息,請參閱http://docs.oracle.com/javase/7/docs/api/java/lang/String.html,它應該爲您正在嘗試執行的操作提供解決方案。

您的代碼甚至可能會拋出IndexOutOfBoundsException - 如果索引參數爲負數或小於此字符串的長度,則爲 。檢查每個字符串的長度。

-1

描述的String#charAt(int)

Returns the char value at the specified index

它返回值的字符的;到在下面的行即返回值分配值的問題是:

swapped.charAt(temp1) = str.charAt(temp2); 
swapped.charAt(temp2) = temp1; 

另外,String#charAt(int)期望的字符的字符串內的索引,不是字符本身(即chatAt(temp1)是不正確的),所以你的方法即使您解決了前一個問題,也無法按預期工作。

嘗試以下操作:

String swapped; 
if(swap1 > swap2) { 
    swap1+=swap2; 
    swap2=swap1-swap2; 
    swap1-=swap2; 
} 
if(swap1!=swap2) 
    swapped = str.substring(0,swap1) + str.charAt(swap2) + str.substring(swap1, swap2) + str.charAt(swap1) + str.substring(swap2); 
+0

它們不會「什麼都不做」,它們是導致錯誤的原因!除了可能出現的越界錯誤外,索引沒有任何問題。 – kviiri

+0

@kviiri「無所作爲」的意義在於,將值分配給值是毫無意義的努力,而不是意味着沒有結果(錯誤)。索引問題可能不會拋出異常,但我指出該方法不會達到預期的結果,因爲'charAt'不會返回預期的字符。 – asaini007

+0

正在討論的問題是錯誤,由錯誤的賦值引起,而不是由索引造成的,因爲索引本質上是正確的,除非它們超出界限。 – kviiri

2

你的左側分配無法接收該值。