在提供输入时验证另一个类的私有变量

  • 本文关键字:变量 另一个 验证 java
  • 更新时间 :
  • 英文 :


你好,我写了代码,其中它使用 setter 方法获取书籍详细信息并使用 getter 方法显示详细信息。当用户输入输入时,它必须输入三个详细信息。
名 书价

作者姓名

我想检查用户是否在书价中给出了任何负值或零值。
我该怎么做?下面是代码。我正在练习封装问题

//Book.java file
class Book
{
    private String bookName;
    private int bookPrice;
    private String authorName;
    public String getBookName()
    {
        return bookName;
    }
    public int getBookPrice()
    {
        return bookPrice;
    }
    public String getAuthorName()
    {
        return authorName;
    }
    public void setBookName(String a)
    {
        bookName=a;
    }
    public void setBookPrice(int b)
    {
        bookPrice=b;
    }
    public void setAuthorName(String c)
    {
        authorName=c;
    }
}
//TestBook.java file
import java.util.*;
class TestBook
{
    public static void main(String args[])
    {
        Book bobj = new Book();
        Scanner sc = new Scanner(System.in);
        try
        {
            System.out.println("Enter the Book name:");
            bobj.setBookName(sc.nextLine());
            System.out.println("Enter the price:");
            bobj.setBookPrice(sc.nextInt());
            sc.nextLine();
            System.out.println("Enter the Author name:");
            bobj.setAuthorName(sc.nextLine());
            System.out.println();
            System.out.println("Book Details");
            System.out.println("Book Name :"+bobj.getBookName());
            System.out.println("Book Price :"+bobj.getBookPrice());//should not be -ve or 0
            System.out.println("Author Name :"+bobj.getAuthorName());
        }
        catch(Exception e)
        {
            System.out.println("Invalid Input");
        }
    }
}

您应该将此检查放在 setter 方法中以检查它是否大于零。例如:

public void setBookPrice(int b)
{
    if(b>0)
       bookPrice=b;
    else
    {
      throw new IllegalArgumentException("b must be positive")
     }
}

上面的代码将防止设置负价格和零价格。您可以将异常引发代码替换为自己的处理。

如果您正在练习封装,我建议为价格创建一个特定的验证方法,以便无需更改公共接口即可轻松修改。

public boolean isValidPrice() {
    return bookPrice > 0;
}

现在可以检查

if (!bobj.isValidPrice()) {
    //error handling
}

如果价格的验证规则会改变,调用代码将保持不变

最新更新