2014-02-28 34 views
0

我有代碼。有些名字是波蘭語,但我認爲這不是問題。 在此代碼中,我創建隨機填充的數組,將其寫入.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(); 
    } 

} 

} 

回答

0

正確的答案是,我不得不使用useLocale(Locale.English)方法我的掃描儀對象。我不知道之前設置了哪種語言環境,但使用英語時,一切都運行平穩。 我將這個答案發布到我自己的文章中,因爲可能這對未來某人會有幫助。