public class VoteTUIView {
VoteMachine voteMachine;
public VoteTUIView(VoteMachine voteMachine) {
this.voteMachine = voteMachine;
this.start();
}
public static String errorMissingVariable = "This command needs an variable";
public static String errorPartyNoneExistant = "This party does not exist";
public static String errorAddImpossible = "You can't add something to that";
public static String help = "Seriously? You need help? You look like a smart boy/girl, you can figure this out yourself. I believe in you! ";
public void start(){
System.out.println("Please insert a command: (VOTE [party], ADD PARTY [party], VOTES, PARTIES, EXIT, and HELP) ");
Scanner inputScanner = new Scanner(System.in);
while(inputScanner.hasNextLine()){
String inputCommand = inputScanner.next();
switch (inputCommand){
case "VOTE": {
if(inputScanner.hasNext()){
String inputCommand2 = inputScanner.next();
if(voteMachine.getParties().getParties().contains(inputCommand2)){
voteMachine.vote(inputCommand2);
}
else{
System.out.println(errorPartyNoneExistant);
}
}
else{
System.out.println(errorMissingVariable);
}
}
case "ADD": {
if(inputScanner.next().equals("PARTY")) {
if(inputScanner.hasNext()) {
voteMachine.addParty(inputScanner.next());
}
else{
System.out.println(errorMissingVariable);
}
}
else {
showError(errorAddImpossible);
}
}
case "VOTES": {
showVotes(voteMachine.getVotes().getVoteList());
}
case "PARTIES": {
showParties(voteMachine.getParties().getParties());
}
case "EXIT": {
break;
}
case "HELP": {
System.out.println(help);
}
default: {
}
}
System.out.println("\nPlease insert a command: (VOTE [party], ADD PARTY [party], VOTES, PARTIES, EXIT, and HELP) ");
}
}
public void showVotes(Map<String, Integer> voteList) {
int i = 1;
for(String partyName : voteList.keySet()){
System.out.println(i+": "+partyName+" has obtained "+voteList.get(partyName)+" votes.");
i++;
}
}
private void showParties(List<String> partyList) {
int i = 1;
for(String partyName : partyList){
System.out.println(i+": "+partyName);
i++;
}
}
private void showError(String error) {
System.out.println("Error: " + error);
}
}
我正在与一个奇怪的虫子战斗。程序读取用户输入并确定对交换机采取的操作,但通常情况下,交换机中的多个案例在它们显然不应该被触发时被触发。它让我发疯了。有谁知道它为什么这样做?
Please insert a command: (VOTE [party], ADD PARTY [party], VOTES, PARTIES, EXIT, and HELP)
ADD PARTY DemoCant's
1: DemoCant's
Please insert a command: (VOTE [party], ADD PARTY [party], VOTES, PARTIES, EXIT, and HELP)
ADD PARTY RepublicRats
1: DemoCant's
2: RepublicRats
Please insert a command: (VOTE [party], ADD PARTY [party], VOTES, PARTIES, EXIT, and HELP)
VOTE DemoCant's
VOTE DemoCant's
Error: You can't add something to that
1: DemoCant's has obtained 1 votes.
1: DemoCant's
2: RepublicRats
答案 0 :(得分:3)
您几乎在所有break
个案例中都缺少switch
个陈述,因此代码只会落到下一个案例中。请参阅docs
case "VOTE": {
....
break;
}
.....
答案 1 :(得分:3)
case
语句中的switch
会失效,并继续执行下一个case
。如果您不希望case
落空,请添加break;
语句和case
的结尾。 E.g:
switch (inputCommand){
case "VOTE":
// code for voting
break;
case "ADD": {
// code for adding
break;
// etc...
答案 2 :(得分:2)
我正在与一个奇怪的虫子战斗。
这就是为什么在提问之前你会使用调试器的原因。
程序读取用户输入并确定对交换机采取的操作,但通常情况下,交换机中的多个案例在它们显然不应该被触发时被触发。
因为没有break;
或return;
,所以没有理由突破交换机。
注意:Java,C,C ++,C#都是这样做的。
这让我很生气。有人知道为什么会这样吗?
因为这是应该做的。
答案 3 :(得分:1)
您缺少break语句。没有break语句,这是一种预期的行为。
您可以在http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
答案 4 :(得分:0)
在每个break
Case
语句
如果您没有添加break
语句,代码流将进入下一个案例,直到所有案例结束或遇到break