Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分配到字符串的位置-“;表达式的类型必须是数组类型,但解析为字符串;(爪哇)_Java_String - Fatal编程技术网

Java 分配到字符串的位置-“;表达式的类型必须是数组类型,但解析为字符串;(爪哇)

Java 分配到字符串的位置-“;表达式的类型必须是数组类型,但解析为字符串;(爪哇),java,string,Java,String,我正在将一个C程序翻译成Java,这是我的UniJava模块工作的一部分 我有一个函数用于反转字符串的顺序。当指定传递给函数的字符串的位置时,EclipseIDE告诉我“表达式的类型必须是数组类型,但它解析为字符串” publicstaticvoidchangestring(字符串消息){ int len=message.length(); int i; 对于(i=0;i

我正在将一个C程序翻译成Java,这是我的UniJava模块工作的一部分

我有一个函数用于反转字符串的顺序。当指定传递给函数的字符串的位置时,EclipseIDE告诉我“表达式的类型必须是数组类型,但它解析为字符串”

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