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()]);