2017-09-22 12 views
0

J'ai un problème avec mon code qui compte le nombre de colonnes incorrectement. Je dois lire dans un fichier texte l'information concernant ce que je suis censé avoir comme dimensions pour une matrice, mais il semble que je rencontre un problème avec la colonne. Le premier chiffre est supposé être le nombre de lignes dans la matrice.Définition des lignes et des colonnes dans un tableau

Qu'est-ce que le fichier d'entrée:

3 
8 5 -6 7 
-19 5 17 32 
3 9 2 54 

Voici le code qui détermine les informations:

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

public class Test { 

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

     File f = new File("testwork.txt"); 
     Scanner in = new Scanner(f); 
     int numRows = in.nextInt(); 

     ArrayList<Integer> columnCheck = new ArrayList<Integer>(); 

     while (in.hasNextLine()) { 
     columnCheck.add(in.nextInt()); 
     break; 
     } 

     int numColumns = columnCheck.size(); 

     System.out.println(numRows, numColumns); 
     in.close(); 
    } 

} 

La sortie que je reçois de ce code est 3 (Nombre de lignes) 12 (le nombre de colonnes). Évidemment, c'est faux et je sais que le problème est que la boucle while ne cesse de se répéter pour vérifier combien de nombres sont dans la boucle, mais je n'arrive pas à comprendre comment le réparer. Que dois-je changer avec la boucle while pour que le programme ne prenne que 4 colonnes?

+0

ne peut pas confirmer: numColumns est 1, parce que vous cassez – Anona112

Répondre

0

Essayez d'utiliser

while (in.hasNext()) {...} 

je crois que le problème peut être que hasNextLine() lit sur la touche entrée « \ n », qui est la raison pour laquelle il est en train de lire tous les numéros au lieu d'une ligne. Vous aurez besoin d'une autre vérification après que la ligne soit complétée avec in.hasNextLine() pour vous assurer d'avoir la ligne suivante dans le fichier texte.

1

C'est ce que vous essayez réellement d'atteindre

public static void main(String[] args) throws FileNotFoundException { 
    File f = new File("testwork.txt"); 
    Scanner in = new Scanner(f); 
    int numRows = in.nextInt(); 

    ArrayList<Integer> columnCheck = new ArrayList<Integer>(); 
    int numColumns = 0; 

    while (in.hasNextLine()) { 
     Scanner s2 = new Scanner(in.nextLine()); 
     numColumns++; 

     while (s2.hasNextInt()) { 
      columnCheck.add(s2.nextInt()); 
     } 
    } 

    System.out.println(numRows, numColumns); 
    in.close(); 
} 
0

Cette boucle while est faux:

while (in.hasNextLine()) { 
    columnCheck.add(in.nextInt()); 
    break; 
} 

d'abord obtenir la ligne et puis stocker chacun des entiers dans le ArrayList.

le faire comme ceci:

while (in.hasNextLine()) { 
    String column = in.nextLine(); 
    String columnArr[] = column.split("\\s+"); // split it by space 
    System.out.println("Column Numbers:" + columnArr.length()); 
    break; 
}