Используя цикл for, выполните итерацию по двумерному массиву, чтобы передать эти значения в параметр - PullRequest
0 голосов
/ 10 февраля 2019

Я открываю текстовый файл, который выглядит следующим образом:

1;Rani;Hockey;BMW;1 Series;2011;WAUGFAFR4CA952133;2003;
2;Ranice;Dodge;Hyundai;Sonata;2005;WAUMF78PX6A683500;2013;

(имеет еще 90 строк, аналогичных приведенным выше)

Я уже разбил каждое слово на двумерный массив, напримерэти позиции

[0][0] = 1
[0][1] = Rani
[0][2] = Hockey
[1][0] = 2
[1][1] = Ranice
[1][7] = 2013

Я настраиваю цикл for для перебора моего 2D-массива, где (в конце концов) каждый индекс будет передан в качестве параметра в мой конструктор.Во время цикла я получаю:

Exception in thread "main" java.lang.NumberFormatException:
For input string: "2"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at Test4.main(Test4.java:53)

Ниже приведен мой код для моего класса CarData:

public CarData() {}

public CarData(int i, String fn, String ln, String cMake, String cMdl, 
                   int cYear, String vin, int p)
{
    this.customerID = i;
    this.ownerFirstName = fn;
    this.ownerLastName = ln;
    this.carMake = cMake;
    this.carModel = cMdl;
    this.carYear = cYear;
    this.carVin = vin;
    this.yearCarPurchased = p;
}

public class CarDataDriver {

public static void main(String [] args)
{
    final int col = 8;
    final int row = 100;
    int id = 0;
    String fn = null;
    String ln = null;
    String cMake = null;
    String cMdl = null;
    int cYear = 0;
    String vin = null;
    int p = 0;
    CarData [] data = new CarData[row];
    // Open file
    File file = new File("CarData.txt");

    // Use scanner to scan new File
    Scanner scanner;
    try {
        scanner = new Scanner(file);

        // useDelimiter to separate String 
        String text = scanner.useDelimiter("\\A").next();

        // Use split method to split String
        String [] array = text.split(";");

        String[][] array2D = new String[row][col];

        //iterate through array to create 2D array
        for (int i = 0, k=0; i < array2D.length; i++)
        { 
            for (int j = 0; j < col; j++)
            {
                array2D[i][j] = array[k++];
            }
        }


        for (int i = 0, k=0; i < array2D.length; i++) 
        {

            for (int j = 0; j < col; j++)
            {
                if(j==0){
                    id = Integer.parseInt(array2D[i][j]); //first iteration where i = 0 runs fine, when i=1 and j=0 I get the error
                    continue;
                }
                if(j==1){
                    fn = array2D[i][j];
                    continue;
                }
                if(j==2)         {                   
                    ln = array2D[i][j];
                    continue;
                }
                if(j==3){
                    cMake = array2D[i][j];
                    continue;
                }
                if(j==4){
                    cMdl = array2D[i][j];
                    continue;
                }
                if(j==5){
                    cYear = Integer.parseInt(array2D[i][j]);
                    continue;
                }
                if(j==6){
                    vin = array2D[i][j];
                    continue;
                }
                if(j==7){
                    p = Integer.parseInt(array2D[i][j]);

                }
                data[k] = new CarData(id, fn, ln, cMake, cMdl, cYear, vin, p);
                k++;
            }

        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

}

1 Ответ

0 голосов
/ 10 февраля 2019

С одним циклом все в порядке - причиной ошибки является недопустимый символ (пробел), проанализированный вместе с правильным целым числом.Вы можете просто удалить все пробелы из вашей строки с помощью:

array2D[i][j].replaceAll("\\s+","")

(обратите внимание, что это не изменяет строку в массиве, но возвращает новую с удаленными пробелами)

Где странно "\\s+" строка просто означает «любой пробел» (это так называемое регулярное выражение, но пока вам не нужно понимать его полностью)

Однако обратите внимание, что у вас есть еще некоторые проблемы в вашем коде, дляНапример, абсолютно ненужный внутренний цикл с таким количеством if с, где каждый из них будет выполняться только один раз - вместо этого вы можете просто получить доступ к array2D [i] [1], array2D [i] [2] и так далее.Также сохранение дополнительного индекса k и его ручное увеличение кажется излишним.

В любом случае, сохраняйте кодирование и удачи!

PS Использование BufferedReader и его readLine() представляется оченьлучший (и более простой!) способ чтения файла.Взгляните на https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...