2014-02-28 1 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) 메서드를 사용해야한다는 것입니다. 어떤 로케일이 전에 설정되었는지는 모르지만 영어로 모든 것이 원활하게 실행됩니다. 나는 미래에 누군가에게 도움이되기 때문에 내 자신의 게시물에이 답변을 게시합니다.

관련 문제