私のプログラム全体で一つだけのスキャナオブジェクトを作成する方法

ジャッキー:

一つだけ作成する方法Scanner自動テストは、あなたのプログラムが例外を生成して終了しますので、私のプログラム全体のオブジェクトを。その理由は、自動テストにおいて、テスト入力の複数の行がプログラムに一斉送信されることです。これは、原因となるerror.Exception「メイン」のスレッドをjava.util.NoSuchElementException

import java.util.Scanner;


public class NimPlayer
{
    public NimPlayer()
    {

    Scanner Keyboard=new Scanner(System.in);
    System.out.println("Please enter Player 1's name:"  );
    String NameofPlayer1=Keyboard.nextLine();
    System.out.println();


    System.out.println("Please enter Player 2's name:"  );
    String NameofPlayer2=Keyboard.nextLine();
    System.out.println();


    do {

    System.out.println("Please enter upper bound of stone removal:");
    int Upperbound=Keyboard.nextInt();
    System.out.println();


    System.out.println("Please enter initial number of stones:");
    int InitialNum=Keyboard.nextInt();


    removeStone(NameofPlayer1,NameofPlayer2,InitialNum,Upperbound);

    System.out.println();
    System.out.println("Do you want to play again(Y/N):");
    }while(Keyboard.next().equalsIgnoreCase("Y"));
}


    public static void removeStone(String NameofPlayer1,String NameofPlayer2,int InitialNum,int Upperbound)
    {
        Scanner Keyboard1=new Scanner(System.in);

        int Roundplayer=1;

        while(InitialNum>0)
        {
            System.out.println();           
            System.out.print(InitialNum+" "+ "stones left:");
            Star(InitialNum);
            System.out.println();

            if(Roundplayer>0)
            {       
                System.out.println(NameofPlayer1+ "'s turn-remove how many?");
                int NumofPlayer1=Keyboard.nextInt();

                while(NumofPlayer1>Upperbound)
                {
                    System.out.println("Larger than upper bound!" +"\nPlease enter it again\n");
                    break;
                }

                Roundplayer=Roundplayer-1;
                InitialNum=InitialNum-NumofPlayer1;
            }

            else 
            {
                System.out.println(NameofPlayer2+ "'s turn-remove how many?");
                int NumofPlayer2=Keyboard1.nextInt();
                Roundplayer=Roundplayer+1;
                InitialNum=InitialNum-NumofPlayer2;
                //System.out.print(InitialNum+ "stones left:");
                //Star(InitialNum);
            }
        }

        if(Roundplayer>0)
        {
            System.out.println();
            System.out.println("Game Over");
            System.out.println(NameofPlayer1+ " "+"wins");
        }
        else {
            System.out.println();
            System.out.println("Game Over");
            System.out.println(NameofPlayer2+ " "+"wins!");
        }   
    }


    public static void Star(int InitialNum )
    {
        for(int i=0; i<InitialNum; i++ )
        {
            System.out.printf(" "+"*");
        }
    }
}
アービンド・クマールのAvinash:

作成と削除Scannerコンストラクタやその他の方法から。インスタンス変数としてクラス内でそれを入れて、コンストラクタおよび他の方法の内側にそれを使用しています。

public class NimPlayer {
    Scanner keyboard = new Scanner(System.in);
    public NimPlayer() {
        // You can use keyboard here
    }

    public static void removeStone(String NameofPlayer1,String NameofPlayer2,int InitialNum,int Upperbound) {
        // You can use keyboard here
    }

    //...Other parts of the program
}

私はあなたが従うもお勧めのJavaの命名規則、あなたの変数名を例えばKeyboardなければなりませんkeyboard

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=393911&siteId=1