【问题标题】:Java what did I do wrong here?Java 我在这里做错了什么?
【发布时间】:2013-06-28 01:30:13
【问题描述】:

我正在为此使用命令行参数:

public class Pg253E4 {
    public static void main(String[]args) {
        try {
            System.out.println(Average.average(args)); // This part is saying I don't have a method in Average called average(String[] argName)
        } catch(NullPointerException e) {
            System.out.println(e.toString());
        } catch(NumberFormatException e) {
            System.out.println(e.toString());
        } finally {
            System.out.println("Nice job");
        }
    }
}

这是另一个类:

public class Average {
    public static double average(String[] arrayString) throws NullPointerException,NumberFormatException {
        double sum=0;
        double arrayStorage[] = new double[arrayString.length];

        for(int i = 0; i< arrayString.length; i++) {
            arrayStorage[i] = Double.parseDouble(arrayString[i]);
        }
        for(int i = 0; i<arrayString.length; i++) {
            sum += arrayStorage[i];
        }
        return (sum/arrayString.length);
    }
}

我不明白为什么会弹出一个语法错误,说我没有在 Average 类中声明或定义任何名为 average(String[] argName) 的方法,而我显然这样做了。

【问题讨论】:

  • 在你的类路径中是平均值吗?
  • Average 是否与Pg253E4 在同一个包中?如果没有,Average 是否已导入到 Pg253E4

标签: java methods error-handling arguments undefined


【解决方案1】:

尝试在主类中创建Average 类型的新对象。为此,请在您的 main 方法中写入以下行:
Average a = new Average();

然后将您的System.out.println(Average.average(args)) 更改为
System.out.println(a.average(args))

【讨论】:

  • 应该不需要创建Average类型的对象,方法Average.average()是静态的。
【解决方案2】:

如果您不使用包,则需要确保将 Average 导入到您的 Pg253E4 类中:

import Average; // Assuming "Average" is not in a package.

public class Pg253E4
{
    // The rest of your stuff
}

最好至少使用一个包:

package yourpackage;

public class Pg253E4
{
    // The rest of your stuff
}

package yourpackage;

public class Average
{
    // The rest of your stuff
}

如果Pg253E4Average 没有足够的共同点放在同一个包中,那么它们都应该放在自己的包中,在这种情况下,您必须将Average 导入Pg253E4再次:

package yourfirstpackage;

import yoursecondpackage.Average;

public class Pg253E4
{
    // The rest of your stuff
}

package yoursecondpackage;

public class Average
{
    // The rest of your stuff
}

【讨论】:

  • 它们在同一个包中(默认包)
  • Java 在使用默认包时存在访问类和方法的问题的历史。阅读hereherehere。几乎总是建议使用包,而不是默认包。正确使用包,您不必实例化一个类来访问其静态方法之一,因为您选择的答案已指示您这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2023-01-19
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多