为什么Scanner说没有双重归还?

时间:2014-02-28 20:33:00

标签: file double

我有代码。有些名字是波兰语,但我认为这不是问题。 在这段代码中,我创建了随机填充的数组,将其写入.txt文件,然后使用从该文件读取的数据创建另一个数组。不幸的是,在静态方法hasNextDouble()方法返回false并且我的数组填充了0.0的。为什么会这样?如果我通过记事本打开这个.txt文件,它包含可以读取的双打。哪里有问题?

package algorytmyz1;
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.PrintWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Random; 
import java.util.Scanner; 

class Tablica {
private int w;
private int k;
private double[][] tab;
//konstruktor
public Tablica(int w,int k) {
    this.w = w;
    this.k = k;
    tab = new double[w][k];
    Wypelnij();
    Zapisz();
}

//wypelnia macierz liczbami od 0 do 9
private void Wypelnij(){

    Random rand = new Random();

    for(int i=0; i<w; i++)
        for(int j=0; j<k; j++)
                 //generuje pseudolosowe liczby rzeczywiste między 0 a 10
            tab[i][j]=rand.nextDouble() * 10;
}

private void Zapisz() {
    try (PrintWriter fout = new PrintWriter("macierz1.txt"))
    {
        fout.println("Macierz:");
        fout.println(w);
        fout.println(k);
        for (int i=0; i<w; i++)
        {
            for (int j=0; j<k; j++)
            {
                fout.print(tab[i][j] + "  ");
            }
            fout.println();
        }
    }
    catch (IOException e) {
        System.out.println("Błąd wejścia/wyjścia.");
    }
}

}

public class AlgorytmyZ1 {

public static void main(String[] args) throws FileNotFoundException {
    int w,k;

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    //wprowadzenie liczby wierszy i kolumn macierzy
    try {
    System.out.println("Podaj liczbę wierszy:");
    w = Integer.parseInt(br.readLine());
    System.out.println("Podaj liczbę kolumn:");
    k = Integer.parseInt(br.readLine());

    Tablica macierz = new Tablica(w,k);
    }
    catch (IOException e) {
        System.out.println(e);
    }

    WczytajWyswietl();
}

public static void WczytajWyswietl() throws FileNotFoundException {
    int w, k;
    String naglowek;
    double[][] tablica;

    File file = new File("macierz1.txt");
    Scanner fin = new Scanner(file);

    naglowek = fin.nextLine();
    w = Integer.parseInt(fin.nextLine());
    k = Integer.parseInt(fin.nextLine());

    tablica = new double[w][k];
    while (fin.hasNextDouble())
    {
        for (int i=0; i<w; i++)
        {
            for (int j=0; j<k; j++)
                tablica[i][j] = fin.nextDouble();
        }
    }

    System.out.println(naglowek);
    System.out.println("Liczba wierszy: " + w);
    System.out.println("Liczba kolumn: " + k);
    for (int i = 0; i<w; i++)
    {
        for (int j=0; j<k; j++)
        {
            System.out.print(tablica[i][j] + " ");
        }
          System.out.println();
    }

}

}

1 个答案:

答案 0 :(得分:0)

正确的答案是我必须在我的扫描仪对象上使用useLocale(Locale.English)方法。我不知道之前设置了哪个Locale,但是英语一切顺利。 我将这个答案发布到我自己的帖子中,因为这可能会对将来的某些人有所帮助。