2016-11-13 15 views
1

に複数のデータ型の配列リストの作成:http://pastebin.com/WriQcuPsは、私が働いているファイルの一部のJava

現在、私は、人口、緯度、経度文字列を作るために持っていたか、他の私は希望を取得しないでしょう出力。私は彼らがint、double、およびdoubleの順番でそれらを望んでいます。

public class City { 
    String countrycode; 
    String city; 
    String region; 
    String population; 
    String latitude; 
    String longitude; 

    public City (String countrycode, String city, String region, String population, String latitude, String longitude) { 
     this.countrycode = countrycode; 
     this.city = city; 
     this.region = region; 
     this.population = population; 
     this.latitude = latitude; 
     this.longitude = longitude; 
    } 

    public String toString() { 
     return this.city + "," + this.population 
       + "," + this.latitude + "," 
       + this.longitude; 
    } 
} 

私はそれは私が配列リストを作成する方法とは何かを持っている疑いがあります。リストの要素のいくつかが異なるタイプになるようにする方法はありますか?私はArrayList<City>に変更して、Cityクラスのデータ型を変更しようとしましたが、まだそれは私に多大なエラーを与えました。

public class Reader { 

    In input = new In("file:world_cities.txt"); 
    private static City cityInfo; 

    public static void main(String[] args) { 
     // open file 
     In input = new In("world_cities.txt"); 
     input = new In("world_cities.txt"); 
     try { 
     // write output to file 
     FileWriter fw = new FileWriter("cities_out.txt"); 
     PrintWriter pw = new PrintWriter(fw); 

     int line = 0; 

     // iterate through all lines in the file 
     while (line < 47913) { 

      // read line 
      String cityLine = input.readLine(); 

      // create array list 
      ArrayList<String> cityList = new ArrayList<String>(Arrays.asList(cityLine.split(","))); 

      // add line to array list 
      cityList.add(cityLine); 

      // increase counter 
      line += 1;  

      // create instance 
      cityInfo = new City(cityList.get(0), cityList.get(1), cityList.get(2), cityList.get(3), cityList.get(4), cityList.get(5)); 
      System.out.println(cityInfo); 

      // print output to file 
      pw.println(cityInfo); 
     } 

     // close file 
     pw.close(); 
     } 

     // what is printed when there is an error when saving to file 
     catch (Exception e) { 
      System.out.println("ERROR!"); 
     } 

     // close the file 
     input.close(); 
    } 
} 

答えて

0

文字列値が新しいCityオブジェクトに渡される前に解析することができます。その後、City内のコンストラクタと変数をint、double、およびdoubleに変更することができます。

int pop = Integer.parseInt(cityList.get(3)); 
double latitude = Double.parseDouble(cityList.get(4)); 
double longitude = Double.parseDouble(cityList.get(5)); 
cityInfo = new City(cityList.get(0), cityList.get(1), cityList.get(2), pop, latitude, longitude); 
1

次のようにリストを宣言する場合は、あなたがそれに任意の参照型のインスタンスを置くことができます。

List<Object> list = new ArrayList<>(); 

しかし、欠点は、静的な型、リストから要素を取得するときにということですの要素はObjectとなり、必要な型にキャストする必要があります。

Listintまたはdoubleを入れることはできません。プリミティブ型は参照型ではなく、List APIでは要素が参照型のインスタンスである必要があります。対応するラッパー・タイプを使用する必要があります。すなわちIntegerDoubleです。あなたのコードの多くのを見てみると


、私はこの発見:あなたはオブジェクトがIntegerDoubleのどちらかであるList<Object>にリストを変更した場合、あなたはあなたのを構築することができません

ArrayList<String> cityList = 
    new ArrayList<String>(Arrays.asList(cityLine.split(","))); 

をそのようなリスト。

実際、これを見ると、リストが一切必要ないと思うほどです。

// read line 
    String cityLine = input.readLine(); 

    String[] parts = cityLine.split(","); 
    // increase counter 
    line += 1;  

    // create instance 
    cityInfo = new City(parts[0], parts[1], parts[2], 
         Integer.parseInt(parts[3]), 
         Double.parseDouble(parts[4]), 
         Double.parseDouble(parts[5])); 

お知らせ:あなたはこのような何かをやるべきすべてでそこにはListはありません!

+0

驚くばかりにそれを修正します!よく働く。どうもありがとうございます! – dguerrero

0

あなたが定義したCityクラスを見ると、メンバーは異なるプリミティブデータ型のものです。ファイルを読み込んでCityを作成するときは、コンストラクタのように、定義されたデータ型のコンストラクタパラメータを渡す必要があります。

は、以下のようにあなたのCityクラスを変更します。

