2013-03-31 2 views
0

Итак, в этом коде под классом «Запуск» в методе «запустить» сканер, похоже, не хочет принимать входные данные от попытки кулака, только на втором line это требует ввода. Я говорю вторую строку, потому что я ввожу вход, затем дважды нажимаю, и вводим ввод на THIRD строке, он читает вторую строку, которая в этом случае будет ничем.Необходимо ввести ввод дважды для сканера для чтения

Я пробовал BufferedReader с тем же результатом, поэтому я считаю, что делаю что-то идиотское и что-то пропускаю.

import java.util.Scanner; 
import java.util.ArrayList; 
import java.util.Timer; 
import java.util.TimerTask; 

import java.io.*; 

class Global { 
    public static int stop = -1; 
} 

public class DataSort { 

    public static void main(String[] args){ 

     Timer timer = new Timer(); 
     Direct swit = new Direct(); 
     Run mprog = new Run(); 
     Help hlp = new Help(); 

     String newline = System.getProperty("line.separator"); 

     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
     Scanner console = new Scanner(System.in); 

     System.out.println(newline); 
     System.out.println("Welcome to Data Sort! This Program is designed to sort information about targets discoverd by UAV and place the data in a table." + newline); 
     System.out.print("For help, press any key. To continue, please wait. "); 
     timer.schedule(swit, 3000); 

     try { 
      Global.stop = in.read(); 
     } 

     catch(IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      in.close(); 
     } 

     catch(IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

class Direct extends TimerTask { 

    public void run() { 

     Run mprog = new Run(); 
     Help hlp = new Help(); 

     if(Global.stop != -1){ 
      System.out.println("Help"); 
      hlp.run(); 
     } 

     if(Global.stop == -1) { 
      System.out.println("Main"); 
      mprog.run(); 
     } 
    } 
} 


class Help { 

    public static void run() { 
     String newline = System.getProperty("line.separator"); 

     System.out.print(newline); 
     System.out.println("Entering Help Mode!" + newline); 

     System.out.println("Entered Help Class"); 
     //String help = console.nextLine(); 
    } 
} 

class Run { 

    public static void run() { 

     /*EnterAll eall = new EnterAll(); 
     EnterCoords ecoords = new EnterCoords(); 
     EnterRelation erelat = new EnterRelation(); 
     EnterColor ecolor = new EnterColor(); 
     EnterShape eshape = new EnterShape(); 
     Coordinates coords = new Coordinates(); 
     Relation relat = new Relation(); 
     Color color = new Color(); 
     Shape shape = new Shape(); 
     List list = new List(); 
     Save save = new Save(); 
     SaveAs saveas = new SaveAs();*/ 

     String newline = System.getProperty("line.separator"); 
     Scanner console = new Scanner(System.in); 

     System.out.print(newline); 
     System.out.println("Initializing Main Program." + newline); 
     System.out.println("************************** MAIN MENU *************************" + newline); 
     System.out.println("Enter Coords \t Enter Relat \t Enter Color \t Enter Shape"+newline); 
     System.out.println("Coordinates \t Relation \t Color \t \t Shape" + newline); 
     System.out.println("Help \t \t List \t \t Save \t \t Save As" + newline); 
     System.out.println("**************************************************************" + newline); 

     System.out.print("Enter your selection or type All to enter lines consecutively: "); 
     String raw = console.nextLine(); 

     System.out.println(raw); 

     String select = errorCheck(raw); 

     if (select.equals("All")){ 
     } 

     if (select.equals("Enter Coords")){ 
     } 

     if (select.equals("Enter Relat")){ 
     } 

     if (select.equals("Enter Color")){ 
     } 

     if (select.equals("Enter Shape")){ 
     } 

     if (select.equals("Coordinates")){ 
     } 

     if (select.equals("Relation")){ 
     } 

     if (select.equals("Color")){ 
     } 

     if (select.equals("Shape")){ 
     } 

     if (select.equals("Help")){ 
     } 

     if (select.equals("List")){ 
     } 

     if (select.equals("Save")){ 
     } 

     if (select.equals("Save As")){ 
     } 
    } 

    private static String errorCheck(String raw) { 

     String select = raw; 
     return select; 
    } 
} 

ответ

0

@Sean, вот ваше решение

Комментарий ниже линии

public class DataSort 
{ 
. 
. 
. 
//BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
//Scanner console = new Scanner(System.in); 
. 
. 
. 
//Global.stop = in.read(); 
. 
. 
} 

Для Global.stop = in.read(), читать из того же входа буфер чтения (может находиться в одном классе или где-то еще) и анализировать строку по своему усмотрению. Не создавайте еще один буфер чтения ввода.

С уважением, Ravi

1

Ваша проблема заключается в

public class DataSort {...... Global.stop = in.read(); ......} 

Поскольку in.read для чтения ввода Integer. Он не читает символ конца строки. Вот почему это становится невежественным после ввода строки выбора и нажатия ввода.

С уважением, Ravi

+0

+1. Чтобы прояснить, 'read()' считывает один символ, но возвращает его как целое число. См. Документацию [здесь] (http://docs.oracle.com/javase/1.5.0/docs/api/java/io/BufferedReader.html). – Simon

+0

О, это было не так много, что у меня были проблемы, поскольку это только для обнаружения ЛЮБОГО ввода клавиатуры вообще, а затем рассказать программе, к какому классу идти. Проблема была в классе Run со String raw = console.nextLine(); –

+0

@Sean, перед тем как перейти к raw = console.nextLine(), он выполняет Global.stop = in.read(). Вот почему вы получаете консольную вешалку. –

Смежные вопросы