1

こんにちは、私は Java を初めて使用し、現在、生徒の名前とマーク メニューを作成しようとしていますが、add メソッドに問題があります。これは配列に関係していると思いますが、理解できません。アウト、任意の助けをいただければ幸いです。

以下は私のunitResult方法です

public class UnitResults 
{
    private String unitTitle;
    private String [] fName;
    private String [] surname;
    //private String [] UnitResults;
    private int [] Marks;
    private int Mark;

    private int pointer ;

    private static String course = "HND Computing"; 

    public UnitResults(int Size,String title)
    {            
        this.fName = new String [Size];
        this.surname = new String [Size];
        this.Marks = new int [Size];
        pointer = 0;

        fName[pointer] = "Daniel";
        surname[pointer] = "Scullion";

        Marks[pointer] = 60;
        unitTitle  = title;

        pointer ++;
    }

    public Boolean add( String tempfName, String tempsName, int newGrade)
    { 
        if (pointer == fName.length)
        {
            System.out.println("The Students Database is full");
            return false;
        }

        else
        {
            fName [pointer] = tempfName;
            surname [pointer]  = tempsName;
            Marks[pointer] = newGrade;

            pointer ++;
            return true;
        }
    }// end Add

しかし、以下のメニューシステムを使用してこれを追加しようとすると

int option = 0;
option = menuSystem();

while (option != 6)
{
    System.out.println("");
    switch(option)
    {
    case 1:
        System.out.println(" Please Enter The Students First Name");
        String tempfName = keyb.nextLine();

        System.out.println("Please Enter The Students Last Name");
        String tempsName = keyb.nextLine();

        System.out.println(" Please Enter The Students Mark");
        int newGrade = keyb.nextInt();
        myUnit.add(tempfName, tempfName,newGrade);   

        break;

オプション1を入力すると、得られる出力は次のとおりです。

Please Enter The Students First Name

Please Enter The Students Last Name

ここで何が問題なのか、長い間探していたアイデアは、おそらく単純なものですが、私にはわかりません:/

編集:以下は私のメニュークラスです

import java.util.Scanner;

public class MenuResults {
    static Scanner keyb = new Scanner(System.in);

    public static int menuSystem()
    {
        System.out.println("*********************************");
        System.out.println("                                 ");
        System.out.println("1.Add New Student");
        System.out.println("2.Display Students Details");
        System.out.println("3.Delete a Students");
        System.out.println("4.Update Student Details");
        System.out.println("5.Sort Students By Mark");
        System.out.println("6.Sort Students By Surname");
        System.out.println("7.Search For A Student");
        System.out.println("                                 ");
        System.out.println("**********************************");

        System.out.print("\n Enter choice:");
        int option = keyb.nextInt();
        return option;
    }

    public static void main(String[] args) {
        UnitResults myUnit = new UnitResults(3, "Java");

        int option = 0;
        option = menuSystem();

        while (option != 6)
        {
            System.out.println("");
            switch(option)
            {
            case 1:                   

                System.out.println(" Please Enter The Students First Name");
                String tempfName = keyb.nextLine();

                System.out.println("Please Enter The Students Last Name");
                String tempsName = keyb.nextLine();

                System.out.println(" Please Enter The Students Mark");
                int newGrade = keyb.nextInt();
                myUnit.add(tempfName, tempsName,newGrade);   

                break;
            case 2:
                myUnit.display();
                break;
            case 3:

                break;
            case 4:

                break;
            case 5:

            case 6:

                break;
            default:
                System.out.println(" Invalid Entry");
            }//end switch 
        }
    }
}

求められたメニュークラス全体があります。

編集:ユーザー入力を忘れて、次を使用してハード入力した場合:myUnit.add("John","tommy",12);

"Student Database is full"100回くらい当たります..

4

2 に答える 2

0

メニューを使用して入力すると、1ENTERのキャリッジリターン(\nENTERがまだ存在しているScannerと推測されますnextInt()

したがって、次の呼び出しはその行に(残りの)をreadLine()使用し、ユーザー入力を待ちません。\nENTER

可能な修正:

public static int menuSystem()
{
    final Scanner keyb = new Scanner(System.in);
    // ...
}

public static void main(String[] args) {
    final UnitResults myUnit = new UnitResults(3, "Java");
    int option = menuSystem();
    while (option != 6) {
        final Scanner keyb = new Scanner(System.in);
        // ...
        option = menuSystem();
    }
}

そして静的kbd宣言の削除

于 2012-12-09T20:20:10.203 に答える
0

より良い解決策は、行末トークンを処理するために呼び出しkeyb.nextLine()た後に単純に呼び出すことです。keyb.nextInt()これを非常に単純に変更します。

System.out.println(" Please Enter The Students Mark");
int newGrade = keyb.nextInt();
myUnit.add(tempfName, tempsName,newGrade);  

これに:

System.out.println(" Please Enter The Students Mark");
int newGrade = keyb.nextInt();
keyb.nextLine();  // ****** add this *******
myUnit.add(tempfName, tempsName,newGrade);  
于 2012-12-09T21:20:31.523 に答える