วิธีรับอินพุตผู้ใช้ใน Java


317

ฉันพยายามที่จะสร้างเครื่องคิดเลข, แต่ฉันไม่สามารถได้รับมันในการทำงานเพราะผมไม่ทราบว่าจะได้รับการป้อนข้อมูลของผู้ใช้

ฉันจะรับอินพุตผู้ใช้ใน Java ได้อย่างไร


8
เอ่อคำถามของคุณคืออะไร? คุณเพิ่งโพสต์รหัสและบอกว่าคุณไม่ชอบพอยน์เตอร์ การไม่เข้าใจพอยน์เตอร์ยังสามารถกลับมากัดคุณในภาษาจาวาได้หากคุณไม่เข้าใจการอ้างอิงและการผ่านค่า
Scott

4
คุณควรลองเรียนรู้การอ่านหนังสือภาษาจาวา, Java วิธีการโปรแกรม, 7 / e เป็นคนดี
มาร์โกอาวิเลส์

คำตอบ:


333

คุณสามารถใช้ตัวเลือกต่อไปนี้ตามข้อกำหนด

Scanner ชั้น

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

BufferedReaderและInputStreamReaderชั้นเรียน

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

DataInputStream ชั้น

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

readLineวิธีจากDataInputStreamระดับได้รับการเลิกใช้ ในการรับค่า String คุณควรใช้โซลูชันก่อนหน้านี้กับ BufferedReader


Console ชั้น

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

เห็นได้ชัดว่าวิธีนี้ใช้ไม่ได้กับ IDE บางตัว


4
โปรดทราบว่าDataInputStreamสำหรับการอ่านข้อมูลไบนารี การใช้readInton System.inไม่ได้วิเคราะห์จำนวนเต็มจากข้อมูลตัวอักษรมันจะตีความค่า unicode และคืนค่าไร้สาระแทน ดูDataInput#readIntรายละเอียด ( DataInputStreamดำเนินการDataInput)
Radiodef

3
นี่เป็นสิ่งที่ยอดเยี่ยมฉันชอบที่จะเห็นการนำเข้าที่ต้องการเพิ่มเข้ามาเพื่อความสมบูรณ์ มันจะช่วยผู้ที่ต้องการมันด้วย
KnightHawk

1
คำตอบนี้จะเป็นประโยชน์มากขึ้นหากกล่าวถึงข้อกำหนดที่เป็นจริง ฉันได้รับรางวัลเพื่อพยายามแก้ไขปัญหานี้
temporary_user_name

405

หนึ่งในวิธีที่ง่ายที่สุดคือการใช้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();

13
หากคุณปิดวัตถุสแกนเนอร์ที่เปิดเป็น System.in คุณจะไม่สามารถเปิด System.in ได้อีกครั้งจนกว่าโปรแกรมจะเสร็จสิ้น
ksnortum

@ksnortum ฉันสามารถเปิดอีกครั้งโดยScanner reader1 = new Scanner(System.in);?
Abhijit Jagtap

ลองมัน. ฉันไม่คิดอย่างนั้น
ksnortum

1
ใช่ ksnortum ถูกต้องคุณจะได้รับ NoSuchElementException คำถามที่เกี่ยวข้องค่อนข้างมีประโยชน์เกี่ยวกับสาเหตุที่คุณไม่สามารถเปิด System.in อีกครั้งหลังจากปิดแล้ว
temporary_user_name

45

คุณสามารถใช้คลาสสแกนเนอร์หรือคลาสคอนโซล

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

55
ฉันคิดว่า System.console จะคืนค่า null หากโค้ดนี้รันจาก eclipse
ชนะ Coder

13
ฉันเชื่อว่านี่จะส่งคืนข้อผิดพลาดจาก IDE เกือบทุกตัว ยืนยันว่า intelliJ กำลังมีปัญหาเดียวกัน
Dan Bradbury

1
แต่ทำไมถึงเป็นโมฆะในสุริยุปราคา?
Mark W

20

BufferedReaderคุณจะได้รับการป้อนข้อมูลของผู้ใช้โดยใช้

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

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

มันจะเก็บStringค่าในaccStrเพื่อให้คุณมีที่จะแยกไปยังใช้intInteger.parseInt

int accInt = Integer.parseInt(accStr);

17

นี่คือวิธีที่คุณจะได้รับอินพุตคีย์บอร์ด:

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

14

