非静态方法不能从静态上下文引用,不能调用下面的方法

时间:2017-07-23 22:42:28

标签: java arrays methods

import java.util.ArrayList;

public class FizzBuzz{

    public static void main(String[] args){
        System.out.println(fizzBuzz(15));
    }

    public ArrayList<String> fizzBuzz(int n) {
        ArrayList<String> results = new ArrayList<String>();
        for (int i = 1; i <= n; i++) {
            if (i % 15 == 0) {
                results.add("fizz buzz");
            } else if (i % 5 == 0) {
                results.add("buzz");
            } else if (i % 3 == 0) {
                results.add("fizz");
            } else {
                results.add(String.valueOf(i));
            }
        }
        return results;
    }
}

我正在尝试打印出FizzBu​​zz数组。但是,为什么我不能在这里用名字来调用下面的方法呢?有人可以帮帮我吗?欣赏!

2 个答案:

答案 0 :(得分:0)

您可以先实例化一个对象,然后在其上调用该方法。像这样:

import java.util.ArrayList;

public class FizzBuzz{

    public static void main(String[] args){
        FizzBuzz obj = new FizzBuzz; //Create an instance
        System.out.println(obj.fizzBuzz(15)); //Call the mouthed through that
    }

    public ArrayList<String> fizzBuzz(int n) {
        ArrayList<String> results = new ArrayList<String>();
        for (int i = 1; i <= n; i++) {
            if (i % 15 == 0) {
                results.add("fizz buzz");
            } else if (i % 5 == 0) {
                results.add("buzz");
            } else if (i % 3 == 0) {
                results.add("fizz");
            } else {
                results.add(String.valueOf(i));
            }
        }
        return results;
    }
}

更简单的方法是将fizzbuzz()方法更改为静态,但这不是一个好主意

现在,您将使用上述任一方法获得所需的输出

[1, 2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, fizz, 13, 14, fizz buzz]

答案 1 :(得分:0)

解决此问题的一种方法是将方法更改为静态:

public static ArrayList<String> fizzBuzz(int n) {
    //...

如果从main方法调用方法,则它必须是静态的,因为main方法是static,而static方法只能引用static个对象。

但更好的做法是创建一个类的实例,然后通过类的实例调用该方法:

public static void main(String[] args){
    FizzBuzz fb = new FizzBuzz();
    ArrayList<String> result = fb.fizzBuzz(15);
    System.out.println(result);
}

这样你就不必制作方法static

无论哪种方式,您都可以获得相同的输出,但第二种选择更专业,更整洁,更完美。