【问题标题】:Am I returning the correct value from my method & am I writing it correctly?我是否从我的方法中返回了正确的值并且我是否正确地编写了它?
【发布时间】:2014-11-04 19:54:31
【问题描述】:

我会先声明我对 Java 很陌生,所以如果我的代码读起来完全令人作呕,我深表歉意。

我正在尝试做的事情:我正在编写一个程序,它从用户那里获取两个整数,一个低值和一个高值,并将这两个整数发送到两个不同的方法。方法 #1 有一个简单的 for 循环,应该打印出介于 3 或 5 的倍数的最小数字和最大数字之间的所有数字,方法 #2 的作用相同,除了数字是 3 或 5 的倍数还会检查该数字是否也是 6 的倍数,如果是,则打印该数字和旁边的星号。

我遇到的问题:我很困惑我需要从我的方法返回什么以及如何返回任何东西。这是我第一次正确地处理一个方法(刚刚从“Hello World”上移),从我所见,我根本不需要返回任何东西。我放入的所有代码方法几乎完成了程序,所以我想也许返回我发送的整数就足够了,显然不是。所以,事不宜迟,这是我的代码。

错误:

javac BonusQ.java
.\MethodOne.java:19: error: illegal start of type
                return(int lowestRange, int highestRange);
                ^
.\MethodTwo.java:36: error: illegal start of type
                return(int lowestRange, int highestRange);
                ^

主要:

import java.util.Scanner;

public class BonusQ
{
        public static void main(String [] args)
        {
                Scanner scan = new Scanner(System.in);

                int lowestRange = 0;
                int highestRange = 0;

                System.out.println("Enter the lowest integer in your range");
                lowestRange = scan.nextInt();

                System.out.println("Enter the highest integer in your range");
                highestRange = scan.nextInt();

                MethodOne.NoAsterisk(lowestRange, highestRange);
                MethodTwo.Asterisk(lowestRange, highestRange);

        }
}

方法一:

public class MethodOne
{
        public static int NoAsterisk(int lowestRange, int highestRange)
        {
                for(int i = lowestRange; i <= highestRange; i++)
                {
                        if (i%5 == 0)
                        {
                        System.out.println(i);
                        }
                        else if (i%3 == 0)
                        {
                        System.out.println(i);
                        }
                }

        }

        return(int lowestRange, int highestRange);

}

方法二:

public class MethodTwo
{
        public static int Asterisk(int lowestRange, int highestRange)
        {
                for(int i = lowestRange; i <= highestRange; i++)
                {
                        if (i%5 == 0)
                        {
                                if (i%5 == 0 && i%6 == 0)
                                {
                                System.out.println(i + "*");
                                }
                                else
                                {
                                System.out.println(i);
                                }
                        }
                        else if (i%3 == 0)
                        {
                                if (i%3 == 0 && i%6 == 0)
                                {
                                System.out.println(i + "*");
                                }
                                else
                                {
                                System.out.println(i);
                                }
                        }


                }


        }

        return(int lowestRange, int highestRange);
}

抱歉,如果这篇文章读起来有点冗长,我只是发现在代码上添加我的想法可能会帮助您向我解释出了什么问题,因为您可能不知道我的无能程度:)

提前致谢。

