2017-10-19 5 views
0

ちょうど私が私がある方法setLine()でエラーを取得していますここで間違って行っているか疑問に思う:に何をすべきかについてString []型の状態[]に変換することはできません

error: incompatible types: String[] cannot be converted to State[]

イムあまりわかりません私は分割されてその状態配列に格納される必要があるので、それを修正します。それで、csvファイルから読み込むときに状態か場所かどうかを判断できます。それだけで 'String[]State[]に変換することはできません' と言うよう

public static void readFile(String inFilename) 
{ 
    FileInputStream fileStrm = null; 
    InputStreamReader rdr; 
    BufferedReader bufRdr; 
    int stateCount = 0, locationCount = 0; 
    String line; 

    try 
    { 
     fileStrm = new FileInputStream(inFilename); 
     rdr = new InputStreamReader(fileStrm); 
     bufRdr = new BufferedReader(rdr); 
     line = bufRdr.readLine(); 
     while (line != null) 
     { 
      if (line.startsWith("STATE")) 
      { 
       stateCount++; 
      } 
      else if (line.startsWith("LOCATION")) 
      { 
       locationCount++; 
      } 
      line = bufRdr.readLine(); 
     } 
     fileStrm.close(); 

     State[] state = new State[stateCount]; 
     Location[] location = new Location[locationCount]; 
    } 
    catch (IOException e) 
    { 
     if (fileStrm != null) 
     { 
      try { fileStrm.close(); } catch (IOException ex2) { } 
     } 
     System.out.println("Error in file processing: " + e.getMessage()); 
    } 
} 

public static void processLine(String csvRow) 
    { 
     String thisToken = null; 
     StringTokenizer strTok; 
     strTok = new StringTokenizer(csvRow, ":"); 
     while (strTok.hasMoreTokens()) 
     { 
      thisToken = strTok.nextToken(); 
      System.out.print(thisToken + " "); 
     } 
     System.out.println(""); 
    } 

public static void setLine(State[] state, Location[] location, int stateCount, int locationCount, String line) 
{ 
    int i; 
    state = new State[stateCount]; 
    state = line.split("="); <--- ERROR 
    for(i = 0; i < stateCount; i++) 
    { 
    } 
} 

public static void writeOneRow(String inFilename) 
{ 
    FileOutputStream fileStrm = null; 
    PrintWriter pw; 
    try 
    { 
     fileStrm = new FileOutputStream(inFilename); 
     pw = new PrintWriter(fileStrm); 
     pw.println(); 
     pw.close(); 
    } 
    catch (IOException e) 
    { 
     if (fileStrm != null) 
     { 
      try 
      { 
       fileStrm.close(); 
      } 
      catch (IOException ex2) 
      {} 
     } 
     System.out.println("Error in writing to file: " + e.getMessage()); 
    } 

} 
+0

'state'は型である'州立[] '、line.split'に対し、( "=")ので、 '状態= line.split( "=")' 'あなたがエラーを取得します'String []'を返します。任意のタイプ間で自由に割り当てることはできません。結果のString配列を繰り返し処理し、要素を使って 'State'オブジェクトをパースしなければなりません。 – QBrute

+1

あなたは 'State'クラス用のコードを提供できますか? – Karan

+0

@カランなぜですか? '国家 'は' String'を継承すると思いますか? 'String'は' final'ですので、そうは思わないでしょう。 – AxelH

答えて

3

このエラーは、発生します。つまり、IntegerStringに保存したかったようですが、タイプはお互いの関係(親 - >子)を持たないので同じです。

したがって、問題を解決するには、String[]State[]に変換する方法が必要です。このような何か:

private State[] toStateArray(String[] strings){ 
    final State[] states = new State[strings.length]; 
    for(int i = strings.length-1; i >= 0; i--){ 
     states[i] = new State(strings[i]); // here you have to decide how to convert String to State 
    } 
    return states; 
} 
+0

お返事ありがとうございます。私はこれを私のコードに追加しようとしましたが、今度はforループのエラーラインを取得しようとしています:クラス状態の**コンストラクタ状態は与えられた型には適用できません** コード行: 'states [i] =新しい状態(strings [i]); ' – John

+0

これは、このコンストラクタ(' State(String) ')が存在しないためです。どのコンストラクタを使用する必要があるかを決定するのはあなたの上にありますが、私の例ではどのようにしたら良いかを知ることができます;) – Lino

関連する問題