Java 分配到字符串的位置-“;表达式的类型必须是数组类型,但解析为字符串;(爪哇)
我正在将一个C程序翻译成Java,这是我的UniJava模块工作的一部分 我有一个函数用于反转字符串的顺序。当指定传递给函数的字符串的位置时,EclipseIDE告诉我“表达式的类型必须是数组类型,但它解析为字符串”Java 分配到字符串的位置-“;表达式的类型必须是数组类型,但解析为字符串;(爪哇),java,string,Java,String,我正在将一个C程序翻译成Java,这是我的UniJava模块工作的一部分 我有一个函数用于反转字符串的顺序。当指定传递给函数的字符串的位置时,EclipseIDE告诉我“表达式的类型必须是数组类型,但它解析为字符串” publicstaticvoidchangestring(字符串消息){ int len=message.length(); int i; 对于(i=0;i
publicstaticvoidchangestring(字符串消息){
int len=message.length();
int i;
对于(i=0;i
我不确定表达式中的数据类型为什么会有问题——对我来说,它应该可以正常工作。可能是因为我正在索引一个数组,所以它是数组类型,即使message
是字符串
任何帮助都将不胜感激。谢谢
Java 15.0.2、Windows 10、Eclipse 2020-12(4.18.0)字符串不是数组(它在后台使用一个数组,但类型本身不是),并且message[i]
在Java中是非法的,如果您想访问字符串的第i个元素,由message
引用
obj[index]
是最常用的方法,如果您的目标是编写一个反转字符串的算法,那么首先将字符串转换为字符数组可能是有意义的,如:
char[]msg=message.toCharArray();
然后对该阵列进行操作
最后将数组转换回字符串,如:
String convertedString=新字符串(msg);
字符串在Java中是不可变的类型;相应地,使用相同的字符串引用没有任何意义,因为(1)您将在字符串上的每个操作(空间复杂度可怕)上生成一个新对象,(2)这意味着,您将无法从以前的字符串有效地构建新字符串。由于字符串是不可变的,您应该返回新字符串对象并使用临时数组:
public static String changeString(String message) {
int len = message.length();
char[] arr = new char[len];
int i;
for (i=0;i <= len/2; i++) {
char temp = message.charAt(i);
arr[i] = message.charAt(len-i-1);
arr[len-i-1] = temp;
}
return new String(arr);
}
因为
String
是不可变的,所以该方法的整个前提是不可能的。该方法无法反转参数。您需要构造一个反向的新字符串并返回它。你不能像那样将C翻译成Java,就像你不能逐字翻译语言一样。@Kayaman我插入了StringBuffer类型的变量msgcopy,并将其赋值为与message相同的值,因为我理解StringBuffer是可变的。解决此问题仍然会出现错误“表达式的类型必须是数组类型,但它已解析为StringBuffer”。您需要使用StringBuffer
的方法对其进行变异。它不是一个数组,Java也没有操作符重载。“你刚刚完成了我的整个课程任务”——如果你想这样看的话。我希望这项任务的目的是让您编写代码来执行反转。。。从头开始。为什么?作为Java编程学习练习。作为作业的结果,展示使用数组执行工作的代码,然后提到在现实生活中,您将使用新的StringBuilder(message).reverse().toString()
。嗨,这很有效。我用publicstaticvoidchangestring(char[]消息)替换了publicstaticvoidchangestring(stringmessage){{
public static String changeString(String message) {
int len = message.length();
char[] arr = new char[len];
int i;
for (i=0;i <= len/2; i++) {
char temp = message.charAt(i);
arr[i] = message.charAt(len-i-1);
arr[len-i-1] = temp;
}
return new String(arr);
}
public static String changeString(String message) {
return new StringBuilder(message).reverse().toString();
}