2016-01-19 3 views
2

Я отладка следующей программы из часов пока я не могу найти, почему это Sanner не принимает входные данные для поля имениПропуск сканера?

import java.util.Scanner; 

public class Student 
{ 
int rollNo; 
String name; 
double percentageMarks; 
static Scanner input = new Scanner(System.in); 

public void accept() 
{ 
    System.out.print("Enter roll no: "); 
    rollNo = input.nextInt(); 

    System.out.print("Enter Name: "); 
    name = input.nextLine(); 

    System.out.print("Enter percentageMarks: "); 
    percentageMarks = input.nextDouble(); 
} 

public void display() 
{ 
    System.out.println("Name: " +name); 
    System.out.println("roll no: " +rollNo); 
    System.out.println("Percentage marks: " +percentageMarks); 
} 

public static void main(String[] args) 
{ 
    Student s1 = new Student(), s2 = new Student(); 

    s1.accept(); 
    s2.accept(); 

    if(s1.percentageMarks>s2.percentageMarks) 
     s1.display(); 
    else if (s2.percentageMarks>s1.percentageMarks) 
     s2.display(); 
    else 
     System.out.println("Both students has same marks"); 
} 
} 

Это генерируя такой:

Enter № по каталогу: 1 Впишите имя: Введите процентные данные:

Как видно, без учета ввода имени учащегося для ввода процентных баллов учащихся.

+2

Вы можете прочитать это сообщение, которое я написал, чтобы уточнить ваши сомнения по поводу этой проблемы: [Использование 'nextInt()' перед 'nextLine()'] (https://christprogramming.wordpress.com/2014/01/30/java -common-errors-1 /) – Christian

+0

Возможно, сканер принимает новую строку (от нажатия Enter) в качестве входного сигнала и, таким образом, переходит к следующей строке ввода. –

ответ

3

Это потому, что у вас сначала есть input.nextInt(), и после его завершения он не перейдет на следующую строку. Просто проанализируйте всю первую строку как Integer.parseInt(scanner.nextLine()), и после этого вы получите свой ввод для имени.

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