2016-04-02 11 views
2

私は最初のアンドロイドアプリを書いているので、ファイルから配列にデータを取得する最善の方法について混乱している初心者です。私は、リソースraw txtファイルからデータを取得し、配列またはArrayListに格納しようとしているので、Excelのスタイルのvlookupを実行できます。データファイル(data_file.txt)は、サイズ及びコラム一つに28,2あるINTおよび列2は、このような空間によって分離フロート有した:ファイルを異なるデータ型の多次元配列に読み込みますか?

  • 500 -1.3
  • 1000年-1.6
  • 10000 -1.7

私は1000の値を調べて-1.6を取得したいと考えています。 まず、多次元オブジェクト配列またはArrayListを使用する必要がありますが、どちらを使用するかは重要ですか?私はデータ型floatの2番目の列を保持する必要があり、可能であれば最初の列のデータ型をint型に保ちたいと考えています。

私はコードに関するヒントや、研究する必要のある方法を探しています。

乾杯、

エアフィックス


更新4月3

私はマップは、私が欲しいものではありません確信しています。私は以下のコードで作業してきました。 Scanner scan = new Scanner(new FileReader(file));を除いて動作すると思われますが、 "変数FileReader(int)をコンストラクタで解決できません。実際には例のように単純なtxtファイルであることは明らかです。完了するために助けてくれてありがとう:)

public void fuelIndex(){ 


    Object file = (getResources().getIdentifier("fuel_index", 
       "raw", getPackageName())); 
    Scanner scan = new Scanner(new FileReader(file)); 


    Object[][] fuelIndexData = new String[28][2]; 


    int i = 0; 
    while(scan.hasNextLine()){ 
     fuelIndexData[i] = scan.nextLine().split("\\s+"); 
     i++; 
    } 
    //loops through the file and splits on any space 

    for (int row = 0; row < fuelIndexData.length; row++) { 
     for (int col = 0; col < fuelIndexData[0].length; col++) { 
      if(fuelIndexData[row][col] != null){ 
       System.out.print(fuelIndexData[row][col] + " "); 
      } 
     } 
     if(fuelIndexData[row][0] != null){ 
      System.out.print("\n"); 
     } 
    } 

} 
+0

あなただけ多分あなたはHashMapを使用することができ、キーと値を持っている場合。 – noumenal

答えて

1

これは、代わりにListMapのためのユースケースのように思える注意:Javaでは2つの浮動小数点データ型がありますが、あなたのように値を格納したいと述べました。浮動小数点数ですが、浮動小数点表現を使用してデータを格納することを意味すると仮定していますので、ここではDoubleを使用しているとします。 Mapは、 0 Integerキーをを使用して値1.6を得るのと同じようにDouble値に設定します。

ここで実証するいくつかのコードです:

Map<Integer,Double> map = new HashMap<>(); 
    map.put(1000, 1.6); 
    map.put(500, 1.3); 
    map.put(10000, 1.7); 

    System.out.println(map.get(10000)); 
    System.out.println(map.get(99)); 

これは次の出力を生成します。それは10000キーの値であるため、

1.7 
null 

1.7は、最初の呼び出しで返されました。 9930がkeySetにないため、nullが2番目の呼び出しで返されました。 JavaDoc for the Map interfaceにはさらに多くの詳細があります。

+0

このようなマッピングが機能するかどうか考える必要があります。私はedittextフィールドからユーザー入力を受け取ります。このユーザ入力は、整数列のデータセット範囲内の任意の整数であってもよく、必ずしも「インデックス」の1つではない。すべての浮動小数点値は1から500,501,1000などの整数値で同じです。私はループを使用してedittext入力値がどの範囲に収まっているかを確認し、対応する浮動小数点を変数に代入します。私の他のプログラミング経験(非オブジェクトベース)から、配列がそれを処理する方法になると思われます。 – Airfix

1

浮動小数点値の識別に整数が使用されている場合は、HashMapを使用する必要があります。リスト内の位置でインデックスを作成し、整数値に重複がある場合は、ArrayListオブジェクト両方の値を格納するContainerObject

HashMapの

Map<Integer, Float> myMap = new HashMap<Integer, Float>(); 
myMap.put(500, -1.3f); 
myMap.put(1000, -1.6f); 
myMap.put(10000, -1.7f); 

ArrayListの

List<ContainerObject> myList = new ArrayList<ContainerObject>(); 
myList.add(new ContainerObject(500, -1.3f)); 
myList.add(new ContainerObject(1000, -1.6f)); 
myList.add(new ContainerObject(1000, -1.7f)); 
関連する問題