我是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
。变量和值之间有什么区别?尽管给我一个错误信息,为什么它可以给我正确的答案?我将非常感谢您的回答,谢谢
答案 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)
“ 意外类型”错误:
示例:
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无法转换为布尔值