Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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,给定一个字符串作为输入,将其转换为它表示的数字。您可以假定字符串仅由数字组成。它不会由负数组成。不要使用Integer.parseInt来解决此问题 MyApproach 我将字符串转换为字符数组并存储了原始数字,但无法将其转换为单个数字 我尝试转换单个元素,但数字可以是任意长度的。因此,很难遵循这种方法 提示:我有一个提示,可以使用place值添加数字 例如,如果数字是2300。我以数组的形式存储每个数字。那么它应该是2*1000+3*100+0*10+0=2300 但我无法将其转换为代码 有

给定一个字符串作为输入,将其转换为它表示的数字。您可以假定字符串仅由数字组成。它不会由负数组成。不要使用Integer.parseInt来解决此问题

MyApproach

我将字符串转换为字符数组并存储了原始数字,但无法将其转换为单个数字 我尝试转换单个元素,但数字可以是任意长度的。因此,很难遵循这种方法

提示:我有一个提示,可以使用place值添加数字

例如,如果数字是2300。我以数组的形式存储每个数字。那么它应该是2*1000+3*100+0*10+0=2300

但我无法将其转换为代码

有人能指导我怎么做吗

注意:我不能使用任何内置函数。
public int-toNumber(字符串str)
{
char ch1[]=str.toCharArray();
int c[]=新int[ch1.length];
int k=0;
对于(inti=0;i你可以

int no = 0;
for(int i = 0; i < c.length; i++){
    no += c[i] * Math.pow(10, c.length - 1 - i);
}
int no=0;
for(int i=0;i
您可以这样做

int no = 0;
for(int i = 0; i < c.length; i++){
    no += c[i] * Math.pow(10, c.length - 1 - i);
}
int no=0;
for(int i=0;i
如果循环遍历已有的char数组并获取最后一个值,则将其放入If语句并添加到to number整数中,无论该整数是多少(使用10 If语句)。下一步转到倒数第二个值,只做同样的事情,这次将所得数字乘以10,然后再将其添加到总数中。使用1*10^(远离末尾的值)重复此操作乘以从if语句中得到的数字。

如果循环使用已有的字符数组并获取最后一个值,则将其放入if语句,并将其添加到to数字整数中,无论该数字是多少(使用10个if语句)。下一步转到倒数第二个值,只做同样的事情,这次将所得数字乘以10,然后再将其添加到总数中。使用1*10^(远离末尾的值)重复此操作乘以从if语句得到的数字。

当我看到这个问题时,我想到的是将当前代码得到的数字乘以它们在字符中的位置:

int desiredNumber = 0;
for(int k=1; k<=c.length; k++) {
    desiredNumber += c[k] * (Math.pow(10, c.length - k));
}
int desiredNumber=0;

对于(int k=1;k当我看到这个问题时,我想到的是用当前代码得到的数字乘以它们在字符中的位置:

int desiredNumber = 0;
for(int k=1; k<=c.length; k++) {
    desiredNumber += c[k] * (Math.pow(10, c.length - k));
}
int desiredNumber=0;
对于(int k=1;k一个数字字符(
'0'
-
'9'
)可以使用以下方法转换为整数值(
0
-
9
):

这是因为数字字符在ASCII/Unicode中都是连续的

至于计算完整数字,对于输入
2300
,您不需要:

2 * 1000 + 3 * 100 + 0 * 10 + 0
相反,您需要使用循环的更增量的方法:

r = 0
r = r * 10 + 2   (2)
r = r * 10 + 3   (23)
r = r * 10 + 0   (230)
r = r * 10 + 0   (2300)
这比尝试计算公式需要的
1000
Math.pow(10,3)
)要好得多

这应该是足够的信息,您可以对其进行编码。如果没有,请创建一个新问题。

可以使用以下方法将数字字符(
'0'
-
'9'
)转换为整数值(
0
-
9
):

这是因为数字字符在ASCII/Unicode中都是连续的

至于计算完整数字,对于输入
2300
,您不需要:

2 * 1000 + 3 * 100 + 0 * 10 + 0
相反,您需要使用循环的更增量的方法:

r = 0
r = r * 10 + 2   (2)
r = r * 10 + 3   (23)
r = r * 10 + 0   (230)
r = r * 10 + 0   (2300)
这比尝试计算公式需要的
1000
Math.pow(10,3)
)要好得多


这应该是足够的信息,您可以对其进行编码。如果没有,请创建一个新问题。

您不需要进行幂运算或跟踪乘数。每次添加一个新数字时,只需将您的跑步总数乘以10。然后使用
c-“0”
将字符转换为数字:

int n = 0;
for (int i = 0; i < str.length(); i++) {
    n = n * 10 + str.charAt(i) - '0';
}

您不需要进行幂运算或跟踪乘数。每次添加新数字时,只需将跑步总数乘以10。然后使用
c-“0”
将字符转换为数字:

int n = 0;
for (int i = 0; i < str.length(); i++) {
    n = n * 10 + str.charAt(i) - '0';
}

不是数学吗?PoW?循环使用一个VaR,你可以多乘10(到多个NR),然后考虑一个开关语句,如果…更容易阅读…<代码>如果(CH1[i]=48)<代码> >如果(CH1[i]='1')更清楚。甚至数学。POW,循环向后使用一个VAR,你可以乘以10(到多个NR)。如果不是……更容易阅读……(代码)>(CH1[i]=48)< /代码> -> <代码> if(CH1[i]='1')
更清晰。@anandmishra以另一种方式循环仍然会产生错误的结果。@anandmishra以另一种方式循环仍然会产生错误的结果。简而言之,我的答案只有解决方案版本,除了我试图不只是将家庭作业答案交给OP。哦,好吧。;-)@安德烈亚斯在发帖之前没有读过你的答案,否则我可能就不会麻烦了。与其说是试图把作业交给OP,不如说是指出其他解决方案过于复杂。“仅解决方案”有点苛刻,但我确实解释了(如果简单的话)它的作用。无论如何,你得到了我的投票:)简而言之,我的答案只有解决方案版本,除了我试图不只是把家庭作业答案交给OP。哦,好吧。-@Andreas在发帖之前没有读过你的答案,否则我可能不会麻烦。与其说是试图交给OP家庭作业,不如说是指出其他解决方案不必要的复杂。“只有解决方案”虽然有点苛刻,但我确实解释过(如果简短的话)它的作用。无论如何,我投了你一票:)