2017-12-09 25 views
0

1 차원 배열을 2 차원 배열로 자르는 프로그램이 필요합니다. 하지만 2 차원은 다른 배열이 아니라 새로운 객체 여야합니다.(JAVA) 배열을 명령문으로 잘라서 새 배열의 객체에 저장합니까?

나는 두 개의 입력이 있습니다

  • 문자열 배열 1
  • 문자열 배열이 모든 유효한 인수 - 이름이

내가 원하는 포함 (인수 및 값을 포함) 전체 명령 문을 포함 하나의 출력 :

  • arg + 값을 포함하는 문자열 배열 :이 배열의 모든 요소는 (인수 + 자신의 값) OR (만 인수) : 클래스 "cuttedStatement"

클래스 "cuttedStatement"의 이러한 개체는 모두를 가질 수 있습니다. 따라서 가치가 있거나없는 논증은 유효합니다! 묘화 사진에서

봐 : 그래서 지금 내 질문

public class CuttedStatement { 

    String argument; 
    String value; 
    boolean hasValue; 

    public CuttedStatement(String argument) { 
     this.argument = argument; 
     this.hasValue = false; 
    } 

    public CuttedStatement(String argument, String value) { 
     this.argument = argument; 
     this.value = value; 
     this.hasValue = true; 
    } 
} 

이 내 CuttedStatement 수준이다

import java.util.*; 


public class Main { 

    public static void main(String[] args) { 

     String[] statement = {"-in", "FILENAME", "-out", "FILENAME" , "-keep" , "-typ", ".avi", "-status"}; 
     String[] validArgs = {"-in", "-out", "-keep", "-typ", "-status"}; 

     ArrayList<CuttedStatement> cuttedOutputList = new ArrayList<>(); 


      for (int i = 0; i < statement.length; i++) { 
       boolean contains = Arrays.asList(validArgs).contains(statement[i+1]); 
       if(contains) { 
        CuttedStatement obj[i] = new CuttedStatement(statement[i]); 
        cuttedOutputList.add(obj); 
       }else { 
        CuttedStatement obj[i] = new CuttedStatement(statement[i],statement[i+1]); 
        cuttedOutputList.add(obj); 
       } 
      } 

    } 

} 

: 여기 enter image description here

는 CutterPrgm 내 코드입니다 : 추측 할 수 있듯이 프로그램이 작동하지 않습니다.

내 첫 번째 문제는 "obj [i]"개체입니다. Array = {obj1, obj2, obj3, obj4, etc ...} : 당신이 가지고있는 모든 새로운 반복을 index = i로 새 "obj"를 만들고 싶었습니다. 이것은 작동하지 않는 것 같습니다.

어쩌면 나를위한 해결책을 알고 있거나 조언을 얻을 수도 있습니다. 나는 그렇게 희망한다. 도움 주셔서 대단히 감사합니다. 모든 도움을 환영합니다 !!! : D

답변

0
public class Main { 

    public static void main(String[] args) { 

     String[] statement = {"-in", "FILENAME", "-out", "FILENAME", "-keep", "-typ", ".avi", "-status"}; 
     String[] validArgs = {"-in", "-out", "-keep", "-typ", "-status"}; 

     ArrayList<CutStatement> cuttedOutputList = new ArrayList<>(); 


     for (int i = 0; i < statement.length; i++) { 
      // do not use Arrays.asList() here. It will create a List instance in each iteration 
      // not sure that stream is the best solution though 
      int i_temp = i; // for lambda in stream 
      boolean contains = true; 
      if (i != statement.length - 1) { // if it is not the last element 
       contains = Arrays.stream(validArgs).anyMatch(s -> s.equals(statement[i_temp + 1])); 
      } 
      if (contains) { 
       // just do not use `[i]` here 
       CutStatement obj = new CutStatement(statement[i]); 
       cuttedOutputList.add(obj); 
      } else { 
       CutStatement obj = new CutStatement(statement[i], statement[i + 1]); 
       cuttedOutputList.add(obj); 
       i++; // increase i because we added two values from `statement` 
      } 
     } 
     System.out.println(cuttedOutputList); 
    } 

} 

class CutStatement { 
    private String argument; 
    private String value; 
    private boolean hasValue; 

    public CutStatement(String argument) { 
     this.argument = argument; 
     this.hasValue = false; 
    } 

    public CutStatement(String argument, String value) { 
     this.argument = argument; 
     this.value = value; 
     this.hasValue = true; 
    } 

    @Override 
    public String toString() { 
     if (hasValue) { 
      return "(" + argument + " = " + value + ")"; 
     } else { 
      return "(" + argument + ")"; 
     } 
    } 
} 

이 프로그램 출력 [(-in FILENAME =), (-out FILENAME =), (-keep) (= -typ 아비) (-status)]

0

나는 당신의 논리를 조금 변형 시켰습니다. 여기서지도에는 u가 요구하는 것이 포함됩니다. 최종 출력을 위해지도로 재생하십시오.

String[] statement = { "-in", "FILENAME", "-out", "FILENAME", "-keep", "-typ", ".avi", "-status" }; 
     String[] validArgs = { "-in", "-out", "-keep", "-typ", "-status" }; 
     Map<String, String> m = new HashMap<String, String>(); 
     String key = null; 
     for (int i = 0; i < statement.length; i++) { 
      boolean contains = false; 
      if(i + 1<statement.length){ 
       contains = Arrays.asList(validArgs).contains(statement[i + 1]); 
      } 
      if (contains) { 
       m.put(key, statement[i]); 
      } else { 
       key = statement[i]; 
       m.put(key, ""); 
      } 
     }