Вот что я сделал до сих пор: но вы должны посмотреть на экран печати, чтобы увидеть, какой результат я получаю. и вот элементы в файле .txt, которые я пытаюсь прочитать:

1000
1500 2
750
600
500 3
100
250
750
600 5
1500
400
500 4
1000
1500
750
-1
500
1500

Просто чтобы вы знали, что это такое, это игра Whammy, и приведенные выше числа - это значения, которые мой spin () выбирает случайным образом.

public class Board {

    ArrayList<Cell> cellList = new ArrayList<>(); // creating an arraylist that holds the array elemetns in it.

    public Board() throws FileNotFoundException {
        java.io.File file = new java.io.File("CellValues.txt");
        System.out.println("isFile: " + file.exists());

        try (java.util.Scanner scan = new java.util.Scanner(file)) {
            while(scan.hasNext()){

                String line = scan.nextLine();
                String[] lineArr = line.split(" ");
                System.out.println(lineArr.length); // test number number of index

                if(lineArr.length == 1){
                    int cellLine = Integer.parseInt(line);              // to be passd to Cell constructor
                    Cell cellObject = new Cell(cellLine);
                    cellList.add(cellObject);

                if(lineArr.length == 2){
                    int SpecialCell = Integer.parseInt(line);      // to be passed to Special Cell constructor
                    SpecialCell specialCellObject = new SpecialCell(cellLine, SpecialCell);
                    cellList.add(specialCellObject); 
                    //cellLine *= SpecialCell;
                    //int x = cellObject.getValue() * (int) specialCellObject.getMultiplier();
                }   
            }
        }
            for(Cell i : cellList){
            System.out.println(i); 
            }

            System.out.println("\ncurrent elements in the arraylist are: " + cellList.size());

            scan.close();
        }
    }

******** ОБНОВЛЕНИЕ по вашему совету с редактированием IF **********

Int cellLine = Integer.parseInt (строка); // передаваться конструктору ячеек int SpecialCell = Integer.parseInt (line); // передаваемому конструктору Special Cell

            if(lineArr.length == 1 && lineArr.length == 2){
                Cell cellObject = new Cell(cellLine);
                SpecialCell specialCellObject = new SpecialCell(cellLine, SpecialCell);
                cellList.add(cellObject);
                cellList.add(specialCellObject);

Теперь я получаю -> Исключение в потоке «main» java.lang.NumberFormatException: для входной строки: «1500 2»

0
Ahmed Hadi 26 Ноя 2016 в 09:53

2 ответа

Лучший ответ

Я думаю, вам нужны оба значения из исходной строки, верно? Вам нужно использовать отдельные строки, которые вы разделите с помощью lines.split();

И, возможно, попробуйте такую логику:

int firstValue = 0;      // initialize a first value (always used)
int secondValue = 0;     // initialize a second value (may or may not be used)

if(lineArr.length == 1){
        // parse just the first element. That's all we need.
        firstValue = Integer.parseInt(lineArr[0]);  
        // do stuff here...
}
if(lineArr.length == 2){
        // parse both elements.  We need both, right?
        firstValue = Integer.parseInt(lineArr[0]);
        lineArr[1] = lineArr[1].trim();  // remove any leading whitespaces!
        secondValue = Integer.parseInt(lineArr[1]);
        // do stuff here...
}

< Сильный > ИЗМЕНИТЬ :

if(lineArr.length == 1){
        // parse just the first element. That's all we need.
        firstValue = Integer.parseInt(lineArr[0]);  
        // do stuff here...
}
if(lineArr.length > 1){
        firstValue = Integer.parseInt(lineArr[0]);
        for (int i = 1; i < lineArr.length; ++i) {
            if (!lineArr[i].equals("")) {
                secondValue = Integer.parseInt(lineArr[i]);
            }
        }
        // do stuff here with firstValue and secondValue
}
1
Alessandro Scarlatti 26 Ноя 2016 в 08:36

Похоже, что блок, начинающийся в строке 33, будет выполняться только в том случае, если массив содержит 1 элемент, а это именно то, чего вы не хотите. Переместите этот блок за пределы первого блока if, чтобы он мог выполняться. А еще лучше сделать

if (lineArray.length == 1) {
    // code for one element here...
}
if (lineArray.length == 2) {
    // code for two elements here...
}

Так конкретно:

if(lineArr.length == 1){
    int cellLine = Integer.parseInt(line);              // to be passd to Cell constructor
    Cell cellObject = new Cell(cellLine);
    cellList.add(cellObject);
} 
if(lineArr.length == 2){  
    int SpecialCell = Integer.parseInt(line);      // to be passed to Special Cell constructor
    SpecialCell specialCellObject = new SpecialCell(cellLine, SpecialCell);
    cellList.add(specialCellObject); 
    //cellLine *= SpecialCell;
    //int x = cellObject.getValue() * (int) specialCellObject.getMultiplier();
}   
2
Alessandro Scarlatti 26 Ноя 2016 в 07:22