2015-05-29 2 views
3

Как я могу избавиться от одного сканера? Если я использовать только один сканер выход после weekly_pay это является:Удаление одного сканера, программа расчета заработной платы Неделя 3

Имя сотрудника
Введите часы работали в течение недели.

Программа пропускает право на запрос переменной имени сотрудника. С обоими сканерами он действительно пытается запросить имя сотрудника как следует.

//Week 3 Assignment 
package weeklypay2; 

import java.util.Scanner; // importing the Java utility class scanner 

public class WeeklyPay2 // class WeeklyPay 
{ 
    //main method 
    public static void main(String[] args) 
    { 
     Scanner Scanner = new Scanner(System.in); 
     Scanner Scanner1 = new Scanner(System.in); 

     String employee_name = null; // variable for employee name 
     double hours_worked = 0, // variable for weekly hours worked 
     pay_rate = 0, // variable for pay rate per hour 
     weekly_pay = 0; // weekly pay = hours * pay_rate 

     while (employee_name!="stop") 
     { 
      System.out.println(""); 
      System.out.println("Employee Name"); // prompt, employees name 
      employee_name = Scanner1.nextLine(); 

      if (employee_name.equalsIgnoreCase("stop")) 
      { 
       System.out.print("Exiting Program"); 
       break; 
      } // ends if statement 
      else 
      { 
       System.out.println("Enter the hours worked for the week"); 
       //prompt, hours worked for the current week 
       pay_rate = Scanner.nextDouble(); 

       while(pay_rate < 0.01) 
       { 
        System.out.print("ERROR!!, Input a postive number: \n"); 
        pay_rate = Scanner.nextDouble(); 
       } 

       System.out.println("Enter the employees hourly pay rate"); 
       // prompt, the employees pay rate 
       hours_worked = Scanner.nextDouble(); 

       while(hours_worked < 0.01) 
       { 
        System.out.print("ERROR!!, Input a postive number: \n"); 
        hours_worked = Scanner.nextDouble(); 
       } 

       weekly_pay = (double) hours_worked * (double) pay_rate; // setting the variable weekly_pay 
       System.out.println(employee_name + "'s weekly pay is $" + weekly_pay); // output the employees name and weekly pay 
      } 
     } 
     Scanner.close(); 
     Scanner1.close(); 
    } //ends main method 
} //ends class WeeklyPay 
+2

'while (employee_name! =" Stop ")' прочитайте это: [Как сравнить строки в java?] (Http://stackoverflow.com/q/26854645) – Tom

+0

@Tom Я неправильно понял вопрос. Виноват. –

+0

@VinceEmigh Ok :). Его проблема решена в первом вопросе, который я связал (просто, если хотите узнать ответ также). – Tom

ответ

1

Ну первое, что я хотел бы сказать, это быть осторожным именования сканера. Не начинайте с капитала. Теперь большое дело в том, что вы не хотите сравнивать строки, используя! =, Это не предназначено для строковых переменных. Существует интересный метод сравнения строк, который будет .equals() или .equalsIgnoreCase() в зависимости от того, хотите ли вы его нечувствительным к регистру. Теперь, после изменения этих нескольких вещей в вашем коде, он работает отлично. Кроме того, только голова Java также включает метод форматирования валюты. В номерах с платой отсутствует десятичная цифра. Если вы посмотрите на NumberFormat, который я добавил после сканера, а затем посмотрим на println в конце, вы увидите его очень простую в использовании.

import java.text.NumberFormat; 
    import java.util.Scanner; // importing the Java utility class scanner 

    public class WeeklyPay2 // class WeeklyPay 
    { 
//main method 
public static void main(String[] args) 
{ 
    Scanner scanner = new Scanner(System.in); 
    NumberFormat format = NumberFormat.getCurrencyInstance(); 
    String employee_name = ""; 
    double hours_worked = 0, // variable for weekly hours worked 
    pay_rate = 0, // variable for pay rate per hour 
    weekly_pay = 0; // weekly pay = hours * pay_rate 

    while (!employee_name.equalsIgnoreCase("stop")) 
    { 

     System.out.println(); 
     System.out.print("Employee Name: "); 

     employee_name = scanner.nextLine(); 

     if (employee_name.equalsIgnoreCase("stop")) 
     { 
      System.out.print("Exiting Program"); 
      break; 
     } // ends if statement 
     else 
     { 
      System.out.print("Enter the hours worked for the week: "); 
      //prompt, hours worked for the current week 
      pay_rate = scanner.nextDouble(); 

      while(pay_rate < 0.01) 
      { 
       System.out.print("ERROR!!, Input a postive number: "); 
       pay_rate = scanner.nextDouble(); 
      } 

      System.out.print("Enter the employees hourly pay rate: "); 
      // prompt, the employees pay rate 
      hours_worked = scanner.nextDouble(); 

      while(hours_worked < 0.01) 
      { 
       System.out.print("ERROR!!, Input a postive number: \n"); 
       hours_worked = scanner.nextDouble(); 
      } 

      weekly_pay = (double) hours_worked * (double) pay_rate; // setting the variable weekly_pay 
      System.out.println(employee_name + "'s weekly pay is: " + format.format(weekly_pay)); // output the employees name and weekly pay 
      scanner.nextLine(); 
     } 
    } 
    scanner.close(); 

} //ends main method 
} //ends class WeeklyPay 

И это выход мы видим:

enter image description here

О, PS: Держите уборщика программы, побуждая для входа на той же линии, более интуитивным и лучше смотреть на , Обязательно добавьте разрыв строки после ввода, но не раньше :)

+1

Теперь вы больше не можете вводить полное имя сотрудника. – Tom

+1

Ah @ Ты был прав, сэр. Все исправлено сейчас! См. Править OP. Перейдите в nextLine(), как сказано, но в конце цикла добавьте scanner.next(), чтобы отбросить все нежелательные файлы :) – basic

1

использование Scanner1.nextLine() после получения значения отработанных часов.

Refer модифицированный код ниже:

import java.util.Scanner; // importing the Java utility class scanner 

public class WeeklyPay2 // class WeeklyPay 
{ 
    //main method 
    public static void main(String[] args) { 

     Scanner Scanner1 = new Scanner(System.in); 

     String employee_name = null; // variable for employee name 
     double hours_worked = 0, // variable for weekly hours worked 
       pay_rate = 0, // variable for pay rate per hour 
       weekly_pay = 0; // weekly pay = hours * pay_rate 

     //Scanner1.useDelimiter("//n"); 
     while (true) { 

      System.out.println(""); 
      System.out.println("Employee Name"); // prompt, employees name 

      employee_name = Scanner1.nextLine(); 

      if (employee_name.equalsIgnoreCase("stop")) 

      { 

       System.out.print("Exiting Program"); 

       break; 

      }// ends if statement 

      else { 

       System.out.println("Enter the hours worked for the week"); 
//prompt, hours worked for the current week 
       pay_rate = Scanner1.nextDouble(); 

       while (pay_rate < 0.01) { 
        System.out.print("ERROR!!, Input a postive number: \n"); 
        pay_rate = Scanner1.nextDouble(); 
       } 

       System.out.println("Enter the employees hourly pay rate"); 
       // prompt, the employees pay rate 
       hours_worked = Scanner1.nextDouble(); 

       while (hours_worked < 0.01) { 
        System.out.print("ERROR!!, Input a postive number: \n"); 
        hours_worked = Scanner1.nextDouble(); 
        //Scanner1. 
       } 

       Scanner1.nextLine(); 
       weekly_pay = (double) hours_worked * (double) 
         pay_rate; // setting the variable weekly_pay 

       System.out.println(employee_name + "'s weekly pay is $" + weekly_pay); // output the employees name and weekly pay 

      } 
     } 

     Scanner1.close(); 

    } //ends main method 


}//ends class WeeklyPay 
Смежные вопросы