我有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;
}
答案 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]
这是必需的答案。 希望我已经说清楚了。