Jak uzyskać dane wejściowe użytkownika w Javie?

317

Próbowałem utworzyć kalkulator, ale nie mogę go uruchomić, ponieważ nie wiem, jak uzyskać dane od użytkownika .

Jak mogę uzyskać dane wejściowe użytkownika w Javie?

Jtvd78
źródło
8
Jakie jest twoje pytanie? Właśnie opublikowałeś kod i powiedziałeś, że nie lubisz wskaźników. Niezrozumienie wskaźników może wciąż wrócić do gryzienia cię w java, jeśli nie rozumiesz przekazywania przez odniesienie i przekazywania przez wartość.
Scott
4
powinieneś spróbować nauczyć się java czytając książkę, Java Jak programować, 7 / e jest fajna
Marco Aviles

Odpowiedzi:

333

Możesz użyć dowolnej z następujących opcji w zależności od wymagań.

Scanner klasa

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

BufferedReaderi InputStreamReaderzajęcia

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 klasa

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

readLineMetoda z DataInputStreamklasy została zaniechana . Aby uzyskać wartość ciągu, należy użyć poprzedniego rozwiązania z BufferedReader


Console klasa

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

Najwyraźniej ta metoda nie działa dobrze w niektórych IDE.

Richie
źródło
4
Uwaga: DataInputStreamsłuży do odczytu danych binarnych. Korzystanie readIntna System.innie nie analizować liczbę całkowitą od danych znakowych, to zamiast reinterpretacji wartości Unicode i powrót nonsens. Zobacz DataInput#readIntszczegóły ( DataInputStreamnarzędzia DataInput).
Radiodef,
3
to świetnie, chciałbym zobaczyć, że wymagany import został dodany dla kompletności. Pomogłoby to również tym, którzy tego potrzebują.
KnightHawk
1
Ta odpowiedź byłaby o wiele bardziej pomocna, gdyby wspomniała o rzeczywistych wymaganiach. Zacząłem nagrodę, aby spróbować to naprawić.
tymczasowego
405

Jednym z najprostszych sposobów jest użycie Scannerobiektu w następujący sposób:

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();
Marco Aviles
źródło
13
Jeśli zamkniesz obiekt skanera otwarty w System.in, nie będziesz mógł ponownie otworzyć System.in, dopóki program nie zostanie zakończony.
ksnortum
@ksnortum czy mogę ponownie otworzyć Scanner reader1 = new Scanner(System.in);?
Abhijit Jagtap,
Spróbuj. Nie wydaje mi się
ksnortum
1
Tak, ksnortum ma rację, otrzymujesz wyjątek NoSuchElementException. Nieco użyteczne powiązane pytanie dotyczące tego, dlaczego nie można ponownie otworzyć System.in po jego zamknięciu .
tymczasowego
45

Możesz użyć klasy Scanner lub Console

Console console = System.console();
String input = console.readLine("Enter input:");
przedmioty
źródło
55
Myślę, że System.console zwróci null, jeśli ten kod uruchomi się z Eclipse.
Wygraj Coder
13
Wierzę, że to zwróci błąd działania z prawie dowolnego IDE. potwierdzono, że intelliJ ma ten sam problem.
Dan Bradbury,
1
ale dlaczego jest to zero w zaćmieniu?
Mark W
20

Możesz uzyskać wkład użytkownika za pomocą BufferedReader.

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

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

Będzie przechowywać Stringwartość w, accStrwięc musisz parsować ją do intużycia Integer.parseInt.

int accInt = Integer.parseInt(accStr);
Chirag
źródło
17

Oto jak uzyskać dane z klawiatury:

Scanner scanner = new Scanner (System.in);
System.out.print("Enter your name");  
name = scanner.next(); // Get what the user types.
Abdel Raoof
źródło
14

Możesz stworzyć prosty program, który zapyta o nazwę użytkownika i wydrukuje dane wejściowe odpowiedzi.

Możesz też poprosić użytkownika o wprowadzenie dwóch liczb, abyś mógł je dodawać, pomnażać, odejmować lub dzielić i drukować odpowiedzi dla danych wprowadzonych przez użytkownika, tak jak w przypadku kalkulatora.

Więc potrzebujesz klasy skanera. Musisz import java.util.Scanner;i w kodzie musisz użyć

Scanner input = new Scanner(System.in);

Dane wejściowe to nazwa zmiennej.

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

Zobacz, jak różni: input.next();, i = input.nextInt();,d = input.nextDouble();

