使用枚举的java程序planet
我有一个名为“行星”的枚举,它有两个字段:一个行星中有多少个卫星(int)以及该行星是地球行星还是木星行星(布尔值)。然后我有一个名为“行星信息”的程序,它通过迭代每个行星来确定行星的类型,从而列出每个行星的类型。但我似乎不知道如何检查它是陆地的还是木星的 以下是一个示例输出:使用枚举的java程序planet,java,boolean,Java,Boolean,我有一个名为“行星”的枚举,它有两个字段:一个行星中有多少个卫星(int)以及该行星是地球行星还是木星行星(布尔值)。然后我有一个名为“行星信息”的程序,它通过迭代每个行星来确定行星的类型,从而列出每个行星的类型。但我似乎不知道如何检查它是陆地的还是木星的 以下是一个示例输出: Terrestrial planets: MERCURY VENUS EARTH MARS Jovian planets: MERCURY VENUS EARTH MARS 我的代码: 枚举: public enum
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方法,如果行星构造函数的参数有会说话的名字,那就更好了……非常感谢你的帮助,我正在做,我记得这是一个布尔值。非常感谢你的帮助,我在做,等于,然后我记得这是一个布尔值。