Java-конструктор не может найти символ ошибки ' = new'

Я пытаюсь инициализировать один класс Java из условного в другом классе - я хочу, чтобы MarsRovers инициализировал Rover. Я получаю сообщение об ошибке "Не удается найти символ" при попытке инициализировать объект Rover из MarsRovers. Я новичок в Java, поэтому я чувствую, что это как-то связано с областью PlateauCoords и inputLines. Я пробовал другие решения, которые я видел здесь, но они не работают для моей проблемы (например, обнародование моих переменных).

Цель состоит в том, чтобы в конечном итоге сделать новый ровер, если inputLines % 2 равен 0 (с циклом до).

Вот код MarsRover:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class MarsRover {
  public static void main(String []args) throws FileNotFoundException {
    Scanner console = new Scanner(System.in);
    System.out.println("Mars rover is ready for input, please enter name of input file: ");
    String filename = console.nextLine();
    console.close();
    List<String> inputLines = new ArrayList<String>();

    Scanner scanner = new Scanner(new File(filename));
    scanner.useDelimiter("\n");
    while(scanner.hasNext()){
      inputLines.add(scanner.next());
    }
    String plateauCoords = inputLines.get(0);
    inputLines.remove(0);
    scanner.close();
    System.out.println(inputLines);

    if(inputLines.size() % 2 == 0) {
      MarsRover rover = new Rover(plateauCoords, inputLines);
    } else {
      System.out.println("Your directions are not formatted correctly");
    }
  }
}

А вот код Ровера:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class Rover {
  public Rover(String platCoords, String[] input) {
    System.out.println("INSIDE ROVER");
  }
}

Когда я компилирую MarsRovers.java, я получаю эту ошибку:

MarsRover.java:27: cannot find symbol
symbol  : constructor Rover(java.lang.String,java.util.List<java.lang.String>)
location: class Rover
      MarsRover rover = new Rover(plateauCoords, inputLines);
                        ^
1 error

2 ответа

Решение

Ваш Rover Конструктор, как определено, принимает массив строк. Вы пытаетесь вызвать конструктор со списком строк. Список строк отличается от массива строк. Вы можете исправить это, например, преобразовав список в массив строк.

Rover rover = new Rover(plateauCoords, inputLines.toArray(new String[inputLines.size()]));

Обратите внимание, что вы не можете назначить объект типа Rover к переменной типа MarsRoverпотому что (как определено) они совершенно разных типов.

Тип List<String> не может быть назначен String[] так что проверка типов не удалась.

Бывший List (на самом деле тип времени выполнения является более узким, так как List это просто interface) общий экземпляр String в то время как последний представляет собой массив String объекты.

Вы должны конвертировать ваши List<String> в массив. JDK уже предоставляет эту функциональность:

String[] array = inputLines.toArray(new String[inputLines.size()]);
Другие вопросы по тегам