意外类型错误

时间:2014-02-07 20:56:19

标签: java

我遇到两个小的意外类型错误,我无法解决这个问题。

错误发生在:

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

3 个答案:

答案 0 :(得分: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,它应该为您要执行的操作提供解决方案。

如果index参数为负数,您的代码甚至可能抛出IndexOutOfBoundsException 小于这个字符串的长度。检查每根弦的长度。

答案 1 :(得分:2)

您分配的左侧无法接收该值。

答案 2 :(得分:-1)

String#charAt(int)的说明:

  

返回指定索引处的char值

返回角色的;在以下行中为该返回值赋值是问题所在:

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