คุณสามารถสร้างโปรแกรมอย่างง่ายเพื่อขอชื่อผู้ใช้และพิมพ์สิ่งที่เคยตอบกลับใช้อินพุต

หรือขอให้ผู้ใช้ป้อนตัวเลขสองตัวและคุณสามารถเพิ่มคูณลบหรือหารตัวเลขเหล่านั้นและพิมพ์คำตอบสำหรับอินพุตของผู้ใช้เช่นเดียวกับพฤติกรรมของเครื่องคิดเลข

ดังนั้นคุณต้องมีคลาสสแกนเนอร์ คุณต้อง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 จะแตกต่างกันไปตามวิธีเดียวกัน อย่าลืมคำชี้แจงการนำเข้าที่ด้านบนของรหัสของคุณ

ยังเห็นโพสต์บล็อก"ชั้นสแกนเนอร์และได้รับปัจจัยการผลิตของผู้ใช้"


12

ที่ดีที่สุดของสองตัวเลือกและBufferedReaderScanner

วิธีที่ใช้กันอย่างแพร่หลายที่สุดคือScannerและโดยส่วนตัวแล้วผมชอบวิธีนี้เนื่องจากความเรียบง่ายและใช้งานง่ายรวมถึงยูทิลิตี้ที่มีประสิทธิภาพในการแยกข้อความเป็นข้อมูลดั้งเดิม

ข้อดีของการใช้สแกนเนอร์

  • ใช้งานง่าย Scannerชั้นเรียน
  • ใส่ตัวเลขได้ง่าย(int, short, byte, float, long และ double)
  • ข้อยกเว้นจะไม่ถูกตรวจสอบซึ่งสะดวกกว่า มันขึ้นอยู่กับโปรแกรมเมอร์ที่จะได้รับอารยธรรมและระบุหรือจับข้อยกเว้น
  • สามารถอ่านบรรทัดช่องว่างสีขาวและโทเค็นที่คั่นด้วย regex

ข้อดีของ 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และดูสายการอ่านหนังสือของตัวอักษร )


java util สแกนเนอ

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
    }
}

หมายเหตุ: คลาสอื่นเช่นConsoleและDataInputStreamยังเป็นทางเลือกที่ทำงานได้

Consoleมีคุณสมบัติที่ทรงพลังบางอย่างเช่นความสามารถในการอ่านรหัสผ่านอย่างไรก็ตามไม่สามารถใช้งานได้กับทุก IDE (เช่น Eclipse) เหตุผลนี้เกิดขึ้นเนื่องจาก Eclipse ใช้งานแอปพลิเคชันของคุณเป็นกระบวนการพื้นหลังและไม่เป็นกระบวนการระดับบนสุดที่มีคอนโซลระบบ นี่คือลิงค์ไปยังตัวอย่างที่มีประโยชน์เกี่ยวกับวิธีการใช้Consoleคลาส

DataInputStreamส่วนใหญ่จะใช้สำหรับการอ่านอินพุตเป็นชนิดข้อมูลดั้งเดิมจากสตรีมอินพุตต้นแบบในวิธีที่ไม่ขึ้นกับเครื่อง DataInputStreamมักจะใช้สำหรับการอ่านข้อมูลไบนารี นอกจากนี้ยังมีวิธีการอำนวยความสะดวกสำหรับการอ่านข้อมูลบางประเภท ตัวอย่างเช่นมันมีวิธีการอ่าน UTF String ซึ่งสามารถมีจำนวนบรรทัดภายในใด ๆ

อย่างไรก็ตามมันเป็นคลาสที่ซับซ้อนและยากต่อการใช้ดังนั้นจึงไม่แนะนำสำหรับผู้เริ่มต้น นี่คือการเชื่อมโยงDataInputStreamที่จะเป็นตัวอย่างที่เป็นประโยชน์วิธีการดำเนินการ


ฉันจะไปข้างหน้าและโทรหาผู้ชนะที่นี่ คำตอบที่ดีงามส่วนใหญ่ถึงแม้ว่าฉันต้องการมันลึกลงไปในเมื่อฉันต้องการใช้DataInputStream- คำอธิบายที่มีฟังดูเหมือนกับกรณีการใช้งานสำหรับScanner: การอ่านข้อมูลในแบบดั้งเดิม นอกจากนี้หากมีใครบางคนกำลังอยู่ในขั้นตอนที่พวกเขาไม่รู้วิธีรับอินพุตของผู้ใช้ส่วนใหญ่พวกเขาก็ไม่เข้าใจว่าทำไมบางส่วนของไลบรารีมาตรฐานจึงไม่สามารถใช้งานได้ใน IDE บางตัว แน่นอนว่าเป็นกรณีสำหรับฉัน - ทำไมถึงConsoleใช้งานไม่ได้?
temporary_user_name

1
ขอขอบคุณสำหรับคำติชมของคุณฉันพยายามอัปเดตเพื่อเพิ่มความกระจ่างยิ่งขึ้น ดูquora.com/…และstackoverflow.com/questions/27601520/…
JFreeman

สมบูรณ์ ตอนนี้ตรงนี้เป็นคำตอบที่คำถามนี้ต้องการมาโดยตลอด หากมีเพียงบางวิธีที่ฉันสามารถไปที่ด้านบน
temporary_user_name

ดีทุกคนที่ยินดีที่จะเลื่อนลงจะได้รับคำตอบที่ดีและช้ามันก็จะขึ้นไป :)
23419

1
ขอบคุณ คำตอบที่ให้ข้อมูลอย่างละเอียด การเพิ่มtry-with-resourceจะทำให้ดีขึ้น
Sourabh

8

ที่นี่โปรแกรมขอให้ผู้ใช้ป้อนหมายเลข หลังจากนั้นโปรแกรมจะพิมพ์ตัวเลขของตัวเลขและผลรวมของตัวเลข

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

หากต้องการอ่านบรรทัดหรือสตริงคุณสามารถใช้BufferedReaderวัตถุที่รวมกับวัตถุInputStreamReaderดังต่อไปนี้:

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

6

นี่คือโปรแกรมของคุณจากคำถามที่ใช้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; }
}

3
ไม่จำเป็นต้องสร้างScannerวัตถุจำนวนมาก จะมีเพียงพอ
jub0bs

5

ใช้ Systemคลาสเพื่อรับอินพุต

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

ข้อมูลยอมรับจากคีย์บอร์ดอย่างไร?

เราต้องการวัตถุสามชิ้น

  1. System.in
  2. InputStreamReader
  3. BufferedReader

    • InputStreamReader และ BufferedReader เป็นคลาสในแพ็คเกจ java.io
    • ข้อมูลที่ได้รับในรูปแบบของไบต์จากแป้นพิมพ์โดย System.in ซึ่งเป็นวัตถุ InputStream
    • จากนั้น InputStreamReader จะอ่านไบต์และถอดรหัสเป็นอักขระ
    • จากนั้นในที่สุดวัตถุ BufferedReader จะอ่านข้อความจากกระแสข้อมูลป้อนอักขระอักขระบัฟเฟอร์เพื่อให้มีประสิทธิภาพในการอ่านอักขระอาร์เรย์และบรรทัด
InputStreamReader inp = new InputStreamReader(system.in);
BufferedReader br = new BufferedReader(inp);

1
System.in(int บรรทัดแรกของโค้ด) จะมีตัวพิมพ์ใหญ่Sสำหรับชื่อคลาส
KNU

5
สแกนเนอร์อินพุต = สแกนเนอร์ใหม่ (System.in);
จำนวนเต็ม int = input.nextInt ();
String string = input.next ();
longInteger ยาว = input.nextLong ();

5

เพียงหนึ่งรายละเอียดเพิ่มเติม หากคุณไม่ต้องการเสี่ยงต่อการรั่วไหลของหน่วยความจำ / ทรัพยากรคุณควรปิดสตรีมเครื่องสแกนเมื่อเสร็จสิ้น

myScanner.close();

โปรดทราบว่า java 1.7 และใหม่กว่าจับสิ่งนี้เป็นคำเตือนในการคอมไพล์


แต่ไม่ใช่ถ้า Scanner เปิดให้ System.in คุณจะไม่สามารถเปิดเครื่องสแกนไปที่ System.in อีกครั้งในโปรแกรมของคุณ
ksnortum


4
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

ต่อไปนี้เป็นคำตอบที่ยอมรับแล้วซึ่งพัฒนาขึ้นเพื่อตอบสนองความต้องการสองประการ

  • การรวบรวมอินพุตของผู้ใช้ซ้ำ ๆ จนกว่าจะมีการป้อนค่าการออก
  • การจัดการกับค่าอินพุตที่ไม่ถูกต้อง (ไม่ใช่จำนวนเต็มในตัวอย่างนี้)

รหัส

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

เพิ่มthrows IOExceptionข้างmain()แล้ว

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

3

มันง่ายมากที่จะรับอินพุตใน 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);
    }
}

มันเป็นสิ่งเดียวกัน คุณสามารถเริ่มต้นอาร์เรย์ด้วยประเภทข้อมูล varName [] หรือประเภทข้อมูล [] varName
user2277872

3
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);
     }
}

2

คุณสามารถรับอินพุตของผู้ใช้เช่นนี้ได้โดยใช้ BufferedReader:

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

นี่คือวิธีที่คุณใช้

    String name = br.readline(); 

ดังนั้นเมื่อผู้ใช้พิมพ์ชื่อของเขาลงในคอนโซล "ชื่อสตริง" จะเก็บข้อมูลนั้น

หากเป็นหมายเลขที่คุณต้องการจัดเก็บรหัสจะมีลักษณะดังนี้:

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

กระโดดนี้ช่วย!


2

อาจเป็นแบบนี้ ...

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");
}

1

นี่คือรหัสง่ายๆที่ใช้System.in.read()ฟังก์ชั่น รหัสนี้แค่เขียนสิ่งที่พิมพ์ คุณสามารถกำจัด while loop ได้หากคุณต้องการป้อนข้อมูลเพียงครั้งเดียวและคุณสามารถเก็บคำตอบไว้ในอาร์เรย์อักขระได้หากคุณเลือก

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

ฉันชอบสิ่งต่อไปนี้:

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
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("Welcome to the best program in the world! ");
        while (true) {
            System.out.print("Enter a query: ");
            Scanner scan = new Scanner(System.in);
            String s = scan.nextLine();
            if (s.equals("q")) {
                System.out.println("The program is ending now ....");
                break;
            } else  {
                System.out.println("The program is running...");
            }
        }
    }
}

0

Scannerคุณจะได้รับการป้อนข้อมูลของผู้ใช้โดยใช้ คุณสามารถใช้เข้าตรวจสอบที่เหมาะสมโดยใช้วิธีการที่เหมาะสมสำหรับชนิดข้อมูลที่แตกต่างกันเช่นnext()สำหรับStringหรือสำหรับnextInt()Integer

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

วิธีที่ง่ายที่สุดในการรับข้อมูลจากผู้ใช้คือการใช้สแกนเนอร์ นี่คือตัวอย่างของวิธีการใช้งาน:

import java.util.Scanner;
public class main {
public static void main(String[]args) {
Scanner sc=new Scanner(System.in);
int a;
String b;
System.out.println("Type an integer here: ");
a=sc.nextInt();
System.out.println("Type anything here:");
b=sc.nextLine();

บรรทัดของรหัสimport java.util.Scanner;บอกโปรแกรมว่าโปรแกรมเมอร์จะใช้อินพุตของผู้ใช้ในรหัสของพวกเขา เหมือนที่กล่าวไว้มันนำเข้ายูทิลิตีสแกนเนอร์ Scanner sc=new Scanner(System.in);บอกให้โปรแกรมเริ่มต้นอินพุตของผู้ใช้ หลังจากที่คุณทำเช่นนั้นคุณจะต้องทำให้เป็นสตริงหรือจำนวนเต็มโดยไม่ต้องมีค่าแล้วใส่ผู้ที่อยู่ในสายหรือa=sc.nextInt(); a=sc.nextLine();สิ่งนี้ทำให้ตัวแปรมีค่าของอินพุตของผู้ใช้ จากนั้นคุณสามารถใช้มันในรหัสของคุณ หวังว่านี่จะช่วยได้


-1
import java.util.Scanner;

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

        System.out.print("Name : ");
        String name = input.next();
        System.out.print("Last Name : ");
        String lname = input.next();
        System.out.print("Age : ");
        byte age = input.nextByte();

        System.out.println(" " );
        System.out.println(" " );

        System.out.println("Firt Name: " + name);
        System.out.println("Last Name: " + lname);
        System.out.println("      Age: " + age);
    }
}

-1
class ex1 {    
    public static void main(String args[]){
        int a, b, c;
        a = Integer.parseInt(args[0]);
        b = Integer.parseInt(args[1]);
        c = a + b;
        System.out.println("c = " + c);
    }
}
// Output  
javac ex1.java
java ex1 10 20 
c = 30

บทลงโทษสำหรับการเข้าถึงองค์ประกอบargsโดยไม่ตรวจสอบความยาวของอาร์เรย์นั้นก่อน: downvote
jub0bs


-1

สามารถใช้คีย์บอร์ดโดยใช้เครื่องสแกนเนอร์ได้เนื่องจากมีผู้อื่นโพสต์ไว้ แต่ในเวลาที่มีกราฟิคสูงมันไม่มีประโยชน์ที่จะสร้างเครื่องคิดเลขโดยไม่มีส่วนต่อประสานกราฟิกกับผู้ใช้ (GUI)

ใน Java สมัยใหม่นี้หมายถึงการใช้เครื่องมือลากและวาง JavaFX เช่นScene Builderเพื่อจัดวาง GUI ที่คล้ายกับคอนโซลของเครื่องคิดเลข โปรดทราบว่าการใช้ Scene Builder นั้นง่ายและไม่ต้องการทักษะ Java เพิ่มเติมสำหรับตัวจัดการเหตุการณ์ที่คุณอาจมีอยู่แล้ว

สำหรับอินพุตของผู้ใช้คุณควรมี TextField กว้าง ๆ ที่ด้านบนของคอนโซล GUI

นี่คือที่ที่ผู้ใช้ป้อนหมายเลขที่ต้องการใช้งาน ใต้ TextField คุณจะมีปุ่มฟังก์ชั่นที่ทำหน้าที่พื้นฐาน (เช่นเพิ่ม / ลบ / คูณ / หารและหน่วยความจำ / เรียกคืน / ล้าง) เมื่อ GUI ถูกไล่ออกจากนั้นคุณสามารถเพิ่มการอ้างอิง 'คอนโทรลเลอร์' ที่เชื่อมโยงฟังก์ชั่นของปุ่มแต่ละปุ่มเข้ากับการนำ Java ไปใช้เช่นการเรียกใช้เมธอดในคลาสคอนโทรลเลอร์ของโครงการของคุณ

วิดีโอนี้ค่อนข้างเก่า แต่ก็ยังแสดงให้เห็นว่าการใช้ Scene Builder นั้นง่ายเพียงใด


คำตอบนี้ถูกลดระดับลง - ไม่ได้ให้เหตุผล สำหรับฉันมันเป็นวิธีเดียวที่ใช้งานได้ในการป้อนข้อมูลผู้ใช้ลงในแอปพลิเคชัน Java
Trunk

มันมีประโยชน์มากและฉันไม่เห็นว่าทำไมมันถึงถูกโหวต อย่างไรก็ตามคำตอบปัจจุบันและคำสั่งการบอกรับเป็นนัยบ่งบอกว่าพวกเขากำลังมองหาคำตอบสำหรับผู้ใช้ในอนาคตที่ต้องการได้รับการป้อนข้อมูลผ่านคอนโซล
JFreeman

ฉันไม่เห็นผู้ใช้ Java คนใดยกเว้นผู้ที่ติดอยู่กับโค้ดที่เขียนใน Java เวอร์ชันเก่า - มีประโยชน์สำหรับการป้อนข้อมูลแป้นพิมพ์ของเครื่องสแกน ครั้งสุดท้ายที่ฉันตอบกระทู้ผูก . .
Trunk

ฉันเข้าใจคำร้องเรียนของคุณอย่างสมบูรณ์ ฉันเองเชื่อว่าคำตอบของคุณมีประโยชน์มากดังนั้นฉันจึงไม่เข้าใจว่าทำไมจึงมีการลงคะแนน อย่างไรก็ตามฉันมีหลายครั้งที่เขียนโปรแกรมที่ไม่มี GUI ดังนั้นฉันเชื่อว่ารหัสที่เหมาะสมสำหรับ a Scannerนั้นดีมากที่จะมี
JFreeman

ถ้า OP บอกว่าเป็นกระบวนการที่มีค่าใช้จ่ายต่ำ (ฝังอยู่ในตัว) ด้วยหน้าจอ I / O ที่น้อยที่สุดหรือไม่มีเลยก็พอแล้ว - สแกนเนอร์เป็นสิ่งที่พวกเขาต้องการ แต่พวกเขาไม่ได้พูดเรื่องนี้ OP เป็นหลักขอให้เรายอมรับว่าวลีนี้ "การป้อนข้อมูลผู้ใช้" เป็นหลักแนะนำการป้อนข้อมูลด้วยแป้นพิมพ์หรืออื่น ๆ เชิญให้เราตีความวลีสำหรับตัวเราเอง . .
ลำตัว
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.