【问题标题】:How to compare enum value to scanner input in java for switch statementjava - 如何将枚举值与Java中的扫描仪输入进行比较以进行switch语句
【发布时间】:2014-04-18 22:13:32
【问题描述】:

如果他按下“a”,我试图获取用户输入,他可以做平均,如果他输入“s”,则调用平均方法,他使用 sum 方法。

我是枚举的新手,所以我正在试验。我创建了一个存储 a、b 的枚举,并尝试使用扫描仪将其值与用户输入进行比较。

我可以使用 if 语句并忘记整个枚举,但我想知道它是如何工作的。 谢谢。

public enum RecursionEnum {

 s, a

}

主类:

import java.util.*;

public class Recursion {

static RecursionEnum enumtest;

public static void yn() {
    Scanner boges = new Scanner(System.in);
    System.out.println("Enter a for average or s for  sum");
    String answer = boges.nextLine();

    switch (enumtest) {

    case a:
        average();
    case s:
        sums();
    }

}

public static void main(String[] args) {

    yn();

}

public static int sums() {
    int i = 0;
    int j = 0;

    int sum = i + j;
    return sum;
}

public static double average() {

    Scanner avgs = new Scanner(System.in);
    System.out.println("Enter total number of numbers; ");
    double tnum = avgs.nextDouble();
    double[] nums = new double[(int) tnum];
    double sum = 0;
    for (int i = 0; i < tnum; i++) {
        System.out.println("Enter number " + (i + 1) + " : ");
        nums[i] = avgs.nextDouble();
        sum += nums[i];

    }
    System.out.println(" ");
    double avg = sum / tnum;

    return avg;

}

}

这是输出:

Enter a for average or s for  sum
a
Exception in thread "main" java.lang.NullPointerException
 at com.towerdef.shit.Recursion.yn(Recursion.java:14)
 at com.towerdef.shit.Recursion.main(Recursion.java:26)

【问题讨论】:

    标签: java enums switch-statement


    【解决方案1】:

    可枚举类型有一个合成静态方法,即valueOf(String),如果存在,它将返回一个匹配输入的枚举实例。请注意,在这种情况下,输入区分大小写。 Trim 用于处理潜在的无关空白。

    你可以打开它:

    public static void yn() {
        Scanner boges = new Scanner(System.in);
        System.out.println("Enter a for average or s for  sum");
        String answer = boges.nextLine();
    
    switch (RecursionEnum.valueOf(answer.trim())) {
    
    case a:
        average();
    case s:
        sums();
    }
    
    }
    

    当然,在 Java 7 及更高版本上,您可以打开字符串。因此,您可以使用:

    public static void yn() {
        Scanner boges = new Scanner(System.in);
        System.out.println("Enter a for average or s for  sum");
        String answer = boges.nextLine();
    
    switch (answer.trim()) {
    
    case "a":
        average();
        break;
    case "s":
        sums();
        break;
    }
    
    }
    

    【讨论】:

    • example 这里的编码方式与提问者相同。是一样的还是我错过了什么? @hexafraction
    • @maxx777 我不明白你的问题,有什么相同的?编辑:找到了。他没有分配给switch语句中使用的变量
    • 哇,这个 valueOf 方法就像一个魅力。不知道它的存在或将如何使用。非常感谢!
    • @hexafraction 哦,是的,谢谢。我错过了这么简单的事情:| .所以我认为如果他在switch之前添加一个赋值语句,代码就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多