2013-08-17 6 views
0

Измените приложение программы расчета заработной платы, чтобы оно продолжало запрашивать информацию о делении до тех пор, пока пользователь не войдет в качестве имени разделения. Кроме того, запрограммируйте приложение, чтобы проверить, что количество сотрудников и средняя зарплата на одного сотрудника являются положительными. Если количество сотрудников или средняя зарплата на одного сотрудника не является положительным, приложение должно предлагать пользователю ввести положительную сумму.Простая программа расчета заработной платы

Это код, который я придумал, который компилируется отлично, но не работает так, как я ожидаю.

import java.util.Scanner; //program uses class SCanner 

public class PayrollPart2 
{ 

    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); // create Scanner to obtain input from command window 

     // variables 
     char name; // divisions's name 
     int number1; // number of employees in the division 
     double number2; // average salary for the employees 
     double product; // total division payroll 

      //prompt user to input division name 
      System.out.print("Enter Division's name, type stop to exit: "); 
      String divisionName = input.nextLine(); //read line of text 
       while (divisionName !="stop") 
       { 
       //prompt user for number of employees in the division 
       System.out.print("Enter the number of employees in the division: "); 
       //read number of employees from user's input 
       number1 = input.nextInt(); 
        while (number1 <= 0) 
        { 
         System.out.print("Please enter a positive number of employees in the division:"); // prompt 
         number1 = input.nextInt(); // input 
        } 

       //prompt user to enter average salary of employees 
       System.out.print("Enter average salary for the employees: "); 
       //read average salary 
       number2 = input.nextDouble(); 
        while (number2 <= 0) 
        { 
         System.out.print("Please enter a positive number for the employees salary:"); // prompt 
         number2 = input.nextDouble(); // input 
        } 

       //multiply Number1 by Number2 
       product = number1 * number2; 

       //displays division and total division payroll 
       System.out.printf("The division %s has a payroll of $%.2f\n" , divisionName, product); 
       } 
    } //end method main 
} // end class PayrollPart2 

Я был у него около 8 часов, и в этот момент я полностью потерялся на следующих шагах. Код проходит через цикл, но не запрашивает другое имя раздела. Ввод команды exit в первом приглашении фактически не выходит из цикла. Должен ли я использовать операторы If/Else вместо этого? Я думаю, что могу использовать Boolean, но я не совсем уверен, как его реализовать.

+1

Кроме того, 'divisionName' никогда не меняется в цикле. Таким образом, он либо пропускается полностью, либо бесконечный цикл. – jlordo

+0

Ну, я бы не назвал это дубликатом; плакат не спрашивает явно о сравнении 'String'. –

+1

@ DennisMeng - Завершение вопроса как дубликата не обязательно является отражением в вопросе или в OP. Дело в том, чтобы избавиться от Вопросов, которые не помогут другим людям в будущем. И этот вопрос не будет. ИМО, это настоящий хорошо спрошенный вопрос (+1) ... но это еще один пример того, кто-то сравнивает строки неправильным образом и, следовательно, дублирует. –

ответ

5

Используйте строку equals() метод для сравнения строк вместо! = Или ==. Одна из проблем в коде это утверждение:

while (divisionName !="stop") 

изменить его

while(!("stop".equals(divisionName))) 

= будет Chech ли два объекта не тот же объект памяти, а равно метод будет делать строку содержание сравнение.

Также обратите внимание на обратное сравнение строки «stop» против divisionName. Это поможет избежать исключения null-указателя в случае, когда имя divisionName равно null.

Узнайте больше о сравнении строк с родственным сообщения: Java String.equals versus ==

+0

В стороне, я сомневаюсь, что 'nextLine()' когда-либо вернет «null». Кроме того, если строка никогда не должна быть «null», есть что сказать, чтобы не проводить обратное сравнение. Таким образом, если это когда-либо «null», вы сразу же знаете об этом и можете отлаживать основную причину, а не разрешать ее. –

+0

'!" Stop ".equals (divisionName)' Так странно видеть это так ... Сначала переменная. Давай, чувак. ;) –

+3

@DummyCode Помещение константы сначала позволяет обрабатывать случай, когда 'divisionName' является« null »без отдельной проверки или NPE. –

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