gpt4 book ai didi

java - 将项目动态添加到 List 并转换为 Integer[] 数组

转载 作者:行者123 更新时间:2023-12-02 05:09:44 25 4
gpt4 key购买 nike

我有 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 (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]

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

关于java - 将项目动态添加到 List<Integer> 并转换为 Integer[] 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56332655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com