【问题标题】:How to compare input values from user with values in array如何将用户的输入值与数组中的值进行比较
【发布时间】:2017-06-22 18:36:19
【问题描述】:

我想使用现有的数组元素作为 switch case,而不是为 switch case 提供常量字符串值

我在用于显示的资源字符串数组中有值,用户必须从这些显示值中进行选择,现在我想比较我保存在共享首选项中的输入值和我在数组资源中的值,我写了这样的东西,但是没有用

private static String activity;
private static int result;
activity = SharedPrefUtils.getActivityLevel(context);

String[] activities 
= context.getResources().getStringArray(R.array.activity);

switch (activity){
      //something like getting values from array
        case activities[0]:
            result = 0;
            break;
        case activities[1]:
            result = 200;
            break;
        case activities[2]:
            result = 300;
            break;
    }

    return result;

【问题讨论】:

  • 为什么是static?删除它,它不会给你任何优势......
  • 从 JDK7 开始,您可以执行 something like that,它只会使用 String.equals() 将其转换为 if/elseif 块。你用的是什么版本?
  • 您的问题不清楚 - 您能否举一个该方法的输入和输出示例?
  • 在我的情况下,我不想为 switch case 提供常量字符串,我想利用现有的数组来存储我想用作 switch case 的字符串值

标签: java android arrays switch-statement


【解决方案1】:

您可以将其转换为List 并使用indexOf 来获取元素索引,而不是遍历array,例如:

String[] activities = context.getResources().getStringArray(R.array.activity);
List<String> activitiesList = Arrays.asList(activities);
int index = activitiesList.indexOf(activity);

javadoc 是这么说的:

返回指定元素第一次出现的索引 此列表,如果此列表不包含该元素,则为 -1。更多的 形式上,返回最低索引 i 使得 (o==null ? get(i)==null : o.equals(get(i))),如果没有这样的索引,则为 -1。

因此,您可以将您的逻辑基于index 值。

另一种方法是使用Map&lt;Integer, String&gt; 并根据用户选择的值将Integer 键传递给方法。

【讨论】:

  • 在我的情况下,我不想为 switch case 提供常量字符串,我想利用现有的数组来存储我想用作 switch case 的字符串值
  • 您不能像本例那样编写具有动态案例数的开关,案例数将取决于元素的数量。因此,您应该使用indexOf 调用或for 循环。
  • 如果我在做案例活动[0]:虽然活动[0]返回字符串,但我得到常量表达式所需的错误
  • 它只允许“somevalue”作为大小写:
  • 啊,是的,你不能在switch 的情况下使用任何变量,除非它是最终的。因此,它必须是 String 文字。恐怕我们不能使用switch 的情况。
【解决方案2】:

首先确保您的“活动”字符串和“活动”数组的项目正在返回一些值。尝试打印值以检查。如果它们都返回值,那么您可以通过这种方式比较 String:

if (activity.equalsIgnoreCase(activities[0]){
   Log.e("Matched" , "Yeah, it matched");
}

您可以通过这种方式一一匹配您所有的String值。

【讨论】:

  • 是的,但我想通过 switch 块进行动态选择,就像我不必将大小写为“字符串”并且可以利用存储该值的数组
  • 在我的情况下,我不想为 switch case 提供常量字符串,我想利用现有的数组来存储我想用作 switch case 的字符串值
  • 然后在你的活动数组上运行一个循环,并通过equalsIgnoreCase方法将活动数组的每个值与活动字符串的值进行比较。
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多