繁体   English   中英

我是从我的方法中返回正确的值,还是正确编写了它?

[英]Am I returning the correct value from my method & am I writing it correctly?

我将以我对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);
}

抱歉,如果阅读该文章后显得有些beef肿,我发现在代码中添加我的想法可能会帮助您向我解释出了什么问题,因为您可能不知道我的职权范围:)

提前致谢。

好的,班级有成员。

成员是某些变量或变量数组以及类的方法。

所以你有

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实例才能使用该方法。这没错,但是如果您可以使程序使用类实例来做事,那么最好这样做。

使用特殊方法,可以创建一个类的实例,这称为对象。 此方法具有Class的确切名称,并构造其实例。 您现在应该研究构造函数,抽象类等。

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

我希望这对您有所帮助,并为您继续学习提供了良好的指导。

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

最后,如果只需要在控制台上打印它们,就需要返回多个值……好吧,只需在方法中执行此操作即可,而无需真正返回任何内容。

mmmmm ...您可以返回类型,而不是类型(int minimumRange,int maximumRange)。 看一下方法定义

public static int Asterisk(int lowestRange, int highestRange)

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

return lowestRange;
return 1;

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

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

您可以将它们更改为void方法,例如:

public static void asterisk(int lowest, int highest) {
    //loops and if statements

    //no return statement!
}

方法中的代码将运行,瞧,您完成了!

编辑:话虽这么说,要使此代码更像Java,还有很多事情要做,但是现在可以正常工作。

return语句不在方法中。 您必须将它们放在close方法方括号之前。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM