2013-04-13 4 views
0

По какой-то причине мое заявление продолжает переходить к следующей строке, не выполняя то, что она должна.Заявления, пробивающиеся на следующую строку

package Employee; 
import java.util.Scanner; 
import static java.lang.System.out; 



public class EmployeeTest { 

public static void main (String args[]) { 

out.println ("Welcome to employee storer: "); 

Scanner imput = new Scanner (System.in); 
Employee employee1 = new Employee();// Creates an employee 
Employee employee2 = new Employee(); 

out.println ("Please enter first name: "); 
String fName = imput.nextLine(); //reads keyboard 
    employee1.setfName(fName);// sets first name 

out.println("please enter last name: "); 
String lName = imput.nextLine();//reads keyboard 
    employee1.setlName(lName);// sets second name 

out.println("Please enter pay: "); 
double pay = imput.nextDouble();//reads keyboard 
    employee1.setPay(pay);//sets the pay 

out.println ("Please enter first name: "); 
String fName1 = imput.nextLine(); //reads keyboard 
    employee2.setfName(fName1);// sets first name 

out.println("please enter last name: "); 
String lName1 = imput.nextLine();//reads keyboard 
    employee2.setlName(lName1);// sets second name 

out.println("Please enter pay: "); 
double pay1 = imput.nextDouble();//reads keyboard 
    employee2.setPay(pay1);//sets the pay 

employee1.printer();// prints the info 
employee2.printer();// same here 

employee1.raise(); 
} 

}

Моя проблема является второй Fname Imput, он никогда не получает входной сигнал от пульта, он заканчивает тем, как этот

"Welcome to employee storer: 
Please enter first name: 
Jake 
please enter last name: 
Smith 
Please enter pay: 
100 
Please enter first name: 
please enter last name: 
Jake 
Please enter pay: 
100 
The employee Jake Smith yearly salary is: 1200.0 
The employee Jake yearly salary is: 1200.0 
Your raise is: 120.0 
Your new yearly pay is: 1200.0120.0" 

Мой класс метод выглядит следующим образом: пакет Сотрудник; import static java.lang.System.out;

public class Employee { 
private String fName; 
private String lName; 
private double pay; 

public void payCheck() { 
    if (pay > 0) 
     pay = 0; 
} 
public double yearly() { 
    double overall = pay * 12; 
    return overall; 
} 
public void printer() { 
    out.println(" The employee " + fName + " " + lName + 
      " yearly salary is: " + pay * 12); 
} 
public void raise() { 
    double year = pay * 12; 
    double increase = .1; 
    double raise = increase * year; 
    out.println("Your raise is: " + raise); 
    out.print("Your new yearly pay is: " + year + raise); 
} 


// Getters and setters 
public String getfName() { 
    return fName; 
} 
public void setfName(String fName) { 
    this.fName = fName; 
} 
public String getlName() { 
    return lName; 
} 
public void setlName(String lName) { 
    this.lName = lName; 
} 
public double getPay() { 
    return pay; 
} 
public void setPay(double pay) { 
    this.pay = pay; 
} 

}

Я также получить нечетный выход для окончательной годовой заработной платы. Не совсем уверен, почему, Любая помощь будет оценена по достоинству.

+3

Для любви бога реорганизовывать «Imput» на «вход» вместо того, чтобы оставить 200 орфографические ошибки в коде, прежде чем показывать его публике здесь. .. –

+0

@Niels (я думал то же самое, однако, я думаю, это специально ...) –

+0

Это не имеет значения для программирования хардкора! – Vitaly

ответ

2

попробовать это

imput.nextDouble(); 

просто выполнить ниже линии после nextDouble();

imput.nextLine(); 

всякий раз, когда вы хотите сканировать номера с .next() вызова, убедитесь, что вы добавить пустой .nextLine() рядом с ним, так что Scanner перемещается в правильное положение

5

nextDouble() вернет только значение Double на линии, оставив линию обратно позади, что подхвачено следующим оператором nextLine().

2

nextDouble() просто читает двойной от i nput, а не двойной на всей строке. Каретка возвращает вас после двойного останова на входе, который немедленно извлекается оператором nextLine() после, а не останавливается.

Извлеките его с nextLine(), как и для всех остальных, затем преобразуйте результат в double (с ошибкой, очевидно).

2

Проблема в том, что вы нажимаете enter после двойника; System.in получает double, за которым следует новая строка, которая считывается как double (новая строка останавливает сканирование), затем пытается прочитать строку до новой строки (что приводит к пустой строке)

1

Также о последняя часть вашего вопроса

out.print("Your new yearly pay is: " + year + raise); 

Это простая конкатенация строк, поэтому вы получаете «странный» результат. Вместо этого попробуйте дополнительную пару скобок для правильного суммирования, а затем конкатенацию

out.print("Your new yearly pay is: " + (year + raise)); 
Смежные вопросы