web-dev-qa-db-ja.com

Javaでユーザー入力を取得する方法

計算機を作成しようとしましたが、 ユーザ入力を取得する方法 がわからないため、機能させることができません。

Javaでユーザー入力を取得する方法

293
Jtvd78

最も簡単な方法の1つは、以下のようにScannerオブジェクトを使用することです。

import Java.util.Scanner;

Scanner reader = new Scanner(System.in);  // Reading from System.in
System.out.println("Enter a number: ");
int n = reader.nextInt(); // Scans the next token of the input as an int.
//once finished
reader.close();
383
Marco Aviles

要件に基づいて、以下のオプションのいずれかを使用できます。

Scanner class

import Java.util.Scanner; 
Scanner scan = new Scanner(System.in);
String s = scan.next();
int i = scan.nextInt();

BufferedReader および InputStreamReader classes

import Java.io.BufferedReader;
import Java.io.InputStreamReader;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int i = Integer.parseInt(br.readLine());

DataInputStream class

import Java.io.DataInputStream;
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();

readLineクラスのDataInputStreamメソッドは、廃止予定です。文字列値を取得するには、BufferedReaderを使用して以前のソリューションを使用する必要があります。


Console class

import Java.io.Console;
Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());

どうやら、このメソッドはいくつかのIDEでうまく機能しません。

305
Richie

Scanner クラスまたはConsoleクラスを使用できます。

Console console = System.console();
String input = console.readLine("Enter input:");
44
objects

BufferedReader を使用してユーザー入力を取得できます。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String accStr;  

System.out.println("Enter your Account number: ");
accStr = br.readLine();

これはStringの値をaccStrに格納するため、 Integer.parseInt を使用してintに解析する必要があります。

int accInt = Integer.parseInt(accStr);
19
Chirag

キーボード入力を取得する方法は次のとおりです。

Scanner scanner = new Scanner (System.in);
System.out.print("Enter your name");  
name = scanner.next(); // Get what the user types.
16
Abdel Raoof

簡単なプログラムを作成してユーザーの名前を尋ね、返信に使用された内容を印刷することができます。

または、2つの数字を入力するようにユーザーに要求し、それらの数字を加算、乗算、減算、または除算して、計算機の動作と同じようにユーザー入力の回答を印刷できます。

だからあなたはScannerクラスが必要です。あなたはimport Java.util.Scanner;とあなたが使用する必要があるコードでなければなりません

Scanner input = new Scanner(System.in);

入力は変数名です。

Scanner input = new Scanner(System.in);

System.out.println("Please enter your name : ");
s = input.next(); // getting a String value

System.out.println("Please enter your age : ");
i = input.nextInt(); // getting an integer

System.out.println("Please enter your salary : ");
d = input.nextDouble(); // getting a double

input.next();i = input.nextInt();d = input.nextDouble();の違いを見てください。

Stringによると、intとdoubleは他のものと同じように変化します。コードの先頭にあるimport文を忘れないでください。

ブログ記事 "スキャナクラスとユーザ入力の取得" もご覧ください。

14
user3598655

行または文字列を読み込むには、次のようにBufferedReaderオブジェクトをInputStreamReaderオブジェクトと組み合わせて使用​​できます。

BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
String inputLine = bufferReader.readLine();
8
Ke Sun

ここでは、プログラムはユーザーに番号の入力を求めます。その後、プログラムは数字の数字と数字の合計を印刷します。

import Java.util.Scanner;

public class PrintNumber {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = 0;
        int sum = 0;

        System.out.println(
            "Please enter a number to show its digits");
        num = scan.nextInt();

        System.out.println(
            "Here are the digits and the sum of the digits");
        while (num > 0) {
            System.out.println("==>" + num % 10);
            sum += num % 10;
            num = num / 10;   
        }
        System.out.println("Sum is " + sum);            
    }
}
8
Miasar

これがJava.util.Scannerを使った質問からのあなたのプログラムです:

import Java.util.Scanner;

