2014-02-28 29 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)方法我的扫描仪对象。我不知道之前设置了哪种语言环境,但使用英语时,一切都运行平稳。 我将这个答案发布到我自己的文章中,因为可能这对未来某人会有帮助。