2014-11-26 3 views
0

다른 클래스의 조건부에서 하나의 Java 클래스를 초기화하려고합니다. MarsRovers에서 Rover를 초기화하려고합니다. MarsRovers에서 로버 객체를 초기화하려고하면 '심볼을 찾을 수 없습니다'오류가 발생합니다. 저는 Java에 익숙하지 않아서 고원과 입력 라인의 범위와 관련이 있다는 느낌이 들었습니다. 내가 여기에서 본 다른 솔루션을 시도했지만, 내 문제를 (내 변수를 공개하는 것처럼) 작동하지 않습니다.Java 생성자가 '= new'심볼 오류를 찾을 수 없습니다.

목표는 inputLines % 2이 0 (until 루프 사용) 인 경우 최종적으로 새 Rover를 만드는 것입니다. 여기

는 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"); 
    } 
    } 
} 

그리고 여기 로버 코드 :

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 
+0

꽤 자명합니다. 'new '는'String'과'List '매개 변수를 취하는 생성자를 사용하려고합니다. 그러나 하나도 없다. – ajb

답변

1

Rover 생성자는 정의 된대로 문자열 배열을 사용합니다. 문자열 목록으로 생성자를 호출하려고합니다. 문자열 목록은 문자열 배열과는 다른 것입니다. 예를 들어 목록을 문자열 배열로 변환하여 문제를 해결할 수 있습니다. 그들은 완전히 다른 종류 (정의) 때문에, 유형 MarsRover의 변수에 유형 Rover의 객체를 할당 할 수있는 추가

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

참고.

+0

고마워요! 또한 Rover 객체를 MarsRover 변수로 초기화 할 때 겪었을 다른 문제를 발견하고 설명해 주셔서 감사합니다. – user3832819

1

: 나는 MarsRovers.java를 컴파일 할 때

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"); 
    } 
} 

, 나는이 오류 형식이 List<String> 인 경우 String[]에 할당 할 수 없으므로 typechecking이 실패합니다.

전자는 후자 String 오브젝트의 배열 인 반면 String의 일반 인스턴스 A가 List (List 방금 ​​interface 때문에 실제로 런타임 유형이 좁다)이다.

List<String>을 배열로 변환해야합니다. JDK는 이미 다음 기능을 제공합니다.

String[] array = inputLines.toArray(new String[inputLines.size()]); 
+0

typechcking에 대한 특이성과 List 과 String [] 사이의 차이점에 대해 감사드립니다. – user3832819

관련 문제