【问题标题】:Validation within Get/Set Methods JavaGet/Set 方法 Java 中的验证
【发布时间】:2015-06-09 15:27:51
【问题描述】:

我有以下代码使用 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 ...,然后您的验证的全部目的是确保可以将基础字符串解析为 Double number ... 令人困惑。不要那样做。想想你的方法,字段是用来做什么的。然后相应地命名它们。然后:分离关注点。比如:创建一个方法isDouble(String strValue) 例如;如果 strValue 是 Double 则返回 true ...然后您的 setDoubleValueAsString() 将不需要任何额外的验证 ...

标签: java oop boolean encapsulation


【解决方案1】:

布尔值是一种原始数据类型,因此只能按值传递。只有对象通过引用传递。因此,您有两种选择。

  1. 要么将原始布尔值设为布尔对象(因为这将通过引用传递)。
  2. 或者让方法返回一个布尔值是否终止循环

希望对你有帮助

【讨论】:

  • 这里不是很重要,但是“只有对象通过引用传递”的说法严格来说并不正确。见stackoverflow.com/questions/40480/…
  • 正如提供的链接所指出的,Java 中的所有内容都是按值传递的(包括对对象的引用)。可以肯定的是,细微的差别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
相关资源
最近更新 更多