Java charAt意外类型错误

时间:2016-02-20 22:32:21

标签: java string types

我正在做一个带有两个无限制的未分配整数的赋值,表示为字符串,并将它们相加。我的添加方法给了我悲伤。我一直收到这个错误并且不知道为什么。

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

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方法

时,我都会收到错误三次

5 个答案:

答案 0 :(得分:2)

  

必需:变量
  发现:价值

错误正是它所声明的:您无法将值分配给另一个值。您必须为变量写一个值。

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.

有些答案表明发生错误是因为String是不可变的。 是导致错误的原因并非如此。 charAt(int)返回一个值,将某些内容分配给该值是没有意义的。机器应该怎样处理价值?需要将其分配给变量

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

答案 1 :(得分:2)

您可以做一件事,如果不想更好地使用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}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

像这样使用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();

答案 4 :(得分:0)

首先你不能添加caracters,tecnically你可以,但你得到的是他们的ASCII代码的添加,我不认为你正在寻找这个。当你charAt()一个字符串,你只获得一个字符,所以如果你的号码超过了应用程序意外行为的数字。

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