public class Example {
    public static void main(String[] args) {
        int input = 0;
        System.out.println("The super insano calculator");
        System.out.println("enter the corrosponding number:");
        Scanner reader3 = new Scanner(System.in);
        System.out.println(
            "1. Add | 2. Subtract | 3. Divide | 4. Multiply");

        input = reader3.nextInt();

        int a = 0, b = 0;

        Scanner reader = new Scanner(System.in);
        System.out.println("Enter the first number");
        // get user input for a
        a = reader.nextInt();

        Scanner reader1 = new Scanner(System.in);
        System.out.println("Enter the scend number");
        // get user input for b
        b = reader1.nextInt();

        switch (input){
            case 1:  System.out.println(a + " + " + b + " = " + add(a, b));
                     break;
            case 2:  System.out.println(a + " - " + b + " = " + subtract(a, b));
                     break;
            case 3:  System.out.println(a + " / " + b + " = " + divide(a, b));
                     break;
            case 4:  System.out.println(a + " * " + b + " = " + multiply(a, b));
                     break;
            default: System.out.println("your input is invalid!");
                     break;
        }
    }

    static int      add(int lhs, int rhs) { return lhs + rhs; }
    static int subtract(int lhs, int rhs) { return lhs - rhs; }
    static int   divide(int lhs, int rhs) { return lhs / rhs; }
    static int multiply(int lhs, int rhs) { return lhs * rhs; }
}
6
user2505442

もう1つだけ詳しく説明します。あなたがメモリ/リソースリークを危険にさらしたくない場合は、終了したらスキャナストリームを閉じるべきです:

myScanner.close();

Java 1.7以降ではこれをコンパイルの警告として捉えていることに注意してください(私がどうやってそれを知っているのか尋ねないでください:-)

5
Dave Hentchel
スキャナ入力=新しいスキャナ(System.in);
 int integer = input.nextInt(); 
文字列string = input.next(); 
 long longInteger = input.nextLong(); 
5
Arrow

入力を取得するにはSystemクラスを使用します。

http://fresh2refresh.com/Java-tutorial/Java-input-output/

キーボードからどのようにデータが受け入れられますか?

3つのオブジェクトが必要です

  1. System.in
  2. InputStreamReader
  3. BufferedReader

    • InputStreamReaderとBufferedReaderは、Java.ioパッケージのクラスです。
    • データは、InputStreamオブジェクトであるSystem.inによってキーボードからバイトの形式で受信されます。
    • その後、InputStreamReaderはバイトを読み取り、それらを文字にデコードします。
    • その後、BufferedReaderオブジェクトは文字入力ストリームからテキストを読み取り、文字、配列、および行を効率的に読み取るために文字をバッファリングします。
InputStreamReader inp = new InputStreamReader(system.in);
BufferedReader br = new BufferedReader(inp);
5
Surendren
import Java.util.Scanner; 

class Daytwo{
    public static void main(String[] args){
        System.out.println("HelloWorld");

        Scanner reader = new Scanner(System.in);
        System.out.println("Enter the number ");

        int n = reader.nextInt();
        System.out.println("You entered " + n);

    }
}
4
coder

最良の2つのオプションはBufferedReaderScannerです。

最も広く使われている方法はScannerであり、私はそれが単純で実装が簡単であること、そしてテキストを原始データにパースする強力な有用性のために私は個人的にそれを好みます。

スキャナを使用する利点

  • Scannerクラスを使いやすい
  • 数字の簡単入力(int、short、byte、float、long、double)
  • 例外がチェックされていない方が便利です。文明化し、例外を指定または捕捉するのはプログラマーの責任です。
  • 行、空白、および正規表現で区切られたトークンを読み取ることができます

BufferedInputStreamの利点


全体的に各入力メソッドは異なる目的を持っています。

  • 大量のデータを入力している場合は、BufferedReaderが良いでしょう。

  • あなたがたくさんの数を入力しているならScannerは自動解析をするのでとても便利です。

もっと基本的な使い方としては、Scannerを使うのがより簡単でプログラムを書くのも簡単なのでお勧めします。これはScannerを作成する方法の簡単な例です。以下にScannerの使い方の包括的な例を示します。

Scanner scanner = new Scanner (System.in); // create scanner
System.out.print("Enter your name");       // Prompt user
name = scanner.next();                     // get user input

BufferedReaderに関するさらなる情報は BufferedReader の使い方と Charsの行の読み方 をご覧ください。)


Java.util.Scanner

import Java.util.InputMismatchException; // import the exception catching class
import Java.util.Scanner; // import the scanner class

public class RunScanner {

    // main method which will run your program
    public static void main(String args[]) {

        // create your new scanner
        // Note: since scanner is opened to "System.in" closing it will close "System.in". 
        // Do not close scanner until you no longer want to use it at all.
        Scanner scanner = new Scanner(System.in);

        // Prompt THE USER
        // Note: when using scanner it is recommended to Prompt the user with "System.out.print" or "System.out.println"
        System.out.println("Please enter a number");

        // use "try" to catch invalid inputs
        try {

            // get integer with "nextInt()"
            int n = scanner.nextInt();


            System.out.println("Please enter a decimal"); // Prompt
            // get decimal with "nextFloat()"
            float f = scanner.nextFloat();


            System.out.println("Please enter a Word"); // Prompt
            // get single Word with "next()"
            String s = scanner.next();

            // ---- Note: Scanner.nextInt() does not consume a nextLine character /n 
            // ---- In order to read a new line we first need to clear the current nextLine by reading it:
            scanner.nextLine(); 
            // ----
            System.out.println("Please enter a line"); // Prompt
            // get line with "nextLine()"
            String l = scanner.nextLine();


            // do something with the input
            System.out.println("The number entered was: " + n);
            System.out.println("The decimal entered was: " + f);
            System.out.println("The Word entered was: " + s);
            System.out.println("The line entered was: " + l);


        }
        catch (InputMismatchException e) {
            System.out.println("\tInvalid input entered. Please enter the specified input");
        }

        scanner.close(); // close the scanner so it doesn't leak
    }
}

注:ConsoleDataInputStreamなどの他のクラスも実行可能な選択肢です。

Consoleには、パスワードの読み取り機能などの強力な機能がいくつかありますが、すべてのIDE(Eclipseなど)で利用できるわけではありません。これが発生する理由は、Eclipseがアプリケーションをシステムコンソールのトップレベルプロセスとしてではなくバックグラウンドプロセスとして実行するためです。 Consoleクラスの実装方法に関する有用な例へのリンク です。

DataInputStreamは主に、基礎となる入力ストリームから、マシンに依存しない方法で入力をプリミティブデータ型として読み取るために使用されます。 DataInputStreamは通常バイナリデータの読み込みに使われます。特定のデータ型を読み込むための便利なメソッドも提供します。例えば、その中に任意の数の行を含むことができるUTFストリングを読み取るためのメソッドがあります。

しかし、それはより複雑なクラスであり実装するのが難しいので初心者にはお勧めできません。 これはDataInputStreamを実装する方法の便利な例へのリンク です。

3
JFreeman

これは、2つの一般的なニーズに対応した、受け入れられた答えのより発展したバージョンです。

  • 終了値が入力されるまでユーザー入力を繰り返し収集する
  • 無効な入力値(この例では整数以外)を処理する

コード

package inputTest;

import Java.util.Scanner;
import Java.util.InputMismatchException;

public class InputTest {
    public static void main(String args[]) {
        Scanner reader = new Scanner(System.in);
        System.out.println("Please enter integers. Type 0 to exit.");

        boolean done = false;
        while (!done) {
            System.out.print("Enter an integer: ");
            try {
                int n = reader.nextInt();
                if (n == 0) {
                    done = true;
                }
                else {
                    // do something with the input
                    System.out.println("\tThe number entered was: " + n);
                }
            }
            catch (InputMismatchException e) {
                System.out.println("\tInvalid input type (must be an integer)");
                reader.nextLine();  // Clear invalid input from scanner buffer.
            }
        }
        System.out.println("Exiting...");
        reader.close();
    }
}

Please enter integers. Type 0 to exit.
Enter an integer: 12
    The number entered was: 12
Enter an integer: -56
    The number entered was: -56
Enter an integer: 4.2
    Invalid input type (must be an integer)
Enter an integer: but i hate integers
    Invalid input type (must be an integer)
Enter an integer: 3
    The number entered was: 3
Enter an integer: 0
Exiting...

nextLine()がないと、不正な入力が無限ループ内で同じ例外を繰り返し引き起こすことに注意してください。状況に応じて代わりにnext()を使用することをお勧めしますが、this has spacesのような入力は複数の例外を生成することを知っています。

3
MarredCheese

Javaで入力するのはとても簡単です。あなたがしなければならないのは、以下のことです。

import Java.util.Scanner;

class GetInputFromUser
{
    public static void main(String args[])
    {
        int a;
        float b;
        String s;

        Scanner in = new Scanner(System.in);

        System.out.println("Enter a string");
        s = in.nextLine();
        System.out.println("You entered string " + s);

        System.out.println("Enter an integer");
        a = in.nextInt();
        System.out.println("You entered integer " + a);

        System.out.println("Enter a float");
        b = in.nextFloat();
        System.out.println("You entered float " + b);
    }
}
3
akashfugtu
import Java.util.Scanner;

public class Myapplication{
     public static void main(String[] args){
         Scanner in = new Scanner(System.in);
         int a;
         System.out.println("enter:");
         a = in.nextInt();
         System.out.println("Number is= " + a);
     }
}
3
user3503711
Scanner input = new Scanner(System.in);
String inputval = input.next();
3
Scott

main()の横にthrows IOExceptionを追加し、

DataInputStream input = new DataInputStream(System.in);
System.out.print("Enter your name");
String name = input.readLine();
3
user2299134

このようなことができます...

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);

    System.out.println("Enter a number: ");
    int i = reader.nextInt();
    for (int j = 0; j < i; j++)
        System.out.println("I love Java");
}
2
Amarjit Datta

BufferedReaderを使用して、このようなユーザー入力を取得できます。

    InputStreamReader inp = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(inp);
    // you will need to import these things.

これはあなたがそれらを適用する方法です

    String name = br.readline(); 

そのため、ユーザーが自分の名前をコンソールに入力すると、 "String name"がその情報を格納します。

それがあなたが保存したい数字であるならば、コードはこのようになります:

    int x = Integer.parseInt(br.readLine());

これは助けになります!

2
Radek Martinez

私は以下が好きです:

public String readLine(String tPromptString) {
    byte[] tBuffer = new byte[256];
    int tPos = 0;
    System.out.print(tPromptString);

    while(true) {
        byte tNextByte = readByte();
        if(tNextByte == 10) {
            return new String(tBuffer, 0, tPos);
        }

        if(tNextByte != 13) {
            tBuffer[tPos] = tNextByte;
            ++tPos;
        }
    }
}

そして、例えば、私はします:

String name = this.readLine("What is your name?")
1
Crt

これはSystem.in.read()関数を使う簡単なコードです。このコードは、入力された内容をすべて書き出します。一度だけ入力したい場合はwhileループを削除できます。また、必要に応じて文字配列に回答を格納することもできます。

package main;

import Java.io.IOException;

public class Root 
{   
    public static void main(String[] args)
    {
        new Root();
    }

    public Root()
    {
        while(true)
        {
            try
            {
                for(int y = 0; y < System.in.available(); ++y)
                { 
                    System.out.print((char)System.in.read()); 
                }
            }
            catch(IOException ex)
            {
                ex.printStackTrace(System.out);
                break;
            }
        }
    }   
}    
1
Zac

他の人が投稿したように、Scannerを使ったキーボード入力が可能です。しかし、これらの高度にグラフィックの時代には、グラフィカルユーザーインターフェース(GUI)なしで計算機を作ることは無意味です。

現代のJavaでは、これは Scene Builder のようなJavaFXドラッグアンドドロップツールを使用して、計算機のコンソールに似たGUIをレイアウトすることを意味します。 Scene Builderを使用するのは直感的に簡単で、そのイベントハンドラのために追加のJavaスキルを必要としないことに注意してください。

ユーザー入力の場合は、GUIコンソールの上部に広いTextFieldがあります。

これは、ユーザーが機能を実行したい番号を入力する場所です。 TextFieldの下には、基本的な(加算/減算/乗算/除算、メモリ/呼び出し/消去)機能を実行する一連の機能ボタンがあります。 GUIが表示されたら、各ボタン機能をそのJava実装にリンクする「コントローラ」参照を追加できます。たとえば、プロジェクトのコントローラクラスのmethodの呼び出しなどです。

このビデオ は少し古くなっていますが、Scene Builderの使い方がまだ簡単であることを示しています。

0
Trunk

Scannerを使用してユーザー入力を取得できます。 Stringの場合はnext()Integerの場合はnextInt()のように、さまざまなデータ型に対して適切なメソッドを使用して、適切な入力検証を使用できます。

import Java.util.Scanner;

Scanner scanner = new Scanner(System.in);

//reads the input until it reaches the space
System.out.println("Enter a string: ");
String str = scanner.next();
System.out.println("str = " + str);

//reads until the end of line
String aLine = scanner.nextLine();

//reads the integer
System.out.println("Enter an integer num: ");
int num = scanner.nextInt();
System.out.println("num = " + num);

//reads the double value
System.out.println("Enter a double: ");
double aDouble = scanner.nextDouble();
System.out.println("double = " + aDouble);


//reads the float value, long value, boolean value, byte and short
double aFloat = scanner.nextFloat();
long aLong = scanner.nextLong();
boolean aBoolean = scanner.nextBoolean();
byte aByte = scanner.nextByte();
short aShort = scanner.nextShort();

scanner.close();
0
Pradip Karki