Java 检查大于0的整数的步骤
我有以下设置器:Java 检查大于0的整数的步骤,java,integer,Java,Integer,我有以下设置器: public void setId(String id) { try{ Integer partnerId = Integer.parseInt(id); if (partnerId <= 0){ throw new NumberFormatException(); } } catch(NumberFormatException e){
public void setId(String id) {
try{
Integer partnerId = Integer.parseInt(id);
if (partnerId <= 0){
throw new NumberFormatException();
}
} catch(NumberFormatException e){
}
this.id = id;
}
public void setId(字符串id){
试一试{
整数partnerId=Integer.parseInt(id);
如果(partnerId声明:
抛出以指示应用程序已尝试转换
字符串,但该字符串没有
适当的格式
您的情况并非如此,如果您坚持抛出异常,请实现您自己的类:
public class LowerThanZeroException extends Exception {
public LowerThanZeroException() { super("Number is lower than zero"); }
}
或者干脆用
<>我不认为<代码>尝试和<代码> catch <代码>是你的最佳选择(虽然这确实取决于你的逻辑),但是也要考虑使用<代码>如果>语句。
还要注意,捕获异常而不对其执行任何操作实际上会隐藏问题。指出:
抛出以指示应用程序已尝试转换
字符串,但该字符串没有
适当的格式
您的情况并非如此,如果您坚持抛出异常,请实现您自己的类:
public class LowerThanZeroException extends Exception {
public LowerThanZeroException() { super("Number is lower than zero"); }
}
或者干脆用
<>我不认为<代码>尝试和<代码> catch <代码>是你的最佳选择(虽然这确实取决于你的逻辑),但是也要考虑使用<代码>如果>语句。
还请注意,捕获异常而不对其执行任何操作实际上会隐藏问题。为创建自定义异常(partnerId为创建自定义异常)(partnerId不要抛出NumberFormatException,因为如果字符串超出范围,则格式没有问题。抛出的标准且正确的异常是带有消息的IllegalArgumentException。作为一般规则(适用于此处),您不应该捕获EXCRUTION,但不应对其执行任何操作
试试这个:
public void setId(String id) {
if (Integer.parseInt(id) < 1){
throw new IllegalArgumentException("id must be greater than zero:" id);
}
this.id = id;
}
public void setId(字符串id){
if(Integer.parseInt(id)<1){
抛出新的IllegalArgumentException(“id必须大于零:”id);
}
this.id=id;
}
此外:
- 删除了int变量,因为您不使用它进行比较
- 删除了try-catch,只是让异常冒泡出来。如果客户端通过了错误的dara,那就是他们的问题
不要抛出NumberFormatException,因为如果字符串超出范围,则格式没有问题。抛出的标准且正确的异常是带有消息的IllegalArgumentException。作为一般规则(适用于此处),您不应该捕获EXCRUTION,但不应对其执行任何操作
试试这个:
public void setId(String id) {
if (Integer.parseInt(id) < 1){
throw new IllegalArgumentException("id must be greater than zero:" id);
}
this.id = id;
}
public void setId(字符串id){
if(Integer.parseInt(id)<1){
抛出新的IllegalArgumentException(“id必须大于零:”id);
}
this.id=id;
}
此外:
- 删除了int变量,因为您不使用它进行比较
- 删除了try-catch,只是让异常冒泡出来。如果客户端通过了错误的dara,那就是他们的问题
最简单的方法是使用if语句
public void setId(String id) {
Integer partnerId;
try{
partnerId = Integer.parseInt(id);
} catch(Exception e){ /*if parsing fails do ...*/ }
if (partnerId <= 0){ this.id = /*some default value*/ }
else {this.id = id;}
}
public void setId(字符串id){
整数partnerId;
试一试{
partnerId=Integer.parseInt(id);
}捕获(异常e){/*如果解析失败,则执行…*/}
if(partnerId最简单的方法是使用if语句
public void setId(String id) {
Integer partnerId;
try{
partnerId = Integer.parseInt(id);
} catch(Exception e){ /*if parsing fails do ...*/ }
if (partnerId <= 0){ this.id = /*some default value*/ }
else {this.id = id;}
}
public void setId(字符串id){
整数partnerId;
试一试{
partnerId=Integer.parseInt(id);
}捕获(异常e){/*如果解析失败,则执行…*/}
如果(partnerId一个IllegalArgumentException
就足够了吗?为什么你捕获了你刚刚抛出的异常,却什么也不做?这就是为什么你要将你的id保留为字符串的原因吗?第二件事,当你在处理你抛出的异常时,你的检查是冗余的,处理它的最佳方式会随着w的变化而变化当整数不大于0时,你必须做什么。如果你不告诉我们,我们就不能给出一个好的答案,所以我将把这个问题标记为太宽泛。很明显,你问题中的代码没有意义,因为你可以删除所有try/catch块和其中的代码,结果将完全相同。IllEGALAGUMENTEXCEPTION
就足够了吗?为什么要捕获刚刚抛出的异常,却什么也不做?这就是为什么要将id保留为字符串的原因吗?第二件事,当您处理抛出的异常时,您的支票是冗余的,处理它的最佳方式将根据您何时必须执行的操作而有所不同整数不大于0。如果你不告诉我们,我们无法给出一个好的答案,因此我将把问题标记为太宽。很明显,你问题中的代码没有意义,因为你可以删除所有try/catch块和其中的代码,结果将完全相同。那么如何在正确的情况下检查它是吗?我的意思是也许这里的regexp会更好?那么如何用正确的方式检查呢?我的意思是也许这里的regexp会更好?