2013-03-04 32 views
0

我對於採用CS1的Java相對較新。我們已經使用了Scanner幾個星期,在典型情況下我比他們更舒適。我碰到了一個我無法弄清楚的地方,也沒有通過研究得到答案。掃描儀幫助 - 使用2個掃描儀方法和單個獲取方法

我有一個PayRoll計劃,我正在爲課堂建設。我們使用給出的三類變量:

  • employeeLastName
  • hoursWorkded
  • payRate

我做了3個獨立的setter方法以及一個設置所有三個方法的setter(使用所有四種方法的掃描儀)。

我沒有問題使用掃描儀獲取employeeLastName在自己的setter,但是當我用獲取三個的方法來做,而不是掃描名稱,它只是打印提示並跳到hoursWorked輸入。我不認爲我在那裏輸入的內容有任何錯誤。

在這一點上,我最大的問題是,如果甚至可以使用兩種不同的掃描器/輔助方法來執行setter,或者如果nextLine()與其他掃描器實用程序結合使用時會變得很有趣。以下是與此相關的代碼的重要摘錄。請讓我知道是否有其他需要。預先感謝任何幫助!

private double requestDoubleFromUser(Scanner sc , String prompt) 
{ 

    double userInput; 

    System.out.print(prompt); 
    userInput = sc.nextDouble(); 

    return userInput; 

} 

private String requestNameFromUser(Scanner sc , String prompt) 
{ 

    String nameInput; 

    System.out.print(prompt); 
    nameInput = sc.nextLine(); 

    return nameInput; 

     /***** Test of Employee 2 *****/ 

    displayEmployeeData("\n Default Pay Period Info for Employee 2", employeePayRoll2); 
    System.out.println("\n Please complete the employee's information to receive a period summary. "); 
    employeePayRoll2.setPayRoll(requestNameFromUser(sc, "\n Employee Name: ") , 
           requestDoubleFromUser(sc, "\n Hours Worked: ") , 
           requestDoubleFromUser(sc, " Rate of Pay: ")); 
    displayEmployeeData("\n Pay Period Data for Employee 2", employeePayRoll2); 

這是不起作用的部分。這裏是安裝程序:

public void setEmployeeLastName(String employeeLastName) 
{ 
    this.employeeLastName = employeeLastName; 
} 

public void setHoursWorked(double hoursWorked) 
{ 
    this.hoursWorked = hoursWorked; 
} 

public void setPayRate(double payRate) 
{ 
    this.payRate = payRate; 
} 

public void setPay(double hoursWorked , double payRate) 
{ 
    this.hoursWorked = hoursWorked; 
    this.payRate = payRate; 
} 

public void setPayRoll(String employeeLastName , double hoursWorked , double payRate) 
{ 
    this.employeeLastName = employeeLastName; 
    this.hoursWorked = hoursWorked; 
    this.payRate = payRate; 

回答

0

您不應該需要創建方法來詢問用戶輸入。只要創建一個主類,一個掃描儀對象(保持簡單),並收集所有類似的數據:

Scanner sc = new Scanner(System.in); 
double hoursWorked, payRate; 
String empLastName; 

System.out.println(prompt); //enter name 
empLastName = sc.nextLine(); 

System.out.println(prompt); //enter hrs worked 
hoursWorked = sc.nextDouble(); 

System.out.println(prompt();//enter payRate 
payRate = sc.nextDouble(); 

,然後,一旦你把所有的數據,把它傳遞給你的制定者:

employeePayRoll2.setPayRoll(empLastName, hoursWorked, payRate); 
+0

不幸的是,雖然我們有2個類(1個計算對象,另一個是測試器)。如果我被允許這樣做,但我們不應該這樣做。我們所教授的與我們的教授一起完成的主要方法是實例化測試對象。由於變量是私人的,但我無法直接使用其他班級的掃描儀更改其值。謝謝雖然這不起作用,但它在大多數情況下仍然是一個很好的解決方案。我很欣賞它的這一方面。 – 2013-03-04 04:13:37

+0

那麼在測試儀中,是否給出了這些方法的參數或添加了掃描儀?我認爲這可能是一個問題時,通過掃描儀對象。嘗試在每個方法的主體中實例化掃描器。 – 2013-03-04 04:23:09

+0

是的它被另一種方法實例化。我會嘗試翻轉它,看看它是否有所作爲。 – 2013-03-04 04:30:47