Java 回路内的开关状态工作不正常

Java 回路内的开关状态工作不正常,java,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(

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”什么也不做。默认情况下,输入前显示“无效条目”


代码已编辑,但仍有问题。

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

    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
”时,程序将返回一个“
无效条目”
”。

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

决赛


您应该将获取用户输入的代码移动到您提供的代码中,并说它不起作用-但不说它以什么方式不起作用,也不告诉我们问题的任何迹象。这将在终止之前在“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();

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