java программа pl anet с использованием перечислений - PullRequest
1 голос
/ 07 февраля 2020

У меня есть enum, называемый планетами, и у него есть 2 поля: сколько лун в pl anet (int) и, если pl anet - земное или юпитерианское (булево). Затем у меня есть программа с именем pl anet info, которая перечисляет каждый тип pl anet по итерации по каждому pl anet для определения типа. Но я не могу понять, как проверить, является ли это земным или Jovian.

Вот пример вывода:

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");
        }
    }
}

Ответы [ 4 ]

2 голосов
/ 07 февраля 2020

Просто используйте p.getIsTerrestrial () вместо p.equals (false).

 //print if its a Terrestrial Planet
 for (Planet p : Planet.values()){
        if(p.getIsTerrestrial()){
            System.out.println(p);
    } 
 }

Я бы также подумал о том, чтобы сделать pl anet классом, содержащим перечисление, вместо того, чтобы перечислять с не статичным c значения (луна)

Перечисление - это специальный "класс", который представляет группу констант (неизменяемых переменных, таких как конечные переменные).

2 голосов
/ 07 февраля 2020

Добавьте функцию stati c к вашему enum, назовите ее getPlanetByName(String name). Функция должна перебрать Planet.values() и вернуть ту, у которой указано имя. Затем, как только ваш пользователь входит в planetName, вы сохраняете его в

String userEnteredPlanetName

И затем просто звоните

Planet.getPlanetByName(userEnteredPlanetName).getIsTerrestrial();

Это также позволит вам избавиться от этого огромного переключателя. блок:)

1 голос
/ 10 февраля 2020

Используйте 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)
    }
 }
0 голосов
/ 07 февраля 2020

попробуйте поставить это вместо вашего для каждого л oop. Это работает.

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

getIsTerrestrial является булевой функцией, и поэтому equals () не работает с ней.

...