【问题讨论】:

    标签: java methods return


    【解决方案1】:

    好的,类有成员。

    成员要么是一些变量,要么是变量数组 以及类的方法。

    所以你得到了

    public class MyMethod
    {
    
       public static int Asterisk(int loRange, int hiRange)
          {
               // Do magic let's make a sum for this example
    
               // You enter loRange and hiRange (you defined it above)
    
    
                return loRange + hiRange // Here the method returns a result
    
          }
    }
    
    // So then....
    
    public static void main(String [] args)
            {
                // WHATEVER IS IN HERE RUNS ALWAYS FIRST.
              z = Asterisk(1,2); // 1 and 2 is lo and hi range values ;)
                // Z has a value of 3 now because Asterisk(1,2) returns 1 + 2
            }
    

    看看这是如何工作的? 现在这是可行的,因为您使用了静态定义(这意味着不能首先创建 MyMethod 的实例来使用该方法。这没有错,但是如果您可以让程序使用类实例来做事,那么您最好这样做。

    您使用特殊方法创建一个类的实例,这称为对象。此方法具有类的确切名称并构造它的实例。 你现在应该学习构造函数、抽象类等。

    我也不能说你做错了或做对了。它是关于程序的全部内容,您应该研究变量和方法的范围,以及面向对象编程的封装概念。 仅使用静态方法,违反封装原则,可能是错误的,但我无法确定。

    我希望这对您有所帮助,并为您的学习指明了方向。

    PS: 要返回多个结果,您应该返回一个变量数组,而不仅仅是一个变量。 您也可以不返回任何内容,只需让它完成所需的数组的工作。这会迫使你公开这个数组。 (不是一个好习惯)

    最后,如果需要返回多个值,只需在控制台上打印它们...好吧,只需在方法中执行,实际上不需要返回任何内容。

    【讨论】:

    • 谢谢!我最终没有返回任何东西,我认为对象是我编程冒险的下一步,所以(再次)感谢您的评论 :)
    • yts 回复您已删除的“信息太多,我不回答他的问题”(为什么您删除了那个?“我写对了吗?”原始问题的这一部分是我努力引导那个人理解。有时候,很多信息比指导一个人如何以容易出错的方式做某事更好,你不觉得吗?你的回复可能会被接受,但它会引导他不在乎范围和在方法中始终使用静态。这会导致意大利面条式代码。什么都不返回没有错,但有时确实如此。
    • 这不是错误的方式,而是在他/她学习的这一点上可以接受的方式。信息太多令人困惑。 (关于删除..有点苛刻,所以在看到你回复之前我就把它拿走了)
    • 我提到我不能说某事是对还是错。但是看着他的问题,他/她说这是第一次尝试正确地做到这一点。如果他/她的代码是对还是错,对同一个问题提出质疑也必须给出更多的代码错误。就是说,我从来没有说你不对,但是这么少的信息不会让人感到困惑,不要破坏他/她。 ;) 仍然很好地给出了一个很好的答复。我只是解释你为什么这么大的答案。 :)
    【解决方案2】:

    您不需要返回任何内容,因为方法正在打印出所有值。

    你可以把它们改成void方法,例如:

    public static void asterisk(int lowest, int highest) {
        //loops and if statements
    
        //no return statement!
    }
    

    方法中的代码将运行,瞧,大功告成!

    编辑:话虽如此,要使这段代码更像 Java,还有很多工作要做,但现在这将起作用。

    【讨论】:

    • 谢谢!就像每次我在这里提出问题时,我都需要改变一件事 ¬_¬,我可能很快就会限制我的问题:(
    【解决方案3】:

    mmmmm...您可以返回类型,并且 (int lowerRange, int highRange) 它不是类型。看方法定义

    public static int Asterisk(int lowestRange, int highestRange)
    

    返回类型被声明为 int,所以你应该返回一个 int 值。你可以做类似的事情

    return lowestRange;
    return 1;
    

    考虑到这一点,错误应该会消失。问题是,为什么需要返回一个值?根据我的阅读,您的方法是打印东西,而不是返回东西......

    【讨论】:

    • 好吧...此外,return 语句在方法定义之外,这不起作用...
    • 当我删除“return”这个词时,我收到一条错误消息“error: missing return statement”,所以我认为我必须有一个,有没有特定的方法不返回任何东西?编辑:由于某种原因,当我删除 return 语句时,错误只显示 MethodOne 而不是 MethodTwo,有什么想法吗?
    • 是的,return 语句应该在方法内部,这就是编译器声称缺少的原因...
    • 难道我根本不需要退货声明吗?我将方法更改为“public static void”而不是“public static”,这对所有内容都进行了整理,如果您还有其他要添加的内容,我很想听听!
    • 我知道,我告诉过你,在这种特殊情况下,你不应该返回值。这个想法是你知道为什么会发生这种情况,所以我给了你答案。
    【解决方案4】:

    返回语句超出了方法。您必须将它们放在 close 方法括号之前。

    public class MyClass{
        public int sum (int a, int b){
             return a + b;
        } // The return have to be before this brackets
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2020-05-08
      • 2012-03-02
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2012-09-02
      相关资源
      最近更新 更多