意外的类型错误

时间:2012-01-04 22:33:39

标签: java

我是Java新手,我研究字符串,我想要一个字符串被反转。这是我的代码

String myStr = "abcdef"; String reversed = "";
for(int j=myStr.length()-1;j>=0;j--) {
    myStr.charAt(j) += reversed;
}

但它给了我一条错误信息:

****.java:14: error: unexpected type
required: variable
found:    value

但是当我按System.out.print(reversed)打印时,它会正确打印reversed。变量和值之间有什么区别?尽管给我一个错误信息,为什么它可以给我正确的答案?我将非常感谢您的回答,谢谢

7 个答案:

答案 0 :(得分:4)

问题在于:

myStr.charAt(j) += reversed;

左侧是一个值。不是变量。这就是为什么你不能+=到它。


虽然它打破了学习如何做到这一点的目的,但你可以这样做:

myStr = new StringBuffer(myStr).reverse().toString();

答案 1 :(得分:2)

它应该是reversed += new String(myStr.charAt(j)); ...意外的类型是charAt(j)返回的

答案 2 :(得分:1)

String myStr = "abcdef";
String reversed = "";

for(int j = myStr.length()-1 ; j >= 0; j--)
{
     reversed += myStr.CharAt(j);
}

答案 3 :(得分:0)

+=适用于变量而不是值。 myStr.charAt(j)返回一个值,您无法在该值上使用+=。它必须是一些变量,如reversed。 e.g。

reversed += myStr.substring(j, j+1);

答案 4 :(得分:0)

你想要的是reversed += myStr.charAt(j)。您只能为变量赋值。 myStr.charAt(j)不是变量。它是一个返回值或类型char的表达式。

您还应该使用StringBuilder并将每个char附加到StringBuilder,因为您的循环在每次迭代时都会创建一个新的String实例,这根本就没有效率。

答案 5 :(得分:0)

变量是可以存储值的地方。必须在使用它们之前声明它们并赋值:

String reversed = "";

reversed是一个赋值为""的变量。 只有变量可能位于作业的左侧(例如=)。 +=是一种特殊类型的作业。 a += b;a = a + b;基本相同。

值是表达式的结果。表达式包括变量引用(reversed),常量(""),方法调用(myStr.charAt(0))和操作(a + b)。值可以在作业的右侧。

我不确定为什么它会给你正确的答案,因为当你遇到像这样的编译错误时代码根本不应该运行。

答案 6 :(得分:0)

如果您搞砸了“ Yoda表达式”,则会出现

意外类型”错误:


示例


if(null= my_variable){}; //:WRONG#1 (malformed yoda expression)
if(null==my_variable){}; //:CORRECT
if(my_variable= null){}; //:WRONG#2 (for completeness of example)

结果(WRONG#1):

  

意外类型[ERROR]
  必需:变量[ERROR]
  找到:值

结果(WRONG#2):

  

不兼容的类型:TYPE_OF_MY_VARIABLE_HERE无法转换为布尔值