【问题标题】:Java: Unexpected Type Error [duplicate]Java:意外的类型错误[重复]
【发布时间】:2015-02-15 07:09:31
【问题描述】:

有人可以帮我理解为什么我会收到“意外类型错误”吗?

if(s.charAt(i-1) == ' '){
    String sub = s.substring(i, s.indexOf(' ')+1);
    for(int j = 0; j < sub.length()/2; j++){
        char temp;
        temp = sub.charAt(j);
        sub.charAt(j) = sub.charAt(sub.length()-1-j);
        sub.charAt(sub.length()-1-j) = temp;
        sub = sub+" ";
        complete = complete+sub;
    }
}

我在第 6 行和第 7 行遇到错误。我不知道为什么,非常感谢您的帮助!

【问题讨论】:

  • 字符串是不可变的,你不能分配一个方法调用。
  • 您不能使用charAt 来分配值,此时您需要使用其他东西

标签: java string compiler-errors


【解决方案1】:

charAt() 返回字符。它不是左侧操作数,也就是您不能为其赋值。 Strings 是不可变的,这意味着您无法更改它们(这似乎是您的意图)。 而是:创建一个新字符串并添加到其中。

如果这让您感到困惑,我会尝试详细说明:赋值运算符将右侧的内容放入并尝试将其推入左侧的内容中。

这里的问题是,当您尝试将其他东西推入其中时,有些东西不喜欢它。你不能把你想要的所有东西都放在左边。好吧,你可以试试:

"everything" = 5;

但这不起作用,这也不起作用:

"everything" = 42;

撇开最后一次 sn-p 失败对宇宙和所有事物的暗示,你手头的问题是 charAt() 也是赋值运算符左侧不喜欢它的那些东西之一。 恐怕没有办法将charAt() 变成左侧喜欢它的东西之一。在一个没有任何植物但只有装满牛排的太阳能冰箱的荒岛上搁浅一周后,这可能有效:

vegetarian = meat;

即使素食者不喜欢那里,他也会接受他在 = 运算符左侧的情况。他吃了一些牛排。 但是,这不适用于您正在尝试的内容。 charAt()没有这样的荒岛。

【讨论】:

    【解决方案2】:

    在这些行中,您尝试设置函数返回的值。这是违法的

     sub.charAt(j) = sub.charAt(sub.length()-1-j);
     sub.charAt(sub.length()-1-j) = temp;
    

    据我所知,您正在尝试更改字符串的字符,但字符串是不可变对象。所以你需要使用 StringBuffer 来设置值。

    【讨论】:

      猜你喜欢
      • 2017-06-14
      • 2016-06-02
      • 2019-04-28
      • 2014-09-27
      • 2015-12-11
      • 2015-12-17
      • 2017-12-29
      • 2021-11-30
      • 1970-01-01
      相关资源
      最近更新 更多