【问题标题】:Java charAt unexpected type errorJava charAt 意外类型错误
【发布时间】:2016-06-02 11:28:48
【问题描述】:

我正在做一个赋值,它需要两个无限的未赋值整数,表示为字符串,并将它们相加。我的 add 方法让我很伤心。我不断收到此错误,不知道为什么。

这是给我带来麻烦的代码部分:

for(int i = 0; i <= cap; i = i + 1){
    number.charAt(i) = number.charAt(i) + secondNumber.charAt(i);

    //loop checks to see if the current number at i is > or = to 10
    //if it is it subtracts ten from the character at i and adds 1 to the
      character at i + 1
    if(number.charAt(i) >= 10){
        number.charAt(i) = number.charAt(i) - 10;
        number.charAt(i + 1) = number.charAt(i + 1) + 1;        
    }   
}

这是错误:

UUI.java:25: error: unexpected type

number.charAt(i) = number.charAt(i) + secondNumber.charAt(i);
                  ^
required: variable
found:    value

每当我使用 charAt 方法时,我都会收到 3 次错误

【问题讨论】:

  • 你在哪里声明你的变量
  • 这一切都在一个名为 UUI 的类中。此类的一个实例只是一个全局声明的字符串和各种方法。该方法特别接受另一个 UUI 作为参数,然后从该 UUI 中获取字符串并将其存储在局部变量 secondNumber 中。
  • "unassigned" — 你的意思是“unsigned”吗?

标签: java string types


【解决方案1】:

Java 中的字符串是不可变的。您不能在String 内使用charAt 分配特定的char

【讨论】:

  • 好的,那我该如何解决呢?
  • 以StringBuilder为例
  • 会的。非常感谢。
  • 这是正确的,但不是“真正的”问题。他的代码失败了,因为赋值的左侧不是变量。不能为方法的返回值赋值。
【解决方案2】:

像这样使用 StringBuilder。

    StringBuilder builder = new StringBuilder(number);
    for(int i = 0; i <= cap; i = i + 1){
        builder.setCharAt(i, (char)(builder.charAt(i) + secondNumber.charAt(i)));
        if(builder.charAt(i) >= 10){
            builder.setCharAt(i, (char)(builder.charAt(i) - 10));
            builder.setCharAt(i + 1, (char)(builder.charAt(i + 1) + 1));        
        }   
    }
    number = builder.toString();

【讨论】:

  • 谢谢,我是否必须以与“builder”相同的方式更改该程序中所有字符串的声明?我在这里有点新手。
【解决方案3】:

必需:变量
找到:值

错误正是它所说的:您不能将一个值分配给另一个值。您必须将值写入变量。

int a = 14; // Correct; write value "14" to variable "a"

char b = "somestring".charAt(4); // Correct; write result of method 'charAt()'
                                 // of class String to variable "b"

str.charAt(4) = "a".charAt(0);   // Incorrect; you cannot write a value to
                                 // the result of a method.

一些答案​​表明发生错误是因为Strings 是不可变的。 that 是错误的原因是不正确的。 charAt(int) 返回一个值,给该值赋值是没有意义的。机器应该如何处理该值?它需要分配给一个变量

如果我理解正确,您想在给定位置重新设置字符。您可能需要使用StringBuilder,因为String 确实是不可变的——您无法更改字符。只需从saka1029's answer 获取代码即可。

【讨论】:

    【解决方案4】:

    首先你不能添加字符,技术上你可以但是你得到的是他们的ASCII码的添加,我不认为你在寻找这个。另外,当你charAt()一个字符串时,你只能得到一个字符,因此,如果您的号码多于几位数,则应用程序的行为会出乎意料。

    我会将字符串分解为一个字符数组,替换所需的字符并将它们再次组合成一个字符串。

    【讨论】:

    • 我可能会这样做。谢谢
    【解决方案5】:

    您可以做一件事,如果您不想更好地使用 StringBuilder,您可以将字符串转换为字符数组。通过使用 `

    yourString.toCharArray()

    ` 然后您可以在特定索引处分配任何值。我不了解用户在 问题,但这是如何摆脱此类错误的概念。

    String number,secondNumber;
    char[] c1=number.toCharArray();
    char[] c2=secondNumber.toCharArray();
    for(int i = 0; i <= cap; i = i + 1){
    c1[i] = c1[i] + c2[i];
    .....//do rest of code}
    

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 2017-06-14
      • 2015-02-15
      • 2015-12-11
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多