动态将项目添加到List <integer>并转换为Integer []数组

时间:2019-05-27 21:36:19

标签: java android arrays list integer

我有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;
  }

2 个答案:

答案 0 :(得分:0)

您的代码中的components数组是什么?如果确实需要返回数组,则最好使用for循环从集合中添加元素-它将看起来更加透明。不要忘记switch语句中的字符串不能为null。 最后,如果需要,您可以使用IntStream移动元素

答案 1 :(得分:0)

代码的第一个也是最主要的问题是,您正在查看components数组,并且在方法中没有定义此类字段,而是根据您的问题说明,应该是

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]

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