Question

Quand je dis une grille, je veux dire un tableau multidimensionnel. Je veux parce que je fais un jeu 2D et je veux être en mesure de charger les niveaux de fichiers texte de données. Disons que, par exemple, j'ai ce tableau 2D level[3][3]. Une simple carte de 3x3. Et j'ai aussi un fichier texte qui se lit comme suit:

1 2 3 
4 5 6
7 8 9

Dans c ++, je peux simplement faire:

for (x=0; i<map_width; x++)
{
    for (y=0; y<map_height; y++)
    {
        fscanf(nameoffile, "%d", map[x][y]);
    }
}

Et qui placerait tout le contenu du fichier texte en conséquence dans le tableau. POURTANT Je ne sais pas comment faire en java. Y at-il sorte d'équivalent qui vient placer les données dans le tableau en conséquence? Je sais déjà sur la classe du scanner, mais je ne sais pas comment l'utiliser. J'ai cherché google, en vain. Il n'explique pas grand-chose. Aide s'il vous plaît! Plus précisément, je veux savoir comment numériser le fichier et mettre ce int il lit la PLACE APPROPRIÉE dans le tableau.

Mon code actuel est cela, cependant, il jette un NoSuchElementException:

public void loadMap() {
    Scanner sc = null;
    try {
        sc = new Scanner(inputmap);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            map[x][y] = sc.nextInt();
        }
    }

Où InputMap est le fichier, map[][] est une grille de données pour chacune des tuiles sur la carte et la largeur et la hauteur sont pré-spécifiée dans un constructeur.

Était-ce utile?

La solution

Votre question est très inutile en ce qui concerne la façon dont vos fichiers texte seront effectivement mises en forme. Par exemple,

123 
456
789

est très différent de

1 2 3
4 5 6
7 8 9

et, en outre, vous ne l'avez pas mentionné si elles sont toujours ints, ou

1 2 3
4 5 6
a b c

etc. Si vous nous avez donné une description précise de ce qui se passe exactement dans ces fichiers texte que nous pourrions vous aider plus. Le mieux que je peux faire est de vous montrer comment utiliser le scanner pour farcir entrée en général:

La boucle serait similaire à Java, mais vous devez initialiser un objet Scanner.

Scanner input = new Scanner(myFile); //whatever file is being read

for (x=0; i<map_width; x++)
{
    for (y=0; y<map_height; y++)
    {
        int nextTile = input.nextInt(); //reads the next int
        // or
        char nextTile = input.nextChar(); //reads the next char
    }
}

Au-delà, il me faudrait en savoir plus sur ce qui est réellement à l'intérieur de ces fichiers d'entrée.

EDIT:

Je copiais votre boucle directement à partir de votre code, mais vous pouvez échanger l'intérieur et extérieur pour les boucles. Ne doit pas être la largeur du paramètre intérieur (lecture de gauche à droite)?

Autres conseils

En Java, il fonctionne de manière similaire -. Créer un objet java.util.Scanner pour votre fichier et utiliser la méthode de la nextInt au lieu de fscanf

Si vous ne connaissez pas les dimensions de la grille

    static int[][] readFile(String filename) {
    try {
        File textfile = new File (GridSearchTest.class.classLoader.getResource(filename).toURI());
        Scanner fileScanner = new Scanner(textfile);
        int size = Integer.parseInt(fileScanner.next());
        String line = fileScanner.nextLine();
        int[][] grid = new int [size][size];
        int i = 0;  int j = 0;

        while (fileScanner.hasNextLine()) {
            line = fileScanner.nextLine();
            System.out.println (line);
            Scanner lineScanner = new Scanner(line);
            while (lineScanner.hasNext()) {
                grid[i][j] = Integer.parseInt(lineScanner.next());
                i++;
            }
            lineScanner.close();
            i=0;
            j++;
        }
        fileScanner.close();

        return grid;

    } catch (IOException e) {
        System.out.println("Error reading file: "+ e.getMessage());
        System.exit(0);
    };
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top