2-й массив неправильно вменяется - PullRequest
1 голос
/ 05 декабря 2011

У меня проблемы с получением ввода для двумерного массива для назначения.В основном я должен создать ошибку, которая ползет по экрану и пишет ASCII-изображение нашего имени.Мы должны получить входные данные из текстового файла, поэтому я решил, что лучше всего будет создать двумерный массив для каждого символа в файле и определить, что он делает, в зависимости от того, какой символ находится в каждом месте.Однако это всегда показывает, что двумерный массив имеет одинаковое содержимое (показано ниже)

[[C@b1c5fa

Ниже приведен пример класса, класса тестера и пример файла txt.Как я могу заставить его показать правильный ввод?

Класс ошибок

import java.io.*;
import java.util.*;

public class Bug
{  

   private int startingPoint;
   private char mrBug;
    private char placeholder;
    private int postition;
    private int matrixLength;
    private int matrixRows;
    private String lineGet;
    private String txtFile;
    private char[][] Data = new char[3][];


   /**
      Constructs a computer class with title, days, time and room
   */
   public Bug(int initialPosition, char bug, String inputFile)
   {   
     startingPoint = initialPosition;
     mrBug = bug; 
      txtFile = inputFile;
   }


          public void matrixPrinter()
   {   
    for(int row = 0; row < Data.length; row++)
        {
            for(int col = 0; col < Data[row].length; col++)
            {
            System.out.print(Data[row][col]);
            }
            System.out.print("\n");
        }

   }//End of matrixBuilder Method

    public void matrixBuilder()
   {   
        Scanner in = new Scanner(txtFile);
        matrixRows = 0;
        while (in.hasNextLine())
            {
                lineGet = in.next();
                matrixLength = lineGet.length();
                Data[matrixRows] = new char[matrixLength];
                for(int i = 0; i < matrixLength; i++)
                {
                    placeholder = lineGet.charAt(i);
                    Data[matrixRows][i]= placeholder;

                }//End of For
                matrixRows++;
            }//End of While
        in.close();
   }//End of matrixBuilder Method

    /**
      Gets the title
      @return the title
   */
    public void turn()
   {   
        //return title;

   }

   public void move()
   {   
      // your work here
   }

   /**
      Gets Postition
      @return the postition
   */
   public int getPostion()
   {   
    return postition;

   }
}

http://pastebin.com/g9LWFyXQ

Тестер ошибок

import java.util.*;
import java.io.*;

public class BugTester
{
   public static void main(String[] args)
   {
        int start = 0;
       char bugSymbol = 'a';
        String inputFile = "peter.txt";
      Bug crawler1 = new Bug(start,bugSymbol,inputFile);
          crawler1.matrixBuilder();
        crawler1.matrixPrinter();

   }
}

TXT-файл:

/#****#****#*****#****#****#****#\
/#*##*#*######*###*####*##*#*##*#\
/#****#****###*###****#****####*#\
/#*####*######*###*####*#*#####*#\
/#*####****###*###****#*##*####*#\

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

То, что вы видите, является внутренним представлением объекта массива (его «сигнатура»).

Если вы хотите напечатать массив, вам нужно перебрать его элементы.Поскольку это 2D, просто используйте два вложенных for цикла.

Другие проблемы:

  • Вы инициализируете свой Scanner с String, но вы хотите, чтобычтобы инициализировать его с File.Вам нужно будет создать новый объект File с вашим именем файла и передать его конструктору Scanner, позаботившись о возможных исключениях
  • В вашем файле четыре строки, но вы только массив Dataимеет три строки.Либо увеличьте размер массива, либо выйдите из цикла ввода после того, как вы прочитали количество строк, которые может содержать массив.
1 голос
/ 05 декабря 2011

Первое: Одна ошибка в вашем matrixBuilder() методе.

Вы запускаете Scanner, передавая имя вашего файла конструктору:

Scanner in = new Scanner(txtFile);

Итакон не читает содержимое файла при вызове:

in.next();

Переменная lineGet имеет значение "peter.txt".Очевидно, это не то, что вам нужно.

Вам нужно инициализировать сканер следующим образом:

    Scanner in = null;
    try {
        in = new Scanner(new FileInputStream(txtFile));
    } catch (FileNotFoundException ex) {
        // work up exception
    }

Или просто

public void matrixBuilder() throws FileNotFoundException {
    Scanner in = new Scanner(new FileInputStream(txtFile));
//...
}

Секунда: неверный исходный размер вашего массива данных:

private char[][] Data = new char[3][];

Ваш файл "peter.txt" содержит не менее 5 строк.Итак, начальный размер вашего массива данных также должен быть 5 .

После исправления этой ошибки вы должны получить желаемый результат.

Надеюсь, это поможет.

ОБНОВЛЕНИЕ:

Полный рабочий код:

Bug.java

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Bug {
    private int startingPoint;
    private char mrBug;
    private char placeholder;
    private int postition;
    private int matrixLength;
    private int matrixRows;
    private String lineGet;
    private String txtFile;
    private char[][] Data = new char[5][];

    /**
    Constructs a computer class with title, days, time and room
     */
    public Bug(int initialPosition, char bug, String inputFile) {
        startingPoint = initialPosition;
        mrBug = bug;
        txtFile = inputFile;
    }

    public void matrixPrinter() {
        System.out.println("Data:");

        for (int row = 0; row < Data.length; row++) {
            for (int col = 0; col < Data[row].length; col++) {
                System.out.print(Data[row][col]);
            }
            System.out.print("\n");
        }

    }//End of matrixBuilder Method

    public void matrixBuilder() throws FileNotFoundException {
        Scanner in = new Scanner(new FileInputStream(txtFile));

        matrixRows = 0;
        // We should also check that the number of lines in the file 
        // doesn't exceed the Data array size.
        while (in.hasNextLine() && matrixRows < Data.length) {
            lineGet = in.next();
            System.out.println("line["+ matrixRows + "]:" + lineGet);
            matrixLength = lineGet.length();
            Data[matrixRows] = new char[matrixLength];
            for (int i = 0; i < matrixLength; i++) {
                placeholder = lineGet.charAt(i);
                Data[matrixRows][i] = placeholder;

            }//End of For
            matrixRows++;
        }//End of While
        in.close();
    }//End of matrixBuilder Method

    /**
    Gets the title
    @return the title
     */
    public void turn() {
        //return title;
    }

    public void move() {
        // your work here
    }

    /**
    Gets Postition
    @return the postition
     */
    public int getPostion() {
        return postition;

    }
}

BugTester.java

import java.io.FileNotFoundException;

public class BugTester {

    public static void main(String[] args) throws FileNotFoundException {
        int start = 0;
        char bugSymbol = 'a';
        String inputFile = "peter.txt";
        Bug crawler1 = new Bug(start, bugSymbol, inputFile);
        crawler1.matrixBuilder();
        crawler1.matrixPrinter();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...