0

该方法应该接受 3 个参数 - String、double 和 String。然后它将返回一个要在 main 方法中打印的值。我该怎么做呢?这就是我所做的

    import javax.swing.JOptionPane;
    import javax.swing.JTextArea;

    public class coordinates
    {
        public static void main(String args[])
        {   
            double angle=0, az = 0;
            JOptionPane.showMessageDialog(null, "Hello, this is the 'Bearing to Azimuth' converter.\nFirst, you must input whether the angle is from the North or from the South, input the angle, and then input whether it is East or West.", "Bearing to Azimuth converter", JOptionPane.PLAIN_MESSAGE);
            String ns = JOptionPane.showInputDialog("Input n for North and s for South:");
            String inputangle = JOptionPane.showInputDialog("Input the angle in decimal format:");
            angle = Double.parseDouble(inputangle);
            String ew = JOptionPane.showInputDialog("Input e for East and w for West:");

            convertToSouthAzimuth(ns, angle, ew);


            JOptionPane.showMessageDialog(null, "The converted azimuth is " + az, "Bearing to Azimuth converter", JOptionPane.PLAIN_MESSAGE);
    } //end main method



        public double convertToSouthAzimuth(String ns, double angle, String ew)
        {
            double az = 0;
            if (ns.equals("n")||ns.equals("N")) {
                if (ew.equals("e")||ew.equals("E")) {az= 180+angle;}
                if(ew.equals("w")|| ew.equals("W")){az= 180-angle;}
            }
            if (ns.equals("s")||ns.equals("S")) {
                if (ew.equals("e")||ew.equals("E")) {az= 360-angle;}
                if (ew.equals("w")||ew.equals("W")) {az= angle;}
            }
            return az;
        } //end convertToSouthAzimuth method
    }
4

5 回答 5

6

convertToSouthAzimuth方法尚未声明为static,因此编译器希望在该类的实例上调用它。但是,您的main方法静态的,因此没有该类的实例可用。

如果convertToSouthAzimuth仅适用于传递的参数,并且与当前实例无关,那么您可以将其更改为静态方法:

public static double convertToSouthAzimuth(...) {
于 2013-01-02T13:34:21.590 回答
1

改变这个:

public double convertToSouthAzimuth(...) { }

public static double convertToSouthAzimuth(...) {}

因为 main 是一个静态方法,你不能在其中调用任何非静态方法。

于 2013-01-02T13:34:16.017 回答
1

您需要将static关键字添加到您的方法convertToSouthAzimuth()中,因为您是从您的main()-method 中引用它的,它本身就是一个静态方法。

如果您不想将其称为静态,则可以通过将其包含在新类中来避免这种情况

我故意遗漏了新类的构造函数。

像这样的东西:

public class AzimuthConverter {

   public double convertToSouthAzimuth(String s, Double d, String s){
       return someValue;
   }
}

然后做

AzimuthConverter myConverter = new AzimuthConverter()

并跟进

double myResult = myConverter.convertToSouthAzimuth(value);

于 2013-01-02T13:34:39.770 回答
1

静态方法属于,而非静态方法属于类实例

因此你需要做类似的事情

...
new coordinates().convertToSouthAzimuth(ns, angle, ew);
...

或者只是将convertToSouthAzimuth(...)方法设为静态,这在这种特殊情况下可能是一个更好的选择,因为它对类没有任何影响(双关语)coordinates(它甚至可以移动到辅助类,正如@limelights 在另一个回答)。

干杯,

于 2013-01-02T13:35:03.150 回答
0

由于其他人已经回答了您的错误,我想指出您的代码中的另一个增强功能。你可以使用String.equalIgonreCase(String)而不是

        if (ns.equals("n")||ns.equals("N")) {

        if (ns.equalIgonreCase("n")) {
于 2013-01-02T13:57:52.637 回答