Java Get/Set方法中的验证

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);

我有以下代码,可以使用get/set方法验证用户输入。只能接受字符串。while循环应继续执行,直到用户输入正确的数据类型。但是,尽管识别了错误的数据类型,while循环仍将继续执行。建议

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中的所有内容都是按值传递的(包括对对象的引用)。可以肯定,这是一个微妙的区别。