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?
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?
Odpowiedzi:
Możesz użyć dowolnej z następujących opcji w zależności od wymagań.
Scanner
klasaimport java.util.Scanner;
Scanner scan = new Scanner(System.in);
String s = scan.next();
int i = scan.nextInt();
BufferedReader
i InputStreamReader
zajęciaimport 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
klasaimport java.io.DataInputStream;
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();
readLine
Metoda z DataInputStream
klasy została zaniechana . Aby uzyskać wartość ciągu, należy użyć poprzedniego rozwiązania z BufferedReader
Console
klasaimport 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.
DataInputStream
służy do odczytu danych binarnych. Korzystanie readInt
na System.in
nie nie analizować liczbę całkowitą od danych znakowych, to zamiast reinterpretacji wartości Unicode i powrót nonsens. Zobacz DataInput#readInt
szczegóły ( DataInputStream
narzędzia DataInput
).
Jednym z najprostszych sposobów jest użycie Scanner
obiektu 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();
Scanner reader1 = new Scanner(System.in);
?
Możesz użyć klasy Scanner lub Console
Console console = System.console();
String input = console.readLine("Enter input:");
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ć String
wartość w, accStr
więc musisz parsować ją do int
użycia Integer.parseInt
.
int accInt = Integer.parseInt(accStr);
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.
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” .
Dwie najlepsze opcje to BufferedReader
iScanner
.
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
Scanner
klasyZalety BufferedInputStream
Scanner
między wątkami )Ogólnie każda metoda wprowadzania ma inne cele.
Jeśli wprowadzasz dużą ilość danych, BufferedReader
może być dla Ciebie lepiej
Jeśli wpisujesz wiele liczb Scanner
, automatycznie parsuje, co jest bardzo wygodne
Dla bardziej podstawowych zastosowań polecam, Scanner
ponieważ 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 BufferedReader
Apostolskiej , jak korzystać z BufferedReader i zobaczyć Czytanie wierszy Chars )
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 Console
i, DataInputStream
są również wykonalnymi alternatywami.
Console
ma 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 Console
klasy.
DataInputStream
sł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. DataInputStream
jest 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
.
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 Console
niedostępny?
try-with-resource
poprawiłoby to.
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);
}
}
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; }
}
Scanner
obiektów; jeden byłby wystarczający.
Użyj System
klasy, aby uzyskać dane wejściowe.
http://fresh2refresh.com/java-tutorial/java-input-output/ :
Jak dane są akceptowane z klawiatury?
Potrzebujemy trzech przedmiotów,
- System.in
- InputStreamReader
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);
System.in
(w pierwszym wierszu kodu) będzie zawierał kapitał S
na nazwę klasy.
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 :-)
Oto bardziej rozwinięta wersja zaakceptowanej odpowiedzi, która zaspokaja dwie typowe potrzeby:
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 spaces
wygenerują wiele wyjątków.
Dodaj throws IOException
obok main()
, a następnie
DataInputStream input = new DataInputStream(System.in);
System.out.print("Enter your name");
String name = input.readLine();
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);
}
}
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);
}
}
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!
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");
}
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;
}
}
}
}
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?")
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...");
}
}
}
}
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 String
lub 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();
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.
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);
}
}
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
bez wcześniejszego sprawdzania długości tej tablicy: downvote.
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.
Scanner
bardzo dobrze jest mieć dostępny.