Java中用于负值的Atoi
我正在用Java编写一个Atoi函数。对于+ve整数,它运行良好。但我想要的是,当我输入一个负整数时,它会给我一个错误。所以我尝试在我的类Atoi中包含continue语句。实现的类是:Java中用于负值的Atoi,java,for-loop,negative-number,atoi,for-else,Java,For Loop,Negative Number,Atoi,For Else,我正在用Java编写一个Atoi函数。对于+ve整数,它运行良好。但我想要的是,当我输入一个负整数时,它会给我一个错误。所以我尝试在我的类Atoi中包含continue语句。实现的类是: class Atoi { int atoi(String tmp) { int result = 0; for (int i = 0; i < tmp.length(); i++) { char digit = (char)(tmp.char
class Atoi {
int atoi(String tmp) {
int result = 0;
for (int i = 0; i < tmp.length(); i++) {
char digit = (char)(tmp.charAt(i) - '0');
if(digit == '-')
continue;
}
else {
result += (digit * Math.pow(10, (tmp.length() - i - 1)));
}
return result;
}
}
class-Atoi{
int atoi(字符串tmp){
int结果=0;
对于(int i=0;i
但不幸的是,它给了我一个与角色相反的等价物,即-12,它给了我655312!救命啊
编辑:假设我需要检查浮点数,我应该怎么做?如果我输入12.1或123.2,它应该分别返回12.1和123.2 对明显问题的快速修复:逻辑顺序错误 而不是
char digit = (char)(tmp.charAt(i) - '0');
if(digit=='-')
continue;
试一试
但还有两个问题:
- 如果存在“-”字符,则它不会否定该值李>
- 如果这是输入字符串:-1-2-3-4-5怎么办?结果会很有趣编辑:也可以尝试输入:“répa”。。。更有趣的结果李>
不要忘了用不正确的输入进行测试,正如@Klaus所建议的,不要犹豫,抛出一个异常(最好)和一条正确的错误消息,如果函数的输入不正确…如果不想转换负数,则只要在遇到
-
符号时返回0,而不是进一步循环。将此代码置于if-else块之前
if(tmp.charAt(i)=='-')
return 0;
您应该给出一个错误,而不是
continue
(抛出异常,return-1
或您所说的“giveaneror”是什么意思)
如果要忽略-
,可以将else子句更改为:
result = digit + result * 10;
与
你的代码假设没有-
(char)(tmp.charAt(i) - '0');
是一种盲目地将“数字”变量钳制为数字的优化
你需要逐步了解你的代码实际上在做什么,搜索一个ASCII图表,并研究“0”的减法运算('0'==48),所以“1”(49)-'0'(48)=1等等。当然,你可以这样写代码,但你需要检查tmp是否是一个有效的数字
int atoi(String tmp) {
int result = 0;
int factor = tmp.charAt(0) == "-" ? -1 : 1;
for (int i = 0; i < tmp.length(); i++) {
if (tmp.chatAt(i) < '0' || tmp.chatAt(i) > '9')
continue;
char digit = (char)(tmp.charAt(i) - '0');
result += (digit * Math.pow(10, (tmp.length() - i - 1)));
}
return result * factor;
}
intatoi(字符串tmp){
int结果=0;
整数系数=tmp.字符(0)=“-”?-1:1;
对于(int i=0;i'9')
继续;
字符位=(字符)(tmp.charAt(i)-'0');
结果+=(数字*数学功率(10,(tmp.length()-i-1));
}
返回结果*因子;
}
如果这不是作为编程练习进行的,那么有一个更简单的解决方案:
static int atoi(String tmp)
{
int result = Integer.parseInt(tmp);
if(result >= 0) {
return result;
} else {
throw new IllegalArgumentException("Negative string "+"\"" + tmp + "\"");
}
}
在否定结果情况下,替换适当的异常或其他操作。如果只想忽略发布代码中的“-”,请将If-then-else替换为:
return Math.abs(result);
这段代码还为“abc”之类的字符串引发异常
更一般地说,如果库方法不能完全满足您的要求,那么在修改其行为的方法中使用它通常很容易,而不是重新编写它。这不起作用。因为
数字
永远不会是-
。仔细看看代码。是的,这就行了。但一定要引用,它应该在if-else块之前。事实上,如果在那之后不需要else,+1比在每次迭代中使用Math.pow更优雅(更快)。虽然这种想法需要习惯。。。但真正的问题是,他也确实想处理消极的numebrs!假设我需要检查浮点数,我应该怎么做?如果我输入12.1或123.2,它应该分别返回12.1和123.2!!第一个案件已经解决。。我使用了一个初始化为0的变量“负”。如果出现-,则将其递增1。。因此,如果负==1,则数字前面会出现一个-符号。。第二个问题仍然在努力解决!将在11分钟内接受您的回复!;)提示:我认为只有第一个字符可以是“-”,可以使用此信息…假设我需要检查浮点数,我应该怎么做?如果我输入12.1或123.2,它应该分别返回12.1和123.2!!您应该检查“.”字符,在遇到该字符后,将分数添加到结果中。
int atoi(String tmp) {
int result = 0;
int factor = tmp.charAt(0) == "-" ? -1 : 1;
for (int i = 0; i < tmp.length(); i++) {
if (tmp.chatAt(i) < '0' || tmp.chatAt(i) > '9')
continue;
char digit = (char)(tmp.charAt(i) - '0');
result += (digit * Math.pow(10, (tmp.length() - i - 1)));
}
return result * factor;
}
static int atoi(String tmp)
{
int result = Integer.parseInt(tmp);
if(result >= 0) {
return result;
} else {
throw new IllegalArgumentException("Negative string "+"\"" + tmp + "\"");
}
}
return Math.abs(result);