Według String, int i double różnią się w ten sam sposób dla reszty. Nie zapomnij instrukcji importu u góry kodu.

Zobacz także wpis na blogu „Klasa skanera i uzyskiwanie danych wejściowych użytkownika” .

użytkownik3598655
źródło
12

Dwie najlepsze opcje to BufferedReaderiScanner .

Najczęściej stosowaną metodą jest Scanner i ja osobiście wolę ją ze względu na jej prostotę i łatwą implementację, a także jej potężne narzędzie do parsowania tekstu w prymitywne dane.

Zalety korzystania ze skanera

  • Łatwy w użyciu Scanner klasy
  • Łatwe wprowadzanie liczb (int, short, byte, float, long i double)
  • Wyjątki są odznaczone, co jest wygodniejsze. To programista musi zostać cywilizowany i określić lub uchwycić wyjątki.
  • Potrafi czytać wiersze, białe znaki i tagi rozdzielane wyrażeniami regularnymi

Zalety BufferedInputStream


Ogólnie każda metoda wprowadzania ma inne cele.

  • Jeśli wprowadzasz dużą ilość danych, BufferedReadermoże być dla Ciebie lepiej

  • Jeśli wpisujesz wiele liczb Scanner, automatycznie parsuje, co jest bardzo wygodne

Dla bardziej podstawowych zastosowań polecam, Scannerponieważ jest łatwiejszy w użyciu i łatwiej pisać programy. Oto szybki przykład tworzenia Scanner. Podam wyczerpujący przykład poniżej, jak korzystać zScanner

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

(Aby uzyskać więcej informacji na temat BufferedReaderApostolskiej , jak korzystać z BufferedReader i zobaczyć Czytanie wierszy 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
    }
}

Uwaga: Inne klasy, takie jak Consolei, DataInputStreamsą również wykonalnymi alternatywami.

Consolema kilka zaawansowanych funkcji, takich jak umiejętność odczytywania haseł, jednak nie jest dostępna we wszystkich IDE (takich jak Eclipse). Dzieje się tak dlatego, że Eclipse uruchamia aplikację jako proces w tle, a nie proces najwyższego poziomu z konsolą systemową. Oto link do przydatnego przykładu implementacji Consoleklasy.

DataInputStreamsłuży przede wszystkim do odczytu danych wejściowych jako pierwotnego typu danych, z podstawowego strumienia wejściowego, w sposób niezależny od maszyny. DataInputStreamjest zwykle używany do odczytu danych binarnych. Zapewnia również dogodne metody odczytu niektórych typów danych. Na przykład ma metodę odczytu ciągu UTF, który może zawierać dowolną liczbę wierszy.

Jest to jednak klasa bardziej skomplikowana i trudniejsza do wdrożenia, dlatego nie jest zalecana dla początkujących. Oto link do przydatnego przykładu implementacji DataInputStream.

JFreeman
źródło
Zamierzam zadzwonić do zwycięzcy tutaj. Przeważnie całkiem świetna odpowiedź, chociaż chciałbym, aby była głębsza, kiedy chciałbym użyć DataInputStream- tam opis brzmi identycznie jak przypadek użycia Scanner: wczytywanie danych do prymitywów. Ponadto, jeśli ktoś jest na etapie, w którym nie wie, jak uzyskać wkład użytkownika, najprawdopodobniej nie rozumie również, dlaczego niektóre części standardowej biblioteki nie byłyby dostępne w niektórych IDE. Z pewnością tak jest w moim przypadku - dlaczego jest Consoleniedostępny?
tymczasowego
1
Dziękujemy za opinie, które próbowałem zaktualizować w celu uzyskania dodatkowych wyjaśnień. Zobacz quora.com/... i stackoverflow.com/questions/27601520/…
JFreeman
Doskonały. To jest dokładnie odpowiedź na to pytanie od samego początku. Gdyby tylko był jakiś sposób, mógłbym dostać się na szczyt.
tymczasowego
Cóż, każdy, kto chce przewinąć w dół, otrzyma dobrą odpowiedź i powoli pójdzie w górę :)
JFreeman
1
Dzięki. Szczegółowa odpowiedź informacyjna. Dodanie try-with-resourcepoprawiłoby to.
Sourabh
8

Tutaj program prosi użytkownika o wprowadzenie numeru. Następnie program drukuje cyfry liczby i sumę cyfr.

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);            
    }
}
Miasar
źródło
8

Aby odczytać wiersz lub ciąg, możesz użyć BufferedReaderobiektu połączonego z InputStreamReaderjednym w następujący sposób:

BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
String inputLine = bufferReader.readLine();
Ke Sun
źródło
6

Oto twój program od pytania za pomocą 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; }
}
użytkownik2505442
źródło
3
Nie ma potrzeby tworzenia tak wielu Scannerobiektów; jeden byłby wystarczający.
jub0bs
5

Użyj Systemklasy, aby uzyskać dane wejściowe.

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

Jak dane są akceptowane z klawiatury?

Potrzebujemy trzech przedmiotów,

  1. System.in
  2. InputStreamReader
  3. BufferedReader

    • InputStreamReader i BufferedReader to klasy w pakiecie java.io.
    • Dane są odbierane w formie bajtów z klawiatury przez System.in, który jest obiektem InputStream.
    • Następnie InputStreamReader odczytuje bajty i dekoduje je na znaki.
    • Następnie obiekt BufferedReader odczytuje tekst ze strumienia wprowadzania znaków, buforując znaki, aby zapewnić efektywny odczyt znaków, tablic i linii.
InputStreamReader inp = new InputStreamReader(system.in);
BufferedReader br = new BufferedReader(inp);
Surendren
źródło
1
System.in(w pierwszym wierszu kodu) będzie zawierał kapitał Sna nazwę klasy.
KNU
5
Wejście skanera = nowy skaner (System.in);
int liczba całkowita = input.nextInt ();
String string = input.next ();
long longInteger = input.nextLong ();
Strzałka
źródło
5

Tylko jeden dodatkowy szczegół. Jeśli nie chcesz ryzykować wycieku pamięci / zasobów, powinieneś zamknąć strumień skanera po zakończeniu:

myScanner.close();

Pamiętaj, że java 1.7 i nowsze wersje wychwytują to jako ostrzeżenie dotyczące kompilacji (nie pytaj, skąd to wiem :-)

Dave Hentchel
źródło
Ale nie, jeśli skaner jest otwarty na System.in. Nie będziesz mógł ponownie otworzyć skanera na System.in w swoim programie.
ksnortum
4
Scanner input = new Scanner(System.in);
String inputval = input.next();
Scott
źródło
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);

    }
}
koder
źródło
4

Oto bardziej rozwinięta wersja zaakceptowanej odpowiedzi, która zaspokaja dwie typowe potrzeby:

  • Gromadzenie danych wejściowych użytkownika do momentu wprowadzenia wartości wyjścia
  • Postępowanie z niepoprawnymi wartościami wejściowymi (w tym przykładzie wartościami innymi niż całkowite)

Kod

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

Przykład

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

Zauważ, że bez tego nextLine(), złe dane wejściowe będą wielokrotnie wyzwalać ten sam wyjątek w nieskończonej pętli. Możesz użyć next()zamiast tego w zależności od okoliczności, ale wiedz, że dane wejściowe takie this has spaceswygenerują wiele wyjątków.

MarredCheese
źródło
3

Dodaj throws IOExceptionobok main(), a następnie

DataInputStream input = new DataInputStream(System.in);
System.out.print("Enter your name");
String name = input.readLine();
użytkownik2299134
źródło
3

Wejście w Javę jest bardzo proste, wszystko co musisz zrobić, to:

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);
    }
}
akashfugtu
źródło
to jest to samo. Zawsze możesz po prostu zainicjować tablicę z typem danych varName [] LUB typem danych []
varName
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);
     }
}
użytkownik3503711
źródło
2

Możesz uzyskać takie dane wejściowe od użytkownika za pomocą BufferedReader:

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

Tak je stosujesz

    String name = br.readline(); 

Kiedy więc użytkownik wpisze swoje imię w konsoli, „String name” zapisze te informacje.

Jeśli jest to liczba, którą chcesz zapisać, kod będzie wyglądał następująco:

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

Hop to pomaga!

Radek Martinez
źródło
2

Może być coś takiego ...

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");
}
Amarjit Datta
źródło
1

Jest to prosty kod korzystający z System.in.read()funkcji. Ten kod zapisuje tylko to, co zostało wpisane. Możesz pozbyć się pętli while, jeśli chcesz tylko raz wprowadzić dane, a jeśli chcesz, możesz przechowywać odpowiedzi w tablicy znaków.

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;
            }
        }
    }   
}    
Zac
źródło
1

Lubię następujące:

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

i na przykład zrobiłbym:

String name = this.readLine("What is your name?")
Crt
źródło
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...");
            }
        }
    }
}
Mohammad Mahjoub
źródło
0

