Java Get/Set方法中的验证
我有以下代码,可以使用get/set方法验证用户输入。只能接受字符串。while循环应继续执行,直到用户输入正确的数据类型。但是,尽管识别了错误的数据类型,while循环仍将继续执行。建议Java Get/Set方法中的验证,java,oop,boolean,encapsulation,Java,Oop,Boolean,Encapsulation,我有以下代码,可以使用get/set方法验证用户输入。只能接受字符串。while循环应继续执行,直到用户输入正确的数据类型。但是,尽管识别了错误的数据类型,while循环仍将继续执行。建议 public class SetGet { public static void main(String[]args) { Fraction a=new Fraction(); Scanner sc=new Scanner(System.in);
public class SetGet {
public static void main(String[]args)
{
Fraction a=new Fraction();
Scanner sc=new Scanner(System.in);
String name;
boolean type=false;
while(type==false)
{
System.out.println("Enter first name: ");
name=sc.nextLine();
a.setfirstName(name,type);
}
System.out.println("Name: "+a.getfirstName());
}
}
public class Fraction {
private String FirstName;
public void setfirstName(String firstName,boolean type)
{
try
{
Integer.parseInt(firstName);
System.out.println("Invalid "+type);
}
catch(Exception e)
{
try
{
Double.parseDouble(firstName);
System.out.println("Invalid "+type);
}
catch(Exception f)
{
type=true;
this.FirstName=firstName;
System.out.println("Valid "+type);
}
}
}
public String getfirstName()
{
return FirstName;
}
}
布尔值是基本数据类型,因此仅通过值传递。只有对象通过引用传递。所以你有两个选择
我希望这对质量有帮助旁注:名字很重要。只是事实上,你调用你的字段
FirstName
。。。然后,验证的全部要点是确保底层字符串可以解析为双倍数字。。。在地平线之外令人困惑。不要那样做。想想你的方法、字段是用来做什么的。然后相应地命名它们。然后:分别关注。例如:创建一个方法isDouble(stringstrvalue)
;如果strValue是双精度的,则返回true。。。然后,您的setDoubleValueAsString()
将不需要任何额外的验证…在这里并不重要,但“仅通过引用传递对象”的语句严格来说不是真的。请参阅。正如提供的链接所指出的,Java中的所有内容都是按值传递的(包括对对象的引用)。可以肯定,这是一个微妙的区别。