Есть ли способ прочитать значения из файла в массиве и инициализировать эти значения? - PullRequest
1 голос
/ 01 марта 2020
import java.io.*;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            File file = new File("C:\\Users\\HIM\\IdeaProjects\\File Tutorial\\src\\quad.txt");
            Scanner scanner = new Scanner(file);

            double a , b, c;
            double[] arr = new double[3];
            for(int i = 0; i < arr.length; i++) {
                while (scanner.hasNextLine()) {
                    arr[i] = scanner.nextInt();
                    System.out.println(arr[i]);
                }
            }
            a = arr[0];
            System.out.println(a);
            b = arr[1];
            System.out.println(b);
            c = arr[2];
            System.out.println(c);

        } catch (Exception e){
            System.out.println("Not Found");
        }
    }
}

я использовал этот код, но из l oop, который передал значения 2, 3, 4, в массив, он был прочитан успешно, но я попытался инициализировать эти значения массива в a, b, c , но он только читает последнее значение и присваивает его.

Ответы [ 2 ]

0 голосов
/ 01 марта 2020
           for(int i = 0; i < arr.length; i++) {
                while (scanner.hasNextLine()) {
                    arr[i] = scanner.nextInt();
                    System.out.println(arr[i]);
                }
            }

Посмотрите на внутреннее l oop. Вы запускаете while(scanner.hasNextLiine(), однако я никогда не получаю итерации, пока вы читаете файл. В результате вы читаете весь файл, но всегда помещаете его в arr[i=0].

. Лучшее решение может быть

int i = 0;
while(scanner.hasNextLine() && i < arr.length){
    arr[i++] = scanner.nextInt();
}

, которое будет сочетать в себе функциональность вашего while и для l oop. Другой вариант:

for(int i = 0; i < arr.length && scanner.hasNextLine(); i++){
    arr[i] = scanner.nextInt();
}

Ответ Криса также действителен. nextInt и hasNextLine - это не одно и то же. Но в этом случае я предполагаю, что в вашем файле есть целые числа в каждой строке.

0 голосов
/ 01 марта 2020

Вы не говорите, как выглядит ваш входной файл, поэтому трудно сказать вам точно , что не так, но я подозреваю, что проблема в том, что вы используете hasNextLine в вашем l oop, но nextInt когда читаешь. Это не будет вести себя так, как вы ожидаете для ввода, как это, например:

1 2 3

Обратите внимание, что есть одна строка, поэтому hasNextLine вернет false, потому что, в то время как в то время как есть несколько целых, только одна строка.

Вместо этого вы, вероятно, захотите: Scanner # hasNextInt

Кроме того, этот лог c, вероятно, неверен :

for(int i = 0; i < arr.length; i++) {
   while (scanner.hasNextLine()) {
      arr[i] = scanner.nextInt();
      System.out.println(arr[i]);
 }

Когда сканер переходит к следующему токену, вы не можете go назад. Таким образом, вы можете читать с него только один раз, не создавая новый сканер.

Вам, скорее всего, понадобится следующее:

int i = 0;
while (scanner.hasNextInt()) {
   arr[i] = scanner.nextInt();
   System.out.println(arr[i]);
   i++;
}

Это будет go через сканер один раз и правильно заполнить ваш значения.

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