【问题标题】:How can i use a private method in a public method to check Validity?如何在公共方法中使用私有方法来检查有效性?
【发布时间】:2011-12-19 05:10:29
【问题描述】:
    private boolean isValid(int aRating)
{                     

  return aRating >= 1 && aRating <= 10;

}

                or

    private boolean isValid(int aRating)
{                     

  if (aRating >=1 && aRating <=100
      return true;
  else
      return false

}

我现在需要编写一个方法 setRating(aRating) 将评级设置为 aRating 如果它是有效的。所以我假设我需要在公共方法中使用上面的方法来检查它是否有效。如果它是有效的,那么我需要将 rating = 设置为 aRating。到目前为止,我的想法是这样的:

    public void setRating(int aRating)
{
   if (isValid() == true)
       rating = aRating;

}

但我不能将 isValid 用作 == 到 true,因为它是一种方法。我也尝试使用 isValid();为了尝试使用该方法,但由于顶部的 (int aRating) 而不允许。如果我没有标识符,那么它根本不允许我使用 aRating...

现在是

public void setRating(int aRating)
     {
       if (isValid(aRating))
          rating = aRating;
     }

我需要创建一个 setRating() 方法,允许用户从键盘输入一些内容,并且它必须再次有效,我不断收到错误,因为它说我不能重载 SetRating(int aRating) Twice,我理解。但是如果我尝试取出 int 部分,它是无效的,因为它需要一个参数。这就是我所拥有的

    public void setRating()
{
    Scanner keyboard = new Scanner(System.in);
  if (isValid(aRating))
      rating = keyboard.nextInt();
}

【问题讨论】:

  • 一般来说,提供一个从键盘交互读取的方法setRating 是个坏主意。用户界面的设计应该在程序的另一部分进行,并且只需使用setRating(int) 方法。这样您就不必因为老师告诉您将提示更改为“请输入:”而更改每节课的代码。
  • 我一定是学错了,或者这本书真的很糟糕,因为它特别要求制作两个 setRating 方法,我在上面演示了一个 Corey 帮助我的方法。 setRating(aRating) 很好,第二个 setRating() 需要“从键盘读取评级,坚持用户提供的评级是有效的”
  • 初学者的书和现实生活中的代码有很大的不同。对于初学者的书,使代码尽可能简短和可读是一种很好的风格。没关系,因为代码不必存在于容易丢失概览的大型系统中。但无论如何,你可能会在以后了解到这一点。您现在的任务是从键盘读取并验证输入,这本身就非常有价值。
  • 是的,希望在几年后我能看到更大的图景,虽然现在我无法让我的第二个 setRating 工作,因为它需要一个参数类型,它是 int,但它是不允许的因为之前的 setRating 的类型是 int。
  • 还有一件事:你的源代码编辑器可能有一个叫做“自动源代码格式化”的功能,你应该不时使用它。它使每个人都可以更轻松地阅读您的代码。

标签: java methods boolean private-methods


【解决方案1】:
public void setRating(int aRating)
{
   if (isValidRating(aRating))
       this.rating = aRating;
}

这对于您的家庭作业可能不是必需的,但在现实世界中,如果验证失败,您可能还需要考虑抛出 IllegalArgumentException。

例子:

public void setRating(int aRating)
{
    if (isValidRating(aRating))
        this.rating = aRating;
    else 
        throw new IllegalArgumentException("Invalid rating.");
}

【讨论】:

  • 我明白了,“throw new”是做什么的,是否会初始化 IllegalArgumentException,我查了一下,我想我现在知道这意味着什么了。
【解决方案2】:

您还必须将aRating 参数传递给isValid 方法。而不是仅仅跳过错误值的赋值,通常最好抛出异常,如下所示:

public void setRating(int rating) {
  checkRating(rating);
  this.rating = rating;
}

private void checkRating(int rating) {
  if (!(1 <= rating && rating <= 10)) {
    throw new IllegalArgumentException("Invalid rating: " + rating);
  }
}

这种类型的参数检查被java.util.ArrayList 等流行类使用,例如在get(int) 方法中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2011-12-06
    • 1970-01-01
    • 2015-09-13
    • 2019-01-21
    相关资源
    最近更新 更多