Lire .fichier txt en Tableau 2D

Il ya un peu de ces sujets là, mais ce problème a une légère torsion qui le rend différent.

Je me concentre seulement sur la moitié d'un problème plus vaste. Je suis sûr que beaucoup d'entre vous sont au courant des carrés magiques problème.

Invite:

Supposons un fichier avec des lignes et des nombres sur chaque ligne, comme la place indiquée. Écrire un programme qui lit les infos dans un tableau à deux dimensions d'entiers. Le programme doit déterminer si la matrice a est un carré magique ou non.

Solution De Travail:

public static int[][] create2DIntMatrixFromFile(String filename) throws Exception {
int[][] matrix = {{1}, {2}};

File inFile = new File(filename);
Scanner in = new Scanner(inFile);

int intLength = 0;
String[] length = in.nextLine().trim().split("\\s+");
  for (int i = 0; i < length.length; i++) {
    intLength++;
  }

in.close();

matrix = new int[intLength][intLength];
in = new Scanner(inFile);

int lineCount = 0;
while (in.hasNextLine()) {
  String[] currentLine = in.nextLine().trim().split("\\s+"); 
     for (int i = 0; i < currentLine.length; i++) {
        matrix[lineCount][i] = Integer.parseInt(currentLine[i]);    
            }
  lineCount++;
 }                                 
 return matrix;
}


public static boolean isMagicSquare(int[][] square) {

  return false;
}

Voici mon (ancien) du code pour lire des informations à partir d'un fichier texte dans un tableau 2D:

public static int[][] create2DIntMatrixFromFile(String filename) throws Exception {
    int[][] matrix = {{1}, {2}};
    File inFile = new File(filename);
    Scanner in = new Scanner(inFile);
    in.useDelimiter("[/n]");

    String line = "";
    int lineCount = 0;

    while (in.hasNextLine()) {
        line = in.nextLine().trim();
        Scanner lineIn = new Scanner(line);
        lineIn.useDelimiter("");

        for (int i = 0; lineIn.hasNext(); i++) {
            matrix[lineCount][i] = Integer.parseInt(lineIn.next());
            lineIn.next();
        }

        lineCount++;
    }

    return matrix;
}

public static boolean isMagicSquare(int[][] square) {
    return false;
}

Et voici le fichier texte que je lis de. Il est en forme de 9x9 tableau 2D, mais le programme doit accueillir un tableau d'ambigu taille.

  37  48  59  70  81   2  13  24  35 
  36  38  49  60  71  73   3  14  25 
  26  28  39  50  61  72  74   4  15 
  16  27  29  40  51  62  64  75   5 
   6  17  19  30  41  52  63  65  76 
  77   7  18  20  31  42  53  55  66 
  67  78   8  10  21  32  43  54  56 
  57  68  79   9  11  22  33  44  46 
  47  58  69  80   1  12  23  34  45 

Il y a deux espaces de procéder chaque ligne de but.

Avant que j'ai le problème exact, c'est un des devoirs de modèle afin que la méthode de déclaration et initialisation d'une variable a été pré-déterminé.

Je ne suis pas positif que la méthode même correctement crée un Tableau 2D à partir du fichier parce que je ne peux pas l'exécuter encore. Le problème est que pour une raison "matrix" a été initialisé à 1 colonne et 2 lignes. Pour quelle raison, je ne suis pas sûr, mais dans le but de remplir un tableau avec les numéros à partir du fichier que j'ai besoin de créer un tableau 2D avec des dimensions égal au nombre de valeurs dans une ligne.

J'avais déjà écrit le code pour créer un nouveau tableau 2D

int[line.length()][line.length()]

mais il a créé un 36x36 tableau car c'est le nombre de caractères individuels sont sur une seule ligne. J'ai le sentiment que c'est aussi simple que de boucle à travers la première ligne et d'avoir un compteur de garder une trace de chaque séquence de chiffres séparés par un zéro.

Pour moi, cette solution semble trop inefficace et coûteuse en temps, juste pour trouver les dimensions de la nouvelle matrice. Quelle est la meilleure façon d'accomplir cette? Sans l'aide de ArrayLists que je dois réécrire ce programme après l'utilisation de ArrayLists.

  • Pour obtenir les nombres sur une ligne, vous pouvez simplement appeler line.split(" ");.
InformationsquelleAutor BimmerM3 | 2014-03-04