繁体   English   中英

Java charAt意外类型错误

[英]Java charAt unexpected type error

我正在做一个分配,它接受两个无限的未分配整数(表示为字符串)并将它们加起来。 我的添加方法使我感到悲伤。 我不断收到此错误,不知道为什么。

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

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次错误

必需:变量
找到:价值

该错误恰恰说明了该错误:您不能将一个值分配给另一个值。 您必须将值写入变量。

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)返回一个值,并且没有必要为该值分配值。 机器应如何处理价值? 需要将其分配给变量

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

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

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

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

首先,您不能添加角色,从技术上讲可以,但是您获得的只是它们的ASCII码的添加,我不认为您正在寻找它。而且当您使用charAt()一个String时,您只会获得一个字符,因此如果数字超出了应用程序的预期位数。

我将字符串分解成字符数组,提供所需的字符,然后再次将它们组装成字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM