1

ラボの割り当てに関して問題があります。

私のプログラムがユーザーに入力を求めようとすると、プログラムは同じ行に 2 つの質問を出力し、2 番目の質問の入力のみを受け取ります。

私のプログラムの出力:

2 番目の従業員の名前を入力してください:2 番目の従業員の番号を入力してください:1

(それらは別々の行ではなく、同じ行に表示されます)

また、配列出力の出力は次のようになります。

0.00.00.00.00.00.00.00.00.00.0 

このような代わりに:

0, 0, 0, 0, 0, 0, 0, 0, 0, 0

これら2つの問題を修正する方法がよくわかりません。助けていただければ幸いです。

これが私のコードです:

従業員.java

//import java.util.*;

public class Employee
{
    private String empName;
    private int empNumber;
    private String empAddress;
    private double empSalary;

private double[] empBonus=new double[10];

public Employee(){}

public Employee(String empName_, int empNumber_, String empAddress_, double empSalary_, double[] empBonus_)
{
    this.empName=empName_;
    this.empNumber=empNumber_;
    this.empAddress=empAddress_;
    this.empSalary=empSalary_;

    this.empBonus=empBonus_;
}

public String getName()
{
    return this.empName;
}

public int getEmployeeNumber()
{
    return this.empNumber;
}

public String getAddress()
{
    return this.empAddress;
}

public double getSalary()
{
    return this.empSalary;
}

public String changeAddress(String chAddress)
{
    return empAddress=chAddress;
}

public double changeSalary(double chSalary)
{
    return empSalary=chSalary;
}

public String addBonus(double[] empBonus)
{
    String arrayBonus=new String("");

    for(int i=0; i<empBonus.length;i++)
    {
        arrayBonus+=empBonus[i];
    }

    return arrayBonus;
}

public String toString()
{
    return ("\nEmployee's name: "+empName+"\nEmployee's Number: "+empNumber+"\nEmployee's address: "+empAddress+
            "\nEmployee's original salary: "+empSalary+ "\nEmployee's bonuses: "+addBonus(empBonus)+"\n");
}
}

EmployeeTester.java

import java.util.*;

public class EmployeeTester
{
public static void main(String[] args)
{
    Scanner in1=new Scanner(System.in);
    Scanner in2=new Scanner(System.in);
    Scanner in3=new Scanner(System.in);

    Employee emp1;
    Employee emp2;

    emp1=read_input("first", in1, in2, in3);
    emp2=read_input("second", in1, in2, in3);

    System.out.println(emp1.toString());
    System.out.println(emp2.toString());

}

public static Employee read_input(String msg, Scanner scan1, Scanner scan2, Scanner scan3)
{
    String name, address;
    int num;
    double salary;
    double[] bonus=new double[10];

    System.out.print("\nPlease enter the name of the "+msg+" employee:");
    name=scan1.nextLine();

    System.out.print("Please enter the number of the "+msg+" employee:");
    num=scan2.nextInt();

    System.out.print("Please enter the address of the "+msg+" employee:");
    address=scan1.nextLine();

    System.out.print("Please enter the salary of the "+msg+" employee:");
    salary=scan3.nextDouble();

    System.out.print("Please add a bonus for the "+msg+" employee:");
    bonus[0]=scan3.nextDouble();

    System.out.print("Add more bonuses to the "+msg+"employee? (y/n) \nNote: Enter 0.0 if you would like to terminate adding more bonuses: ");

    if(scan1.next().startsWith("y"))
    {
        for(int i=1; i<bonus.length;i++)
        {
            System.out.print("Continue entering a bonus to "+msg+" employee:");
            bonus[i]=scan3.nextDouble();

            if(bonus[i]==0.0 || i==bonus.length)
            {
                break;
            }
        }
    }   

    return new Employee(name, num, address, salary, bonus);
}
}
4

2 に答える 2

2

Scanners最初の問題については、メソッド内をシフトして、read_input毎回新しく開始するようにします。

public static void main(String[] args) {
    Employee emp1;
    Employee emp2;

    emp1 = read_input("first");

    emp2 = read_input("second");

    System.out.println(emp1.toString());
    System.out.println(emp2.toString());

}

public static Employee read_input(String msg) {
    Scanner scan1 = new Scanner(System.in);
    Scanner scan2 = new Scanner(System.in);
    Scanner scan3 = new Scanner(System.in);
    ...

2番目の問題についてはaddBonus、出力文字列を作成する方法で、スペースやコンマを追加していません。StringBuilderまた、新しい文字列オブジェクトを繰り返し作成するよりも、このタイプのループ連結に forを使用すると、はるかに効率的です。

public String addBonus(double[] empBonus)
{
    StringBuilder arrayBonus = new StringBuilder();

    for(int i=0; i<empBonus.length;i++)
    {
        arrayBonus.append(empBonus[i] + ", ");
    }

    return arrayBonus.toString();
}
于 2012-05-21T10:18:04.597 に答える
0

3 つの異なるスキャナーは必要ありません。1 つあれば十分です。

印刷部分については、改行が必要println()または使用'\n'します。

例えば:

System.out.println("Please enter the name of the "+msg+" employee:"); 
System.out.print("Please enter the name of the "+msg+" employee:\n"); 

最初のケースでは、出力テキストに改行を自動的に追加する関数 (println()の代わりに) を呼び出しています。print()2番目のケースでは、文字列の改行部分を作成しています(印刷された最初の行の先頭ですでに使用しています)

0.0値が浮動小数点値(あなたの場合)であるため、配列出力は使用doubleします。これは、デフォルトで小数部分を出力します。整数部分のみを出力するには、値を整数にキャストするか、double のフォーマットを使用する必要があります。

鋳造:

double a = 0.0;
System.out.print("'a' as integer: " + ((int)a));

フォーマット:

System.out.format("Here is a number: %.0f", a);

との間の数値は、出力する小数点以下の桁数.を指定します。f

于 2012-05-21T10:10:20.947 に答える