2013-10-12 3 views
0

Я работаю над своим проектом среднего уровня, и я более или менее закончен. Единственная проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю программу, и она просит меня ввести полное имя сотрудника, компилятор бросает мне исключение о сканере. Я пошел от Scanner ввода к «scanner user_input», но он по-прежнему не будет компилироваться должным образом. Любой намек на то, что проблема, будет оценена по достоинству.Ошибка исключения Java-сканера

package midterm; 

import java.util.Scanner; 

public class Midterm { 

    public static void main(String[] args) { 
     Scanner user_input = new Scanner(System.in); 

     System.out.print("If you wish to enter another's employee's inforamtion" 
         + " please press 1, else to exit enter 0."); 
     int choice = user_input.nextInt(); 

     if (choice == 1) { 
      System.out.print("What is the employee's full name. "); 
      String empName = user_input.next(); 
      System.out.printf("Please enter the number of hours that the employee has worked. "); 
      double hoursWorked = user_input.nextDouble(); 
      System.out.printf("Please enter the employee's hourly pay rate. "); 
      double payRate = user_input.nextDouble(); 

      displayPay(empName, calculatePay(hoursWorked, payRate)); 
     } 
     else if (choice == 0) { 
      System.exit(0); 
     } 
    } 

    public static double calculatePay(double hours, double pay) { 
     double wages = 0; 

     if (hours <= 40) { 
      wages = hours * pay; 
     } 

     if (hours > 40) { 
      double regPay = hours * pay; 
      double overTime = (hours - 40) * pay * 1.5; 
      wages = regPay + overTime; 
     } 

     return wages; 
    } 

    public static void displayPay(String name, double empWage) { 
     System.out.print("-----------------------------------------"); 
     System.out.print("Employee Name: " + name); 
     System.out.print("Pay Check Amount: $" + empWage); 
     System.out.print("-----------------------------------------"); 
    } 
} 
+0

Какая ошибка показана? Это ошибка компилятора или исключение во время выполнения? – hexafraction

ответ

0

Довольно прямо вперед! Вот как вы можете использовать класс сканера для приема входов с клавиатуры:

String str; 
    Scanner in = new Scanner(System.in); 

    System.out.println("Enter any string :-"); 
    str = in.nextLine(); 
    System.out.println(str); // will print the string that you entered. 
+0

Спасибо, что получилось отлично. –

1

Ошибка здесь:

System.out.print ("What is the employee's full name. "); 
String empName = user_input.next(); 

next() читает все до следующего разделителя, который по умолчанию пробел. Итак, если кто-то вводит имя и фамилию (разделенные пробелом), это будет читать только первое имя. Следовательно, когда вы вызываете user_input.nextDouble() позже, все еще есть часть имени, которое нужно прочитать, и программа кричит, потому что следующий токен (в данном случае, фамилия) не может быть проанализирован как double.

Поскольку это звучит как школьный проект, я не буду точно говорить, как его исправить.

0

Попробуйте использовать:

System.out.print ("What is the employee's full name. "); 
String empName = user_input.nextLine(); 
0

Не используйте user_input.next();

вместо этого, попробуйте это: user_input.nextLine();

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