【问题标题】:Trying to correctly determine whether numbers are weird试图正确确定数字是否奇怪
【发布时间】:2018-12-25 03:29:43
【问题描述】:

制作了一个打印数字是否奇怪的程序。如果数字是奇数,那就奇怪了。如果这个数字是偶数并且包含在 2 和 5 之间,这并不奇怪。如果它是偶数且包含在 6 和 20 之间,则很奇怪,如果它是偶数且大于 20,则并不奇怪。我在这里遇到的问题是,不是输出显示“这个数字很奇怪/不奇怪”,而是在一行上得到“奇怪”或“不奇怪”,然后是“这个数字是 0”,如果它是偶数,或者“这个数字是 1”,如果它是奇数。

public Weird(int num) 
{       
    n = num;
}

public int EvenOrOdd() 
{
    int check = n % 2;
    int answer = n / 2;
    if (check == 0 && answer >= 2 && answer <= 5) 
    {
        System.out.println("Not Weird");
    }

    else if (check == 0 && answer >= 6 && answer <= 20) 
    {
        System.out.println("Weird");
    }

    else if (check == 0 && answer > 20) 
    {
        System.out.println("Not Weird");
    }

    else if (check != 0) 
    {
        System.out.println("Weird");
    }
    return check;
}


public static void main(String[] args) 
{
    Weird w = new Weird(32);
    Weird a = new Weird(21);
    System.out.println("This number is " + w.EvenOrOdd());
    System.out.println("This number is " + a.EvenOrOdd());

}

【问题讨论】:

  • 您返回的是int。您应该返回当前正在打印的String
  • 此外,您所描述的逻辑似乎暗示,如果一个数字大于 20,无论是偶数 还是 奇数,那么这并不奇怪。您当前的逻辑仅将大于 20 的偶数标记为不奇怪。
  • Java 中的方法应该遵循 camelCase 约定而不是 PascalCase 约定。 EvenOrOdd --> evenOrOdd
  • 构造一个带有“不奇怪”的参数的Weird 是——因为没有更好的词——很奇怪。

标签: java methods output


【解决方案1】:

您实际上返回了int,这是check 字段的值。这是 1 或 0。

当你拨打这条线时-

System.out.println("This number is " + w.EvenOrOdd());
System.out.println("This number is " + a.EvenOrOdd());

它打印This number is 0This number is 1

您可以通过两种方式获得所需的输出-

方式 1- 将方法的返回类型更改为 void EvenOrOdd() like-

public void EvenOrOdd() 
{
    int check = n % 2;
    int answer = n / 2;
    if (check == 0 && n >= 2 && n<= 5) 
    {
        System.out.println("Not Weird");
    }

    else if (check == 0 && n>= 6 && n<= 20) 
    {
        System.out.println("Weird");
    }

    else if (check == 0 && n> 20) 
    {
        System.out.println("Not Weird");
    }

    else if (check != 0) 
    {
        System.out.println("Weird");
    }
}

并在main as中调用方法-

public static void main(String[] args) 
{
    Weird w = new Weird(32);
    Weird a = new Weird(21);
    w.EvenOrOdd();
    a.EvenOrOdd();

}

方式2-将方法的返回类型更改为String as-

public String EvenOrOdd() 
{
    int check = n % 2;
    int answer = n / 2;
    if (check == 0 && n>= 2 && n<= 5) 
    {
        return "Not Weird";
    }

    else if (check == 0 && n>= 6 && n<= 20) 
    {
        return "Weird";
    }

    else if (check == 0 && n> 20) 
    {
        return "Not Weird";
    }

    else
    {
        return "Weird";
    }
}

主要方法保持不变-

public static void main(String[] args) 
{
    Weird w = new Weird(32);
    Weird a = new Weird(21);
    System.out.println("This number is " + w.EvenOrOdd());
    System.out.println("This number is " + a.EvenOrOdd());

}

【讨论】:

  • 这仍然有问题 - 您需要检查 n 而不是 answer
  • 非常感谢,程序现在运行良好:}
【解决方案2】:

您应该返回该字符串而不是打印它。在您的函数中,您将返回一个 int,但您应该编写一个 String。除此之外,一切看起来都不错,但您可以减少检查次数,如下所示:

public Weird(int num) 
{       
    n = num;
}

public String EvenOrOdd() 
{
    int check = n % 2;
    if (check == 1 || (check == 0 && n >= 6 && n <= 20)) {
        return "Weird";
    }else{
        return "Not Weird";
    }
}


public static void main(String[] args) 
{
    Weird w = new Weird(32);
    Weird a = new Weird(21);
    System.out.println("This number is " + w.EvenOrOdd());
    System.out.println("This number is " + a.EvenOrOdd());

}

【讨论】:

  • 非常感谢,程序现在运行良好:}
【解决方案3】:

您从方法返回的值将“替换”方法调用。因为你回了check

return check;

电话:

System.out.println("This number is " + w.EvenOrOdd());
System.out.println("This number is " + a.EvenOrOdd());

基本上是:

System.out.println("This number is " + 0);
System.out.println("This number is " + 1);

您似乎对退货和打印感到困惑。您的方法应如下所示:

public String EvenOrOdd() 
{
    int check = n % 2;
    int answer = n / 2;
    if (check == 0 && n >= 2 && n <= 5) 
    {
        return "Not Weird";
    }

    else if (check == 0 && n >= 6 && n <= 20) 
    {
        return "Weird";
    }

    else if (check == 0 && n > 20) 
    {
        return "Not Weird";
    }

    else
    {
        return "Weird";
    }
}

现在这两个调用基本上是:

System.out.println("This number is " + "Weird");
System.out.println("This number is " + "Not Weird");

【讨论】:

  • 非常感谢,该程序现在运行良好:}
  • @Battle 请考虑通过单击该复选标记来接受您认为最好的答案!
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 2021-03-27
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多