0

したがって、次のようなアイテムを含むテキストファイルがあります。

350279 1 11:54 107.15 
350280 3 11:55 81.27 
350281 2 11:57 82.11 
350282 0 11:58 92.43 
350283 3 11:59 86.11

これらの値から配列を作成しようとしています。各行の最初の値は配列にあり、各行の 2 番目の値は配列にあるなどです。

これは私が現在持っているすべてのコードであり、その方法を理解できないようです。

package sales;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Sales {

    public static void main (String[] args) throws FileNotFoundException {

        Scanner reader = new Scanner(new File("sales.txt"));
        int[] transID = new int[reader.nextInt()];
        int[] transCode = new int[reader.nextInt()];
        String[] time = new String[reader.next()];
        double[] trasAmount = new double[reader.hasNextDouble()];


    }
}
4

5 に答える 5

1

配列のサイズは固定されているため、この方法で配列を作成するのは困難です...配列の要素数を知る必要があります。代わりにa を使用すればList、事前に要素数を知る必要はありません。これを試してください(注:ここではエラーチェックはありません!):

public static void main (String[] args) throws FileNotFoundException {
    Scanner reader = new Scanner(new File("sales.txt"));
    List<Integer> ids = new LinkedList<>();
    List<Integer> codes = new LinkedList<>();
    List<String> times = new LinkedList<>();
    List<Double> amounts = new LinkedList<>();

    // Load elements into Lists. Note: you can just use the lists if you want
    while(reader.hasNext()) {
        ids.add(reader.nextInt());
        codes.add(reader.nextInt());
        times.add(reader.next());
        amounts.add(reader.nextDouble());
    }

    // Create arrays
    int[] idArray = new int[ids.size()];
    int[] codesArray = new int[codes.size()];
    String[] timesArray = new String[times.size()];
    double[] amountsArray = new double[amounts.size()];        

    // Load elements into arrays
    int index = 0;
    for(Integer i : ids) {
        idArray[index++] = i;
    }
    index = 0;
    for(Integer i : codes) {
        codesArray[index++] = i;
    }
    index = 0;
    for(String i : times) {
        timesArray[index++] = i;
    }
    index = 0;
    for(Double i : ids) {
        amountsArray[index++] = i;
    }
}
于 2013-05-02T17:42:37.900 に答える
0

入力をチェックするには while ループが必要です。すべての入力が整数であるとは限らないため、次のようにすることができます。

while(reader.hasNextLine()){ //checks to make sure there's still a line to be read in the file
    String line=reader.nextLine(); //record that next line
    String[] values=line.split(" "); //split on spaces
    if(values.length==4){
         int val1=Integer.parseInt(values[0]); //parse values
         int val2=Integer.parseInt(values[1]);
         String val3=values[2];
         double val4=Double.parseDouble(values[3]);
         //add these values to your arrays. Might have to "count" the number of lines on a first pass and then run through a second time... I've been using the collections framework for too long to remember exactly how to work with arrays in java when you don't know the size right off the bat.
    }
}
于 2013-05-02T17:38:04.683 に答える