Динамически добавляйте элементы в List <Integer>и конвертируйте в массив Integer [] - PullRequest
0 голосов
/ 28 мая 2019

У меня есть 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 голосов
/ 28 мая 2019

Первая и главная проблема вашего кода состоит в том, что вы просматриваете массив компонентов, и в вашем методе не определено такое поле, но вместо этого, согласно формулировке вашей проблемы, оно должно быть

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]

Что является обязательным ответом.Надеюсь, я ясно дал понять.

0 голосов
/ 28 мая 2019

Что такое массив компонентов в вашем коде?если вам действительно нужно вернуть массив, лучше использовать цикл for для добавления элементов из коллекции - он будет выглядеть более прозрачным.Не забывайте, что строки в выражении switch не могут быть нулевыми.В заключение вы можете использовать IntStream для перемещения элементов, если вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...