public class City { 
    String countrycode; 
    String city; 
    String region; 
    int population; 
    double latitude; 
    double longitude; 
... 

は、以下のことを試してみてください。

cityInfo = new City(cityList.get(0), cityList.get(1), cityList.get(2), Integer.parseInt(cityList.get(3)), Double.parseDouble(cityList.get(4)), Double.parseDouble(cityList.get(5))); 

これは、文字列をintに変換しますダブルCityクラスが望むように。

0

私はノーと信じていますが、あなたはこのような何か行うことができます。この

public class City { 
String countrycode; 
String city; 
String region; 
String population; 
double latitude; 
double longitude; 

public City (String countrycode, String city, String region, String population, double latitude, double longitude) { 
    this.countrycode = countrycode; 
    this.city = city; 
    this.region = region; 
    this.population = population; 
    this.latitude = latitude; 
    this.longitude = longitude; 
} 

public String toString() { 
    return this.city + "," + this.population 
      + "," + this.latitude + "," 
      + this.longitude; 
} 
} 

public class Reader { 

In input = new In("file:world_cities.txt"); 
private static City cityInfo; 

public static void main(String[] args) { 
    // open file 
    In input = new In("world_cities.txt"); 
    input = new In("world_cities.txt"); 
    try { 
    // write output to file 
    FileWriter fw = new FileWriter("cities_out.txt"); 
    PrintWriter pw = new PrintWriter(fw); 

    int line = 0; 

    // iterate through all lines in the file 
    while (line < 47913) { 

     // read line 
     String cityLine = input.readLine(); 

     // create array list 
     ArrayList<String> cityList = new ArrayList<String>(Arrays.asList(cityLine.split(","))); 

     // add line to array list 
     cityList.add(cityLine); 

     // increase counter 
     line += 1;  

     // create instance 
     cityInfo = new City(cityList.get(0), cityList.get(1), cityList.get(2), cityList.get(3), Doule.parseDouble(cityList.get(4)), Doule.parseDouble(cityList.get(5))); 
     System.out.println(cityInfo); 

     // print output to file 
     pw.println(cityInfo); 
    } 

    // close file 
    pw.close(); 
    } 

    // what is printed when there is an error when saving to file 
    catch (Exception e) { 
     System.out.println("ERROR!"); 
    } 

    // close the file 
    input.close(); 
} 
} 
0

行うことができます。

READERのCLASS

import java.io.FileWriter; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.Arrays; 

public class Reader { 

    In input = new In("file:world_cities.txt"); 
    private static City cityInfo; 

    public static void main(String[] args) { 
     // open file 
//  In input = new In("world_cities.txt"); 
//  input = new In("world_cities.txt"); 
     try { 
     // write output to file 
     FileWriter fw = new FileWriter("cities_out.txt"); 
     PrintWriter pw = new PrintWriter(fw); 

     int line = 0; 

     // iterate through all lines in the file 
     while (line < 47913) { 

      // read line 
      String cityLine = input.readLine(); 

      // create array list 
      ArrayList<String> cityList = new ArrayList<String>(Arrays.asList(cityLine.split(","))); 

      // add line to array list 
      cityList.add(cityLine); 

      // increase counter 
      line += 1;  

      // create instance 
      cityInfo = new City(cityList.get(0), cityList.get(1), cityList.get(2), Integer.parseInt(cityList.get(3)), Double.parseDouble(cityList.get(4)), Double.parseDouble(cityList.get(5))); 
      System.out.println(cityInfo); 

      // print output to file 
      pw.println(cityInfo); 
     } 

     // close file 
     pw.close(); 
     } 

     // what is printed when there is an error when saving to file 
     catch (Exception e) { 
      System.out.println("ERROR!"); 
     } 

     // close the file 
     input.close(); 
    } 
} 

CITYのCLASS

public class City { 
    String countrycode; 
    String city; 
    String region; 
    int population; 
    double latitude; 
    double longitude; 

    public City (String countrycode, String city, String region, int population, double latitude, double longitude) { 
     this.countrycode = countrycode; 
     this.city = city; 
     this.region = region; 
     this.population = population; 
     this.latitude = latitude; 
     this.longitude = longitude; 
    } 

    public String toString() { 
     return this.city + "," + this.population 
       + "," + this.latitude + "," 
       + this.longitude; 
    } 
} 
+0

これは不思議になりました、ありがとう! – dguerrero

+0

あなたは大歓迎です!お気軽に受け入れてください! – BlackHatSamurai

0

リストの一部の要素が異なるタイプの になるようにする方法はありますか?

ではなく、あなたがString.split()とそれを移入している場合、異なるタイプの要素を持つListを持つことが可能である - それはString[]を返すため。

スティーブンあなたがList<Object>を使用することができ、提案のようにあなたが...例えば、

Integer population = Integer.valueOf("1234567"); // Returns 1234567 as an Integer, which can autobox to an int if you prefer 
0

をあなたが戻ってあちこちString.split() Javaのプリミティブ型のラッパーにvalueOf方法を用いて所望の種類に入る文字列を変換することができ、それに加えて、StringをCityに渡すこともできますが、City自体にデータ型を処理させることができます。

public class City { 
    String countrycode; 
    String city; 
    String region; 
    int population; 
    double latitude; 
    double longitude; 

    public City (String countrycode, String city, String region, String population, String latitude, String longitude) { 
     this.countrycode = countrycode; 
     this.city = city; 
     this.region = region; 
     try{ 
      this.population = Integer.parseInt(population); 
      this.latitude = Double.parseDouble(latitude); 
      this.longitude = Double.parseDouble(longitude); 
     }catch(Exception e){ 
      e.printStacktrace(); 
     } 

    } 

    public String toString() { 
     return this.city + "," + this.population 
       + "," + this.latitude + "," 
       + this.longitude; 
    } 
} 

Btwは、Inを2回開始しました。

In input = new In("world_cities.txt"); 
input = new In("world_cities.txt"); 

In input = new In("world_cities.txt"); 
+0

おっと!いいキャッチ! – dguerrero

関連する問題