【问题标题】:Add items dynamically to List<Integer> and convert to Integer[] Array将项目动态添加到 List<Integer> 并转换为 Integer[] Array
【发布时间】:2019-10-13 10:02:28
【问题描述】:

我有 2 个字符串数组

  String[] s = {"Light", "Sun", "Sun", "Water"};
  String[] ss = {"on", "off", "on", "off"};

我想将其转换为整数数组,以便稍后从我的资源中分配图片。 因此,通过 switch 语句检查字符串以分配特定的整数值:

  for(int i = 0; i < s.length; i++)
  {
  switch (components[i]) {

            case "Light":
                  if (ss[i]=="on")
                    I.add(1);
                  else
                    I.add(2);
            case "Sun":
                  if (ss[i]=="on")
                    I.add(3);
                  else
                    I.add(4);
            case "Water":
                  if (ss[i]=="on")
                    I.add(5);
                  else
                    I.add(6);
            case "Gravel":
                  if (ss[i]=="on")
                    I.add(7);
                  else
                    I.add(8);
            }
         }
  }

因为我不能动态地将值添加到数组中,所以我决定先创建一个整数列表,然后再将其转换为整数数组:

  List<Integer> I = new ArrayList<Integer>();
  [...]
  Integer[] arr = I.toArray(new Integer[I.size()]);

但不是我预期的结果:

{"1", "4", "3", "6"}

我总是会得到一个数字序列作为结果:

{"1", "2", "3", "4"}

好像我在转换时做错了什么?

完整代码如下:

  public static Integer[] toImg(String[] s, String[] ss) {

        List<Integer> I = new ArrayList<Integer>();

           for(int i = 0; i < s.length; i++)
  {
  switch (components[i]) {

            case "Light":
                  if (ss[i]=="on")
                    I.add(1);
                  else
                    I.add(2);
            case "Sun":
                  if (ss[i]=="on")
                    I.add(3);
                  else
                    I.add(4);
            case "Water":
                  if (ss[i]=="on")
                    I.add(5);
                  else
                    I.add(6);
            case "Gravel":
                  if (ss[i]=="on")
                    I.add(7);
                  else
                    I.add(8);
            }
         }

        Integer[] arr = I.toArray(new Integer[I.size()]);
        return arr;
  }

【问题讨论】:

  • Switch 语句在每个 case 之后都需要中断,否则它们会触发其余的 case。会不会是这个问题?
  • 谢谢 user3837868,我错过了休息时间!

标签: java android arrays list integer


【解决方案1】:

您的代码的第一个也是最重要的问题是您正在查看组件数组,并且您的方法中没有定义这样的字段,而是根据您的问题陈述应该是

switch (s[i])

然后你的 switch 语句也有问题,因为它们在没有 break 语句的情况下结束,使它们在所有情况下都运行,无论是否是这种情况。 您可以通过我对您的代码的实现更好地理解

import java.io.*;
import java.util.*;
class Test
{
public static void main(String args[])throws IOException
{

   List<Integer> I = new ArrayList<Integer>();
    String[] s = {"Light", "Sun", "Sun", "Water"}; 
    String[] ss = {"on", "off", "on", "off"};
    for(int i = 0; i < s.length; i++) { 
        switch (s[i]) { 
            case "Light": 
            if (ss[i]=="on") 
            I.add(1); 
            else 
            I.add(2); 
            case "Sun": 
            if (ss[i]=="on") 
            I.add(3); 
            else 
            I.add(4); 
            case "Water": 
            if (ss[i]=="on") 
            I.add(5); 
            else 
            I.add(6); 
            case "Gravel": 
            if (ss[i]=="on") 
            I.add(7); 
            else 
            I.add(8); 
            } 
            System.out.println(I+" at i="+i);
        } 
    Integer[] arr = I.toArray(new Integer[I.size()]);
    System.out.println(I);
}
}

这是你编写的代码,当我运行它时,我得到了输出

[1, 3, 5, 7] at i=0
[1, 3, 5, 7, 4, 6, 8] at i=1
[1, 3, 5, 7, 4, 6, 8, 3, 5, 7] at i=2
[1, 3, 5, 7, 4, 6, 8, 3, 5, 7, 6, 8] at i=3
[1, 3, 5, 7, 4, 6, 8, 3, 5, 7, 6, 8]

因此您可以看到始终运行所有案例并根据 ss[] 的值到达输出。 因此您可以将代码更正为

import java.io.*;
import java.util.*;
class Test
{
public static void main(String args[])throws IOException
{

   List<Integer> I = new ArrayList<Integer>();
    String[] s = {"Light", "Sun", "Sun", "Water"}; 
    String[] ss = {"on", "off", "on", "off"};
    for(int i = 0; i < s.length; i++) { 
        switch (s[i]) { 
            case "Light": 
            if (ss[i]=="on") 
            I.add(1); 
            else 
            I.add(2);
            break;
            case "Sun": 
            if (ss[i]=="on") 
            I.add(3); 
            else 
            I.add(4);
            break; 
            case "Water": 
            if (ss[i]=="on") 
            I.add(5); 
            else 
            I.add(6);
            break;
            case "Gravel": 
            if (ss[i]=="on") 
            I.add(7); 
            else 
            I.add(8); 
            break;
            } 
            System.out.println(I+" at i="+i);
        } 
    Integer[] arr = I.toArray(new Integer[I.size()]);
    System.out.println(I);
}
}

输出将是

[1] at i=0
[1, 4] at i=1
[1, 4, 3] at i=2
[1, 4, 3, 6] at i=3
[1, 4, 3, 6]

这是必需的答案。 希望我已经说清楚了。

【讨论】:

    【解决方案2】:

    您的代码中的组件数组是什么?如果你真的需要返回一个数组,你最好使用for 循环从集合中添加元素——它看起来会更透明。不要忘记switch 语句中的字符串不能为空。 总之,如果您愿意,可以使用IntStream 移动元素

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2010-09-06
      • 2016-12-26
      • 1970-01-01
      相关资源
      最近更新 更多