2013-04-25 24 views
7
public static void main(String[] args) { 

     Scanner scan = new Scanner(System.in); 
     try { 
      while (scan.hasNextLine()){ 

       String line = scan.nextLine().toLowerCase(); 
       System.out.println(line); 
      } 

     } finally { 
      scan.close(); 
     } 
    } 

Chỉ cần tự hỏi làm thế nào tôi có thể chấm dứt chương trình sau khi tôi đã hoàn tất việc nhập các yếu tố đầu vào? Khi máy quét vẫn sẽ tiếp tục sau vài "Enter" giả sử tôi sẽ tiếp tục tham gia đóng góp ... tôi đã cố gắng:Làm thế nào để chấm dứt Scanner khi đầu vào hoàn tất?

if (scan.nextLine() == null) System.exit(0); 

if (scan.nextLine() == "") System.exit(0); 

Họ đã không làm việc .... Chương trình tiếp tục và gây rối với ý định ban đầu,

Trả lời

18

Vấn đề là một chương trình (như của bạn) không biết rằng người dùng đã hoàn thành việc nhập dữ liệu đầu vào trừ khi người dùng ... bằng cách nào đó ... nói như vậy.

Có hai cách mà người dùng có thể thực hiện điều này:

  • Nhập một "kết thúc của tập tin" đánh dấu. Trên UNIX, đó là (thường) CTRL + D và trên Windows CTRL + Z. Điều đó sẽ dẫn đến hasNextLine() trả lại false.

  • Nhập một số đầu vào đặc biệt được chương trình nhận dạng là "Tôi đã hoàn thành". Ví dụ, nó có thể là một dòng trống, hoặc một số giá trị đặc biệt như "thoát". Chương trình cần kiểm tra cụ thể cho điều này.

(Bạn cũng có thể hình dung sử dụng một bộ đếm thời gian, và cho rằng người sử dụng đã hoàn thành nếu họ không nhập bất kỳ đầu vào cho N giây, hoặc phút N. Nhưng đó không phải là cách sử dụng để làm này.)


lý do phiên bản hiện tại của bạn là không là bạn đang sử dụng == để kiểm tra một chuỗi rỗng. Bạn nên sử dụng phương pháp equals hoặc isEmpty.

Những điều khác cần xem xét là phân biệt chữ hoa chữ thường (ví dụ: "thoát" so với "Thoát") và ảnh hưởng của khoảng trống đầu hoặc cuối (ví dụ: "thoát" so với "thoát").

0

Với phương pháp này, bạn phải tạo một lệnh thoát hoặc điều kiện thoát. Ví dụ:

String str = ""; 
while(scan.hasNextLine() && !((str = scan.nextLine()).equals("exit")) { 
    //Handle string 
} 

Ngoài ra, bạn phải xử lý chuỗi bằng trường hợp với .equals() không ==. == so sánh địa chỉ của hai chuỗi, trừ khi chúng thực sự là cùng một đối tượng, sẽ không bao giờ đúng.

3

So sánh chuỗi được thực hiện bằng cách sử dụng .equals() chứ không phải ==.

Vì vậy, hãy thử scan.nextLine().equals("").

1

Bạn sẽ phải tìm kiếm mô hình cụ thể mà chỉ cuối đầu vào của bạn nói ví dụ như "##"

// TODO Auto-generated method stub 
    Scanner scan = new Scanner(System.in); 
    try { 
     while (scan.hasNextLine()){ 

      String line = scan.nextLine().toLowerCase(); 
      System.out.println(line); 
      if (line.equals("##")) { 
       System.exit(0); 
       scan.close(); 
      } 
     } 

    } finally { 
     if (scan != null) 
     scan.close(); 
    } 
+0

Cảm ơn bạn rất nhiều :) – user2318175

0

Trong trường hợp này, tôi khuyên bạn nên sử dụng làm, trong khi vòng lặp thay vì thời gian.

Scanner sc = new Scanner(System.in); 
    String input = ""; 
    do{ 
     input = sc.nextLine(); 
     System.out.println(input); 
    } while(!input.equals("exit")); 
sc.close(); 

Để thoát khỏi chương trình, bạn chỉ cần gán một tiêu đề chuỗi ví dụ lối thoát. Nếu đầu vào bằng để thoát thì chương trình sẽ thoát. Hơn nữa, người dùng có thể nhấn control + c để thoát khỏi chương trình.

0

Bạn có thể kiểm tra dòng đầu vào tiếp theo từ bảng điều khiển và kiểm tra mục nhập chấm dứt của bạn (nếu có).

Giả chấm dứt nhập của bạn là "bỏ" thì bạn nên thử mã này: -

Scanner scanner = new Scanner(System.in); 
    try { 
     while (scanner.hasNextLine()){ 

      // do your task here 
      if (scanner.nextLine().equals("quit")) { 
       scanner.close(); 
      } 
     } 

    }catch(Exception e){ 
     System.out.println("Error ::"+e.getMessage()); 
     e.printStackTrace(); 
}finally { 
     if (scanner!= null) 
     scanner.close(); 
    } 

Hãy thử dòng này code.Your chấm dứt nên được nhập vào bởi bạn, khi bạn muốn đóng/chấm dứt hợp máy quét.

Các vấn đề liên quan