Loop内的Switch语句无法正常工作

时间:2014-06-11 14:26:17

标签: java

Java新手,我的代码遇到麻烦,它是while循环中的switch语句。我喜欢使用字母或“char”而不是编号的情况“int”,我有'q'退出。感谢您的输入。这是主要代码。

import java.util.Scanner;
import java.util.*;

public class supraCritters {
    public static void main(String [] arguments) {
        Critter nastybat = new Critter();
        nastybat.health = 100;
        nastybat.mood = 50;
        nastybat.hunger = 25;

        System.out.println("Your critter has just been born,");
        System.out.println("here are the stats of your critter.");
        nastybat.checkStats();

        System.out.println("\nPlease choose a letter");
        System.out.println("[c]heck stats \n[f]eed \n[p]lay \n[r]ead \n[t]rain");
        System.out.println("[q]uit");

        Scanner sChoice = new Scanner(System.in);
        char choice = ' ';
        while (choice != 'q') {
            switch (choice) {
                case 'c':
                    nastybat.checkStats();
                    break;
                case 'f':
                    nastybat.feed();
                    break;
                case 'p':
                    nastybat.play();
                    break;
                case 'r':
                    nastybat.read();
                    break;
                case 't':
                    nastybat.train();
                    break;
                case 'q':
                System.out.println("good bye");
                    break;
                default:
                System.out.println("invalid entry");
                    break;
            }       
choice = sChoice.next().charAt(0);
        }   
    }
}

当我输入相应的字母时,循环不显示输入法或重复,'q'什么都不做。输入前默认显示“无效输入”。

代码已编辑但仍有问题。

2 个答案:

答案 0 :(得分:3)

第一次输入只进行一次!因此,循环始终返回相同的结果。你应该在循环中复制获取输入代码!

    Scanner sChoice = new Scanner(System.in);
    char choice = '';
    while (choice != 'q') {
        switch (choice) {
            case 'c':
                nastybat.checkStats();
                break;
        .
        .
        .
        .
        .

    choice = sChoice.next().charAt(0);

第一行获取第一次开关运行的输入,循环内的一行获得其余部分。

<强>更新

choice = sChoice.next().charAt(0);应该放在循环的最后,如果没有,正如 @proskor 所说,当用户点击“q”时,程序将返回' invalid entry”。

答案 1 :(得分:0)

我完成了代码,似乎工作正常。测试对象现在可以使用的方法。

最终

import java.util.Scanner;
import java.util.*;

public class supraCritters {
    public static void main(String [] arguments) {
        Critter nastybat = new Critter();
        nastybat.health = 100;
        nastybat.mood = 50;
        nastybat.hunger = 25;

        System.out.println("Your critter has just been born,");
        System.out.println("here are the stats of your critter.");
        nastybat.checkStats();

        Scanner sChoice = new Scanner(System.in);
        char choice = ' ';
        while (choice != 'q') {
            switch (choice) {
                case 'c': case 'C':
                    nastybat.checkStats();
                    break;
                case 'f': case 'F':
                    nastybat.feed();
                    break;
                case 'p': case 'P':
                    nastybat.play();
                    break;
                case 'r': case 'R':
                    nastybat.read();
                    break;
                case 't': case 'T':
                    nastybat.train();
                    break;
            case 'q': case 'Q':
                System.out.println("good bye");
                    break;
                default:
                System.out.println("invalid entry");
                    break;
            }   
            System.out.println("\nPlease choose a letter");
            System.out.println("[c]heck stats \n[f]eed \n[p]lay \n[r]ead \n[t]rain");
            System.out.println("[q]uit");
            choice = sChoice.next().charAt(0);
        }   
    }
}

import java.util.Scanner; import java.util.*; public class supraCritters { public static void main(String [] arguments) { Critter nastybat = new Critter(); nastybat.health = 100; nastybat.mood = 50; nastybat.hunger = 25; System.out.println("Your critter has just been born,"); System.out.println("here are the stats of your critter."); nastybat.checkStats(); Scanner sChoice = new Scanner(System.in); char choice = ' '; while (choice != 'q') { switch (choice) { case 'c': case 'C': nastybat.checkStats(); break; case 'f': case 'F': nastybat.feed(); break; case 'p': case 'P': nastybat.play(); break; case 'r': case 'R': nastybat.read(); break; case 't': case 'T': nastybat.train(); break; case 'q': case 'Q': System.out.println("good bye"); break; default: System.out.println("invalid entry"); break; } System.out.println("\nPlease choose a letter"); System.out.println("[c]heck stats \n[f]eed \n[p]lay \n[r]ead \n[t]rain"); System.out.println("[q]uit"); choice = sChoice.next().charAt(0); } } }