Możesz uzyskać dane wejściowe od użytkownika za pomocą Scanner. Można użyć poprawnego sprawdzania poprawności danych wejściowych przy użyciu odpowiednich metod dla różnych typów danych, takich jak next()for Stringlub nextInt()for 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();
Pradip Karki
źródło
0

Najprostszym sposobem na uzyskanie danych wejściowych od użytkownika byłoby użycie skanera. Oto przykład, w jaki sposób powinien być używany:

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();

Wiersz kodu import java.util.Scanner;informuje program, że programista będzie używał danych wejściowych użytkownika w kodzie. Jak mówi, importuje narzędzie skanera. Scanner sc=new Scanner(System.in);nakazuje programowi uruchomienie danych wejściowych użytkownika. Po wykonaniu tej czynności musisz utworzyć ciąg lub liczbę całkowitą bez wartości, a następnie umieścić je w wierszu a=sc.nextInt();lub a=sc.nextLine();. Daje to zmiennym wartość danych wejściowych użytkownika. Następnie możesz użyć go w kodzie. Mam nadzieję że to pomoże.

boi yeet
źródło
-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);
    }
}
juan_macipag
źródło
-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
mega
źródło
Sankcja za dostęp do elementów argsbez wcześniejszego sprawdzania długości tej tablicy: downvote.
jub0bs
java ex1
ADTC
-1

Wprowadzanie klawiatury za pomocą skanera jest możliwe, jak napisali inni. Ale w tych bardzo graficznych czasach tworzenie kalkulatora bez graficznego interfejsu użytkownika (GUI) nie ma sensu.

W nowoczesnej Javie oznacza to używanie narzędzia JavaFX typu przeciągnij i upuść, takiego jak Scene Builder, do stworzenia interfejsu graficznego przypominającego konsolę kalkulatora. Należy pamiętać, że korzystanie z programu Scene Builder jest intuicyjnie łatwe i nie wymaga żadnych dodatkowych umiejętności obsługi języka Java w programach obsługi zdarzeń, które są już dostępne.

Do wprowadzania danych użytkownik powinien mieć szeroki TextField na górze konsoli GUI.

W tym miejscu użytkownik wprowadza liczby, na których chce wykonywać funkcje. Pod TextField, macie tablicę przycisków funkcyjnych wykonujących podstawowe funkcje (tj. Dodawanie / odejmowanie / mnożenie / dzielenie i pamięć / przywołanie / kasowanie). Po wygaśnięciu GUI możesz dodać odniesienia do kontrolera, które łączą każdą funkcję przycisku z implementacją Java, np. Wywołanie metody w klasie kontrolera projektu.

Ten film jest nieco stary, ale wciąż pokazuje, jak łatwy w użyciu jest Konstruktor scen.

Bagażnik samochodowy
źródło
Ta odpowiedź została odrzucona - bez podania przyczyny. Dla mnie jest to jedyny użyteczny sposób na uzyskanie wkładu użytkownika do aplikacji Java.
Trunk
Jest to bardzo przydatne i nie rozumiem, dlaczego zostało to odrzucone. Jednak obecne odpowiedzi i oświadczenie o nagrodach sugerują, że szukają odpowiedzi dla przyszłych użytkowników, którzy chcą uzyskać wkład za pośrednictwem konsoli.
JFreeman
Po prostu nie widzę żadnego użytkownika Javy - z wyjątkiem tych, którzy utknęli w kodzie napisanym w starych wersjach Javy - mających jakikolwiek użytek z klawiatury skanera. Ostatnim razem odpowiadam na wpis związany z nagrodą. . .
Bagażnik
Rozumiem całkowicie twoją skargę. Osobiście uważam, że twoja odpowiedź jest bardzo przydatna, więc nie rozumiem, dlaczego została odrzucona. Jednak wielokrotnie pisałem programy, które nie mają GUI i dlatego uważam, że odpowiedni kod dla Scannerbardzo dobrze jest mieć dostępny.
JFreeman
Jeśli OP powiedział, że jest to proces o niskim nakładzie (osadzony?) Z minimalnym We / Wy ekranu lub bez niego, wystarczy - skaner jest tym, czego potrzebują. Ale nie stwierdzili nic takiego. OP zasadniczo poprosił nas o zaakceptowanie tego, że to wyrażenie „dane wejściowe użytkownika” sugeruje przede wszystkim wprowadzanie danych z klawiatury, lub też zaprosił nas do interpretacji tego wyrażenia dla siebie. . .
Bagażnik