【问题标题】:How to write a private method that returns True for certain peramaters?如何编写为某些参数返回 True 的私有方法?
【发布时间】:2011-11-01 02:28:54
【问题描述】:

所以确切的措辞是, “编写一个私有方法 isValid(aRating),如果给定的评分有效,则返回 true,介于 1-10 之间。”

private void isValid(aRating)
{

}

如果给定评级有效,则上述方法中的内容是为了返回真值,有效性表示数字 1-10。

这是我尝试的,教练希望它以“正确的方式”这只是我尝试的一个示例,它完全是一个不同的程序。(如果混淆,请忽略)。

private void isValid(int hour,  int minute) 
{
    if (hour >= 0 && hour <=23) 
    {
        System.out.println("Hour is valid");
        hourIsValid = true;
    } 

    else 
    {
        System.out.println("Hour is not valid");
        hourIsValid = false;
        System.exit(0);
    }
}

这样对吗

    private boolean isValid(int aRating)
{                     
     if (aRating >= 1 && aRating <= 10)
         return true;
     else
         return false;
}

【问题讨论】:

  • 请重述您的问题。很不清楚。
  • 格式化你的代码会让其他人(和你)更容易阅读,这意味着人们通常会更快地回答。
  • 好的,我重新格式化了问题,代码只是我尝试的一个例子,它与问题无关,除了显示我怎么做不到。
  • 在不相关的注释中,0 的系统退出值通常表示成功。如果你打算直接杀死程序,你应该以1-255范围内的任何值退出(如System.exit(1);)。
  • 数字 1-255 重要吗?它们有不同的属性还是都一样。

标签: java methods boolean private-methods


【解决方案1】:

问题需要一个函数在某些条件下返回true,所以签名不能是

private void isValid(int aRating) {}

它需要一个返回类型。现在,true 的类型是布尔型,所以让它来吧

private boolean isValid(int aRating) {
    return /* validity test here */;
}

【讨论】:

  • @DannielFischer private boolean isValid(int aRating) { if (aRating &gt;= 1 &amp;&amp; aRating &lt;= 10) return true; else return false; } 这样可以吗?
  • 那将是 a 的方式。虽然还有几百行代码,但您会更喜欢return aRating &gt;= 1 &amp;&amp; aRating &lt;= 10;,因为if (condition) return true; else return false; 总是可以简化为return condition;。 cmets 中的代码格式受到限制,afaik。
【解决方案2】:

调用私有方法

从公共方法调用私有方法与调用任何其他方法完全相同:

public void doStuff() {
    System.out.println("Stuff done.");
}

private void doOtherStuff() {
    System.out.println("Other stuff done.");
}

public void showHowItWorks() {
    doStuff();
    doOtherStuff();

    // or if you prefer this style:
    this.doStuff();
    this.doOtherStuff();
}

重要的区别是您只能从定义它们的类内部调用私有方法:

class PublicExample {
    public static void doStuff() {
        System.out.println("Stuff done.");
    }
}

class PrivateExample {
    private static void doStuff() {
        System.out.println("Stuff done.");
    }
}

class Example {
    public static void Main(String[] args) {
        PublicExample.doStuff(); // Works
        PrivateExample.doStuff(); // Doesn't work (because it's private and defined in a different class)
    }
}

返回值

private void isValid(int hour,  int minute) {
    if (hour >= 0 && hour <=23) {
        System.out.println("Hour is valid");
        hourIsValid = true;
    } else {
        System.out.println("Hour is not valid");
        hourIsValid = false;
        System.exit(0);
    }
}

这种方法的问题是,如果您输入错误的小时或分钟,您的程序会立即终止。如果我想循环直到我得到一个好的输入怎么办?

我认为主要问题是你不知道如何return a value from a method。下面是一个总是返回 true 的函数示例:

public static boolean trueExample() {
    return true;
}

public static void main(String[] args) {
    boolean returnValue = trueExample();
    System.out.println("trueExample() returned " + returnValue);
}

你也可以让它更复杂:

/**
 * @return the input value minus one.
 */
public static int oneLess(int num) {
    return num - 1;
}

public static void main(String[] args) {
    int num = 10;

    // Print 10
    System.out.println(num);

    // Print 9
    num = oneLess(num);
    System.out.println(num);

    // Print 8
    num = oneLess(num);
    System.out.println(num);
}

如果num 在10-20 范围内,则返回true,否则返回false

public boolean isValid(int num) {
    return num >= 10 && num <= 20;
}

这个版本完全相同做同样的事情,但你可能会发现它更容易阅读,因为它更明确:

public boolean isValid(int num) {
    /* Numbers less than 10 are invalid */
    if(num < 10) {
        return false;
    }
    /* Numbers greater than 20 are invalid */
    else if (num > 20) {
        return false;
    }
    /* By process of elimination, everything else is valid */
    else {
        return true;
    }
}

如果这还不足以帮助您解决问题,请告诉我。

【讨论】:

    【解决方案3】:

    就像您调用任何普通方法一样,只要私有方法对公共方法可见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2016-05-06
      • 2020-11-17
      • 2011-11-28
      • 2021-08-19
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多