2013-11-25 3 views
0

Я написал этот код, чтобы позволить чокаются признать свои записипетля пропуская некоторые высказывания

public static void main (String args[]){//Start main 
    String [] name = new String [5]; 
    int [] age = new int [5]; 
    char [] test = new char [5]; 
    addPatients(name , age , test); 
} 

public static void addPatients (String[] n ,int[] a ,char[] t){ 
    i=0; 
    while (i<n.length) 
    { 
     System.out.println("Enter Patient’s Name: "); 
     n[i] = scan.nextLine(); 

     System.out.println("Enter Patient’s Age: "); 
     a[i]=scan.nextInt(); 

     System.out.println("Enter Patient’s Medical test: "); 
     t[i]=scan.next().charAt(0); 
     i++; 
    } 

    System.out.println("Enter the patient’s index to find his/her information : "); 
    int index= scan.nextInt(); 
    System.out.println ("Patient name : " + n[index] +"\n Patient age : " + a[index] +"\n Patient Medical test: " + t[index]); 
} 

, но проблема заключается в addPatients, когда метод начать работать, это только читать первое утверждение

System.out.println("Enter Patient’s Name: "); 
n[i] = scan.nextLine(); 

от пользователя один раз и пропустить его во втором цикле!

+1

Пожалуйста отступ кода. –

+0

Есть ли ошибки в частности? – Adarsh

+0

@Adarsh ​​код и проблема набраны четко – Walaa

ответ

0

Я ценю большое объяснение, что были даны до сих пор ..... Таким образом, окончательный модифицированный код, чтобы исправить эту проблему здесь ...

public static void addPatients (String[] n ,int[] a ,char[] t) 

{ 

    final Scanner scanner = new Scanner(System.in); 
    int i=0; 
    while (i<n.length) 
    { 
     System.out.println("Enter Patient’s Name: "); 
     n[i] = scanner.nextLine(); 

     System.out.println("Enter Patient’s Age: "); 
     a[i]=scanner.nextInt(); 

     System.out.println("Enter Patient’s Medical test: "); 
     t[i]=scanner.next().charAt(0); 
     i++; 
     scanner.nextLine(); // To swallow the extra excess newline(enter) character. 
    } 
    System.out.println("Enter the patient’s index to find his/her information : "); 
    final int index= scanner.nextInt(); 
    System.out.println ("Patient name : " + n[index] +"\n Patient age : " + a[index] +"\n Patient Medical test: " + t[index]); 
} 
0

Не используйте nextLine после nextInt, поскольку nextInt не потребляет \n, и он будет потребляться в nextLine, заставляя его «пропустить» ваш фактический ввод.

Одним из решений является добавление дополнительной nextLine после nextInt «проглотить» в \n, который не читался через nextInt.

Так что теперь происходит в вашем коде, что, когда вы просите int ввода, пользователь вводит, например 12 и жмём Enter (\n), значение int будет читать, но когда вы достигнете n[i] = scan.nextLine(); снова, \n ждет, чтобы его прочитали .. И он будет прочитан, поэтому вы подумаете, что он пропущен.

0

Проблема заключается в том, что, когда вы пишете scan.next(), чтобы прочитать медицинское обследование пациента, символы, составляющие следующее слово, вытягиваются из сканера, но символ новой строки или другой пробел, который следует за ними, не является.

Например, если пользователь набрал P A S S и нажал Enter, буквы P A S и S считываются со сканера, но символ новой строки остается на сканере - это будет следующий символ. Затем, на второй итерации цикла, следующий вызов scan.nextLine() просто считывает этот символ новой строки вместо того, чтобы читать имя второго пациента.

После этого все не в порядке. У сканера есть несколько символов, которые еще не были прочитаны, но должны были быть.

Решение состоит в том, чтобы добавить дополнительный scan.nextLine() после t[i]=scan.next().charAt(0);, чтобы вытащить этот дополнительный символ новой строки со сканера.

0
System.out.println("Enter Patient’s Name: "); 
    n[i] = scan.nextLine(); 

    System.out.println("Enter Patient’s Age: "); 
    a[i]=scan.nextInt(); 

    System.out.println("Enter Patient’s Medical test: "); 
    t[i]=scan.next().charAt(0); 
    i++; 

В вышеуказанном коде вы сначала вводите имя и нажимаете ввод. Имя будет сохранено в n [i], но новая строка (введите) все еще присутствует в качестве входа, ожидающего чтения. В вашем возрастном вопросе вы ожидаете целое число, которое пропускает новую строку (может быть любое количество новых строк) и ждет следующего целого числа, которое вы вводите. Следующий вопрос для результата теста ждет следующего токена. Метод next() игнорирует все новые строковые символы и пробелы, пока не сможет получить полный токен. Здесь вы вводите значение и нажмите enter. Теперь этот ввод читается по вашему имени в качестве ввода во втором прогоне цикла, так как nextLine() не игнорирует новые строки. Таким образом, вы можете либо игнорировать новую строку, которую вы нажимаете после третьего вопроса, выбирая ее после каждого цикла. Или вы используете next() вместо newLine(). Используя next(), вы можете ввести только одно слово.

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