使用枚举的java程序planet

使用枚举的java程序planet,java,boolean,Java,Boolean,我有一个名为“行星”的枚举,它有两个字段:一个行星中有多少个卫星(int)以及该行星是地球行星还是木星行星(布尔值)。然后我有一个名为“行星信息”的程序,它通过迭代每个行星来确定行星的类型,从而列出每个行星的类型。但我似乎不知道如何检查它是陆地的还是木星的 以下是一个示例输出: Terrestrial planets: MERCURY VENUS EARTH MARS Jovian planets: MERCURY VENUS EARTH MARS 我的代码: 枚举: public enum

我有一个名为“行星”的枚举,它有两个字段:一个行星中有多少个卫星(int)以及该行星是地球行星还是木星行星(布尔值)。然后我有一个名为“行星信息”的程序,它通过迭代每个行星来确定行星的类型,从而列出每个行星的类型。但我似乎不知道如何检查它是陆地的还是木星的

以下是一个示例输出:

Terrestrial planets:
MERCURY
VENUS
EARTH
MARS

Jovian planets:
MERCURY
VENUS
EARTH
MARS
我的代码: 枚举:

public enum Planet {
    MERCURY (0,true), 
    VENUS (0,true),
    EARTH (1,true),
    MARS (2,true), 
    JUPITER (67,false),
    SATURN (62,false),
    URANUS (27,false),
    NEPTUNE(14,false);

    private int moon; 
    private boolean isTerrestrial;

    private Planet(int c,boolean f){
        moon = c;
        isTerrestrial = f; 
    }

    public int getMoon(){
        return moon;
    }   

    public boolean getIsTerrestrial(){
        return isTerrestrial; 
    }
}
另一类:

import java.util.Scanner; 
public class PlanetInfo {
    public static void main (String [] args){
        Planet mcy = Planet.MERCURY;
        Planet vns = Planet.VENUS;
        Planet rth = Planet.EARTH; 
        Planet mrs = Planet.MARS;
        Planet jpt = Planet.JUPITER;
        Planet strn = Planet.SATURN; 
        Planet urn = Planet.URANUS;
        Planet npt = Planet.NEPTUNE;

        Scanner kb = new Scanner(System.in);
        System.out.println("Terrestrial planets:");
        for (Planet p : Planet.values()){
            if(p.equals(false)){
                System.out.println(p);
            } 
        }

        System.out.println("Enter a planet name:"); 
        String line = kb.nextLine().toUpperCase(); 

        switch(line){
            case "MERCURY":
            System.out.println(mcy + " has "+ mcy.getMoon()+" moons.");
            break; 
            case "VENUS" : 
            System.out.println(vns + " has "+ vns.getMoon()+" moons.");
            break; 
            case "EARTH":
            System.out.println(rth + " has "+ rth.getMoon()+" moons.");
            break; 
            case "MARS":
            System.out.println(mrs + " has "+ mrs.getMoon()+" moons.");
            break; 
            case"JUPITER":
            System.out.println(jpt + " has "+ jpt.getMoon()+" moons.");
            break; 
            case "SATURN":
            System.out.println(strn + " has "+ strn.getMoon()+" moons.");
            break; 
            case "URANUS":
            System.out.println(urn + " has "+ urn.getMoon()+" moons.");
            break;
            case "NEPTUNE":
            System.out.println(npt + " has "+ npt.getMoon()+" moons.");
            break; 
            default: 
            System.out.println("error, not a planet");
        }
    }
}

将静态函数添加到
enum
,将其命名为
getPlanetByName(字符串名称)
。 该函数应遍历
Planet.values()
,并返回具有指定名称的函数。 然后,一旦用户输入planetName,您就将其存储到

String userEnteredPlanetName
然后你只要打个电话

Planet.getPlanetByName(userEnteredPlanetName).getIsTerrestrial();

这还应该允许您摆脱巨大的开关大小写块:)

枚举中添加一个静态函数,称之为
getPlanetByName(字符串名)
。 该函数应遍历
Planet.values()
,并返回具有指定名称的函数。 然后,一旦用户输入planetName,您就将其存储到

String userEnteredPlanetName
然后你只要打个电话

Planet.getPlanetByName(userEnteredPlanetName).getIsTerrestrial();

这还应该允许您摆脱巨大的开关大小写块:)

只需使用p.getisterestrial()而不是p.equals(false)

<>我也会考虑让行星包含一个枚举,而不是一个具有非静态值的枚举(月亮)

枚举是一个特殊的“类”,它表示一组常量(不可更改的变量,如最终变量)


只需使用p.getisterestrial()而不是p.equals(false)

<>我也会考虑让行星包含一个枚举,而不是一个具有非静态值的枚举(月亮)

枚举是一个特殊的“类”,它表示一组常量(不可更改的变量,如最终变量)


试着用这个代替你的for-each循环。它正在工作

for (Planet p : Planet.values()){
            if(p.getIsTerrestrial()==(false)){
                System.out.println(p);
            }
        }

getIsTerrestrial是一个布尔函数,因此equals()对它不起作用。

尝试使用此函数而不是for-each循环。它正在工作

for (Planet p : Planet.values()){
            if(p.getIsTerrestrial()==(false)){
                System.out.println(p);
            }
        }
getIsTerrestrial是一个布尔函数,因此equals()对它不起作用。

使用p.getIsTerrestrial()正如一些人所说,它更好

 for (Planet p : Planet.values()){
    if(p.getIsTerrestrial())
    {
            //print if its a Terrestrial Planet
            System.out.println(p);
    }
    else {
     //print its a Joovian Planet (might wanna check for null values if null is possable to be passed on here)
    }
 }
使用p.getisterestrial()正如一些人已经说过的那样,它要好得多

 for (Planet p : Planet.values()){
    if(p.getIsTerrestrial())
    {
            //print if its a Terrestrial Planet
            System.out.println(p);
    }
    else {
     //print its a Joovian Planet (might wanna check for null values if null is possable to be passed on here)
    }
 }

你的问题是?你必须调用你的'p.getIsTerrestrial()'方法而不是'p.equals(false)'你的问题是?你必须调用你的'p.getIsTerrestrial()'方法而不是'p.equals(false)'因为这个名称本身就是枚举值,所以有这样一个方法。它被称为
Planet.valueOf(String name)
.Hm,是的,你是对的,不过最好也添加一个字段“name”如果地球和木星之间的区别是一个枚举而不是一个布尔值,如果行星枚举在输出中有一个toString方法,如果行星构造函数的参数有会说话的名称……因为这个名称本身就是枚举值,那么就有这样一个方法了。它被称为
Planet.valueOf(String name)
.Hm,是的,你是对的,不过最好也添加一个字段“name”如果地球和木星之间的区别是一个枚举而不是一个布尔值,如果行星枚举在输出中有一个toString方法,如果行星构造函数的参数有会说话的名字,那就更好了……非常感谢你的帮助,我正在做,我记得这是一个布尔值。非常感谢你的帮助,我在做,等于,然后我记得这是一个布尔值。