2013-03-10 1 views
0

공간을 구분 기호로 사용하여 "sisestus"를 다른 단어로 나눕니다. 그러나 sc.next()를 사용하면 공백이있는 문자열을 입력 할 수 없으므로 .nextLine),하지만 전혀 작동하지 않습니다. 어떻게 해결합니까?nextLine은 스캐너와 어떻게 작동합니까?

public class Sisestamine { 
int read; 
int veerud; 
double Maatriks[][]; 
java.util.Scanner sc = new java.util.Scanner(System.in); 

Sisestamine() { 
    System.out.println("Enter matrix dimensions (format NxM)"); 

    String[] abi = sc.next().split("x"); 
    this.read = Integer.parseInt(abi[0]); 
    this.veerud = Integer.parseInt(abi[1]); 
    this.Maatriks = new double[read][veerud]; 

    System.out.println("Enter the matrix: (x x x x etc..)"); 
    for (int i = 0; i < read; i++) { 
     String sisestus = sc.next(); 
        //String sisestus = sc.nextLine(); 
     abi = sisestus.split(" "); 
     System.out.print(abi); 
     for (int j = 0; j < abi.length; j++) { 
      this.Maatriks[i][j] = Double.parseDouble(abi[j]); 
     } 
    } 
    } 
} 
+0

"전혀 작동하지 않는다"는 것은 무엇을 의미합니까? 문제에 대한 적절한 세부 정보를 알려주시겠습니까? 대개 우리가 알수록 우리가 당신의 문제를 잘 이해할수록 더 많은 도움을 줄 수 있습니다. –

+0

매트릭스 치수를 입력 한 후 "빈 문자열"오류가 발생합니다 (실제 매트릭스를 입력 할 수도조차 없습니다). –

+0

위의 코드에서'nextLine()'을 어디에서 호출하는지 알지 못합니다. 오류의 원인이되는 코드를 게시물의 하단에 편집하여 게시하십시오. –

답변

1

를 사용하여 프로그램의 한 부분에서 sc.next()를 사용하고 sc.nextLine() 나중에, 두 번째 통화에 대한 이전 호출에 매달려 왼쪽 된 라인 (EOL) 토큰의 끝을 삼켜 때문에 귀하의 문제가 될 수있다 next(). 해결책은 모든 호출에 sc.nextLine()을 사용하는 것입니다. 즉, 모두를 변경하십시오.sc.next()sc.nextLine()으로 변경하십시오.

+0

네, 바로 그 뜻입니다. 대단히 감사합니다. –

+0

@ Faz3r : 환영합니다. 때로는 여러 개의 Scanner 객체를 사용합니다. 하나는 줄을 가져오고 다른 하나는 줄마다 토큰을 사용하는 것입니다. 다시 말해 줄 스캐너로 줄 스캐너를 초기화합니다. 이 경로를 사용하는 경우 스캐너 사용이 끝나면 스캐너를 닫아야합니다. –

관련 문제