【问题标题】:I can not make the array global我无法使数组全局化
【发布时间】:2013-05-27 21:01:19
【问题描述】:

我需要在一行中编写数组并通过几个不同的类进行传递。到目前为止,这是我的代码。我将如何使阵列全球化?我很困扰。 这就是我通过在线课程学习的方式。 公开课 GravityV1 {

 String[] planet= {"Mercury", "Venus","Earth","Mars", "Jupiter", "Saturn", "Uranus","Pluto"};
 int[] diameter = { 4876, 12107, 12755, 6794, 142983, 120536, 51117, 49527, 2390};
 double[] mass= { 3.30e23,4.87e24,5.97e24,6.42e23,1.90e27,5.69e26, 8.66e25, 1.03e26, 1.31e22};



public  double calcgravity(double g, double r, double m)
{

g=(6.67e-11*m)/r;
    return g;
}
public static void printdata()
{

    System.out.println ("Planetary Data");
    System.out.println("Planet");
    System.out.printf("%8s", "Diameter (Km)");
    System.out.printf("%8s", "Mass (Kg)");
    System.out.printf("%10s", "g(ms^-2)");
    System.out.println("----------------------------------------------------------------------------------------------------------------------------------");
    for (int index=0; index<9; index++)
    {System.out.println( planet[index]);
    System.out.printf("%8f", diameter[index]);
    System.out.printf("%8f", mass[index]);

}
}
public static void main(String[] args)
{

     }
}

【问题讨论】:

  • 这应该是什么语言,为什么代码格式如此可怕?
  • 您需要了解static 关键字的含义。

标签: java arrays


【解决方案1】:

两种选择:

  1. 将它们设为您的某个类的静态成员。
  2. 每次您在不同的地方需要数组时,只需将它们作为参数传递即可。

【讨论】:

    【解决方案2】:

    通常的模式是:public static final。那是一个全局可访问且不可修改的数组引用:

    public class GravityV1 {   
    
      public static final String[] PLANETS = {  "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Pluto"};
      public static final int[] DIAMETERS = { 4876, 12107, 12755, 6794, 142983, 120536, 51117, 49527, 2390};
      public static final double[] MASSES = { 3.30e23, 4.87e24, 5.97e24, 6.42e23, 1.90e27, 5.69e26, 8.66e25, 1.03e26, 1.31e22};
    
      // ...
    

    请注意,命名约定要求常量的大写名称(最终静态)。并且将三个属性存储在三个不同的数组中并不是最好的设计。你应该引入一个新的类来保存每个行星的这些属性。类似的东西

    public class Planet {
       private String name;
       private double mass;
       private int diameter;
    
       // Constructor
    
       // getters for the three fields
    }
    

    【讨论】:

    • 当我看到变量旁边的 public 时我担心 :) 这是说它可以做到而不是应该做到?
    • 字段不应该是公开的,但我认为常量仍然可以。我添加了一个改进,虽然枚举会更好。
    【解决方案3】:

    您可以将数组设为公共静态,以便全局访问。静态成员是类成员,不需要对象实例化。

    您似乎想要创建一个常量列表(行星数组肯定是这样的)。您可以为此使用枚举。

    public enum Planets {
    
        MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, PLUTO
    
    }
    

    编辑:考虑这个例子中的 Planet 枚举

    http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

    【讨论】:

    • 但是你也应该将直径和质量属性添加到枚举中。
    • @Andreas_D 感谢您指出这一点。由于行星及其各自的质量和直径是常数,因此使用枚举是有意义的。 docs.oracle.com/javase/tutorial/java/javaOO/enum.html 有一个很好的例子。
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多