>source

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


  • 답변 # 1

    코드의 첫 번째 가장 중요한 문제는 구성 요소 배열을 살펴보고 메소드에 정의 된 필드가 없지만 문제 설명에 따라

    switch (s[i])
    
    

    그리고 break statement없이 끝나는 switch 문에도 문제가 있습니다. 다음과 같은 코드 구현을 통해 더 잘 이해할 수 있습니다.

    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 를 사용할 수 있습니다  원하는 경우 요소를 이동하려면

  • 이전 python - 순환 가져 오기 문제의 이름 "앱"을 가져올 수 없습니다
  • 다음 authentication - Azure에서 WebApi를 게시 한 후 "unsupported_grant_type"