这是按原样运行的,但我正在寻找另一种方法来编写它。
import java.util.Scanner;
public class StateBirdAndFlowerProgram {
public static void main(String args[]) {
// Begin Scanner for user input later on
Scanner input = new Scanner( System.in );
//Begin array of information
String[][] states={
{"Alabama", "Flower: Camelia", "Bird: Northern flicker"},
{"Alaska", "Flower: Forget-me-not", "Bird: Willow ptarmigan "},
{"Arizona", "Flower: Saguaro cactus blossom", "Bird: Cactus wren "},
{"Arkansas", "Flower: Apple blossom", "Bird: Northern mockingbird "},
{"Califorina", "Flower: Califorina poppy", "Bird: California quail"},
{"Colorado", "Flower: Rocky Mountian columbine", "Bird: Lark bunting"},
{"Connecticut", "Flower: Mountain laurel ", "Bird: American robin"},
{"Delaware", "Flower: Peach blossom", "Bird: Delaware Blue Hen "},
{"Florida", "Flower: Orange blossom ", "Bird: Northern mockingbird "},
{"Georgia", "Flower: Cherokee rose ", "Bird: Brown thrasher ", },
{"Hawaii", "Flower: Hawaiian hibiscus ", "Bird: Nēnē or Hawaiian goose"},
{"Idaho", "Flower: Syringa, mock orange ", "Bird: Mountain bluebird "},
{"Illinois", "Flower: Violet ", "Bird: Northern cardinal "},
{"Indiana", "Flower: Peony ", "Bird: Northern cardinal "},
{"Iowa ", "Flower: Wild prairie rose ", "Bird: Eastern goldfinch "},
{"Kansas", "Flower: Sunflower", "Bird: Western meadowlark"},
{"Kentucky", "Flower: Goldenrod ", "Bird: Northern cardinal"},
{"Louisiana", "Flower: Magnolia ", "Bird: Brown pelican "},
{"Maine", "Flower: White pine cone and tassel ", "Bird: Black-capped chickadee "},
{"Maryland", "Flower: Black-eyed susan ", "Bird: Baltimore oriole"},
{"Massachusetts", "Flower: Mayflower ", "Bird: Black-capped chickadee "},
{"Michigan", "Flower: Apple blossom", "Bird: American robin "},
{"Minnesota", "Flower:Pink and white lady's slipper ","Bird: Common loon"},
{"Mississippi", "Flower: Magnolia", "Bird: Northern mockingbird "},
{"Missouri", "Flower: Hawthorn", "Bird: Eastern bluebird "},
{"Montana", "Flower: Bitterroot ", "Bird: Western meadowlark "},
{"Nebraska", "Flower: Goldenrod", "Bird: Western meadowlark"},
{"Nevada", "Flower: Sagebrush ", "Bird: Mountain bluebird "},
{"New Hampshire ", "Flower: Purple lilac ", "Bird: Purple finch "},
{"New Jersey", "Flower: Violet ", "Bird: Eastern goldfinch "},
{"New Mexico", "Flower: Yucca flower", "Bird: Roadrunner "},
{"New York", "Flower: Rose", "Bird: Eastern bluebird "},
{"North Carolina", "Flower: Flowering dogwood", "Bird: Northern cardinal "},
{"North Dakota", "Flower: Wild prairie rose ", "Bird: Western meadowlark "},
{"Ohio", "Flower: carlet carnation ", "Bird Northern cardinal: "},
{"Oklahoma", "Flower: Oklahoma rose ", "Bird: Scissor-tailed flycatcher "},
{"Oregon", "Flower: Oregon grape ", "Bird: Western meadowlark "},
{"Pennsylvania", "Flower: Mountain laurel", "Bird: Ruffed grouse"},
{"Rhode Island", "Flower: Violet", "Bird: Rhode Island Red "},
{"South Carolina", "Flower: Yellow jessamine ","Bird: Carolina wren", },
{"South Dakota ", "Flower: Pasque flower ", "Bird: Ring-necked pheasant"},
{"Tennessee", "Flower: Iris", "Bird: Northern mockingbird ",},
{"Texas", "Flower: Bluebonnet sp. ", "Bird: Northern mockingbird "},
{"Utah", "Flower: Sego lily", "Bird: California gull "},
{"Vermont", "Flower: Red clover ", "Bird: Hermit thrush"},
{"Virginia", "Flower: American dogwood", "Bird: Northern cardinal"},
{"Washington", "Flower: Coast rhododendron", "Bird: Willow goldfinch "},
{"West Virginia", "Flower:Rhododendron", "Bird: Northern cardinal "},
{"Wisconsin", "Flower: Wood violet ", "Bird: American robin "},
{"Wyoming", "Flower: Indian paintbrush ", "Bird: Western meadowlark "}};
// While loop to search through array
while(true) {
// Request user input
System.out.println("Enter a state: ");
// Capture user input
String stateName =input.nextLine();
// exit statement
if(stateName.equalsIgnoreCase("None"))
// Exit program
System.exit(0);
else {
// For loop to search through array
for(int row=0,column=0;row<states.length;row++) {
// If statement for matching input string to array data
if(states[row][0].equalsIgnoreCase(stateName)) {
// Print bird information
System.out.println("Bird: " + states[row][column+1]);
// Print Flower information
System.out.println("Flower: " + states[row][column+2] + "\n");
} // end if
} // end for
} // end else
} // end while
} // end main
} // end class发布于 2015-09-29 20:03:34
我运行了您的代码,得到了如下输出:
进入一个州:印第安纳鸟:花:牡丹花:鸟:北红衣主教
所以,有两件事:
(一)您的列的顺序不对或标签不正确;
2)你的标签是复制的。它们已经存在于您的数据中(这是不寻常的),因此您可以从print子句中删除标签。
System.out.println(states[row][column+1]);
System.out.println(states[row][column+2] + "\n");然而,在更现实的情况下,标签很可能不会与数据一起包括在内。
您的用户输入不是很直观。接受这一系列的输入:
进入一个州:波士顿进入一个州;加拿大进入一个州:42个进入一个州:无
如果在数组中找不到输入的值,那么更改代码以添加到达的System.out.println("State not found: " + stateName)应该是非常容易的。
此外,考虑添加此System.out.println("Enter a state: (or None to exit)");作为退出程序的方式并不明显。
我不确定是否对每一行代码进行注释是老师的要求,但大多数程序员会发现这是非常过分的。在生产代码中,您不经常看到代码注释(除了特定于语言的构造(如JavaDoc) ),因为代码应该为自己说明它所做的事情。如果某个代码背后的推理不清楚,通常只需要添加注释。
这些措施特别过分:
} // end if } // end for } // end else } // end while } // end main } // end class
实际上,在许多情况下,在需要变量之前,最好不要声明变量。如果您必须始终上下查找以查找变量声明的使用情况,那么代码就更难理解了。它还使将变量保持在正确的范围更容易。
//开始扫描,以便稍后在Scanner = new Scanner( System.in )上输入用户;
我相信其他人会找到很多其他的东西来批评和帮助您编写代码,这只是一个开始。
发布于 2015-09-30 03:31:46
您的数据集肯定是我会使用枚举的东西,如果不是csv的话。
下面是一个简洁的例子,说明这是什么样子的:
enum States {
AL("Alabama", "Camelia", "Northern Flicker"),
NY("New York", "Rose", "Eastern Bluebird");
private final String name;
private final String flower;
private final String bird;
States(String name, String flower, String bird) {
this.name = name;
this.flower = flower;
this.bird = bird;
}
@Override
public String toString() {
return name;
}
public String initials() {
return name();
}
public String flower() {
return flower;
}
public String bird() {
return bird;
}
}下面是一个使用上述方法的示例:
import java.util.Scanner;
public class Tester {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a state's name or initials to look for:");
String userSelection = input.nextLine();
// search through the enum
for (States state : States.values()) {
if (userSelection.equalsIgnoreCase(state.toString())
|| userSelection.equalsIgnoreCase(state.initials())) {
System.out.println(
state.toString() + "'s bird is the " + state.bird()
+ " and their flower is: " + state.flower()
);
break;
}
}
/* You can extract the above into a method that returns true or false
and if false tells the user their entry was invalid/doesn't exist */
}
}发布于 2015-09-29 20:13:27
当我看到这样的东西时,想到了两件事。不过,两者都归结为封装。第一个想法是创建一个State类,其中有一个花,并在它上有一个鸟巢属性。然后,你可以简单地列出这些国家的名单,并适当地进行过滤。
static List<U_S_State> usStates;
static {
usStates = new ArrayList<U_S_State>();
usStates.add(new U_S_State("Alabama", "Flower: Camelia", "Bird: Northern flicker"));
}
//pre java 8, comparable needed on U_S_State
public void GetInfo1(String stateName){
int index = usStates.indexOf(new U_S_State(stateName));
if (index == -1){//not found
return;
}
U_S_State state = usStates.get(index);
System.out.println("Bird: " + state.getStateBird());
System.out.println("Flower: " + state.getStateFlower() + "\n");
}
//Using java8 stream comparable not needed on U_S_State
public void GetInfo2(String stateName){
if(!usStates.stream().anyMatch(s->s.getStateName()==stateName))
return;
U_S_State state = usStates.stream()
.filter(s->s.getStateName() == stateName)
.findFirst().get();
System.out.println("Bird: " + state.getStateBird());
System.out.println("Flower: " + state.getStateFlower() + "\n");
}
public class U_S_State implements Comparable<U_S_State>{
private final String stateFlower;
private final String stateBird;
private final String stateName;
private String stateAbbreviation;
public U_S_State(String stateName){
this(stateName, "", "");
}
public U_S_State(String stateName, String stateFlower, String stateBird) {
this.stateFlower = stateFlower;
this.stateBird = stateBird;
this.stateName = stateName;
}
public String getStateAbbreviation() {
return stateAbbreviation;
}
public void setStateAbbreviation(String stateAbbreviation) {
this.stateAbbreviation = stateAbbreviation;
}
public String getStateName() {
return stateName;
}
public String getStateBird() {
return stateBird;
}
public String getStateFlower() {
return stateFlower;
}
@Override
public int compareTo(U_S_State o) {
return o.stateName.compareTo(this.stateName);
}
}请注意,在名字(甚至命名约定)方面,这可能不是最好的选择,但这确实给了您和去哪里的想法。创建一个可以将自己与他人相比的类。我们只对比较各州的名字感兴趣。实现Comparable<T>对于list是很重要的,因为它是您将如何搜索一个项目前java 8。使用java 8,您可以使用流和lambda的。如果你理解他们方便。这是我的建议。
https://codereview.stackexchange.com/questions/106052
复制相似问题