2017-12-09 9 views
0

私は、1次元配列を2次元配列に切断するプログラムが必要です。 しかし、第2次元は別の配列ではなく、新しいオブジェクトでなければなりません。(JAVA)配列をステートメントに分割し、新しい配列のオブジェクトに保存しますか?

私は2つの入力を持っている:

  • 文字列配列1は、(引数と値を含む)のフルコマンド文が含まれてい
  • 文字列配列2は、私がしたいすべての有効な引数-名

が含まれています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]」オブジェクトです。私はあなたが持っているように、新しい繰り返しのたびにindex = iという新しい "obj"を作成したかったのです:Array = {obj1、obj2、obj3、obj4、etc ...}。これはうまくいかないようです。

多分あなたは私のための解決策を知っているか、いくつかのヒントを持っています。そうだといい。どうもありがとうございました。 :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 = .AVI)、(-status)]

0

私はあなたのロジックを少し変更しました。ここにマップに必要なものが含まれます。あなたの最終的な出力のために地図で遊んでください。

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, ""); 
      } 
     } 
関連する問題