Я спробував створити калькулятор, але не можу змусити його працювати, тому що я не знаю, як отримати введення користувача .
Як я можу отримати вхід користувача на Java?
Я спробував створити калькулятор, але не можу змусити його працювати, тому що я не знаю, як отримати введення користувача .
Як я можу отримати вхід користувача на Java?
Відповіді:
Ви можете використовувати будь-який із наведених нижче варіантів, виходячи з вимог.
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());
Мабуть, цей метод не працює добре в деяких ІДЕ.
DataInputStream
це для читання двійкових даних. Використовуючи readInt
на System.in
, не розбирає ціле число з символьних даних, він замість цього буде повторно інтерпретувати значення unicode та повертати дурниці. Дивіться DataInput#readInt
на деталь ( DataInputStream
інвентар DataInput
).
Одним із найпростіших способів є використання 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();
Scanner reader1 = new Scanner(System.in);
?
Можна використовувати клас Сканер або клас Консолі
Console console = System.console();
String input = console.readLine("Enter input:");
Ви можете отримати введення користувача за допомогою BufferedReader
.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String accStr;
System.out.println("Enter your Account number: ");
accStr = br.readLine();
Він буде зберігати String
значення, accStr
тому вам доведеться розбирати його на int
використання Integer.parseInt
.
int accInt = Integer.parseInt(accStr);
Ось як можна отримати входи на клавіатурі:
Scanner scanner = new Scanner (System.in);
System.out.print("Enter your name");
name = scanner.next(); // Get what the user types.
Ви можете зробити просту програму, щоб запитати ім'я користувача та надрукувати те, що коли-небудь відповідь використовує вводи.
Або попросіть користувача ввести два числа, і ви можете додавати, множувати, віднімати або ділити ці числа і друкувати відповіді на введення користувачів так само, як поведінка калькулятора.
Тож вам потрібен клас Сканер. Ви повинні 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 змінюється однаково для решти. Не забудьте заяву про імпорт у верхній частині коду.
Також дивіться допис у блозі "Клас сканера та отримання інформації про користувачів" .
Кращі два варіанти - BufferedReader
і Scanner
.
Найпоширеніший метод - Scanner
і я особисто йому віддаю перевагу через його простоту та просту реалізацію, а також за його потужну корисність для розбору тексту на примітивні дані.
Переваги використання сканера
Scanner
класПереваги BufferedInputStream
Scanner
між потоками )В цілому кожен метод введення має різні цілі.
Якщо ви вводите велику кількість даних, 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 )
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, який може містити будь-яку кількість рядків всередині них.
Однак це складніший клас і його складніше здійснити, тому не рекомендується для початківців. Ось посилання на корисний приклад, як реалізувати DataInputStream
.
DataInputStream
- опис там звучить ідентично випадку використання для Scanner
: читання даних у примітиви. Крім того, якщо хтось перебуває на етапі, коли він не знає, як отримати введення користувачів, швидше за все, він також не розуміє, чому деякі частини стандартної бібліотеки не були б доступні в певних IDE. Звичайно, це так і для мене - чому вона Console
недоступна?
try-with-resource
зробить це краще.
Тут програма просить користувача ввести номер. Після цього програма роздруковує цифри числа та суму цифр.
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);
}
}
Ось ваша програма з питання, використовуючи 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
об’єктів; одного було б достатньо
Використовуйте System
клас, щоб отримати вхід.
http://fresh2refresh.com/java-tutorial/java-input-output/ :
Як дані приймаються з клавіатури?
Нам потрібні три об’єкти,
- System.in
- InputStreamReader
BufferedReader
- InputStreamReader і BufferedReader - це класи в пакеті java.io.
- Дані отримуються у вигляді байтів з клавіатури системою System.in, що є об'єктом InputStream.
- Потім InputStreamReader зчитує байти та розшифровує їх у символи.
- Потім нарешті об'єкт BufferedReader зчитує текст з потоку введення символів, буферизуючи символи, щоб забезпечити ефективне зчитування символів, масивів та рядків.
InputStreamReader inp = new InputStreamReader(system.in);
BufferedReader br = new BufferedReader(inp);
System.in
(int перший рядок коду) буде мати капітал S
для назви класу.
Всього одна додаткова деталь. Якщо ви не хочете ризикувати витоком пам'яті / ресурсів, слід закрити потік сканера, коли закінчите:
myScanner.close();
Зауважте, що java 1.7 і пізніше сприймають це як попередження про компіляцію (не питайте, як я це знаю :-)
Ось більш розроблена версія прийнятої відповіді, яка відповідає двом загальним потребам:
Код
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
, породжує декілька винятків.
Потім додайте throws IOException
поручmain()
DataInputStream input = new DataInputStream(System.in);
System.out.print("Enter your name");
String name = input.readLine();
Дуже просто отримати вхід в 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);
}
}
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);
}
}
Ви можете отримати такі дані користувачів за допомогою 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());
Хоп, це допомагає!
Може бути щось подібне ...
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");
}
Це простий код, який використовує 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;
}
}
}
}
Мені подобається таке:
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?")
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...");
}
}
}
}
Ви можете отримати вхід користувача, використовуючи 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();
Найпростішим способом отримати вклад користувача було б використовувати Scanner. Ось приклад того, як це слід використовувати:
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();
. Це дає змінним значення вхідних даних користувачів. Тоді ви можете використовувати його у своєму коді. Сподіваюсь, це допомагає.
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
без перевірки спочатку довжини цього масиву: downvote.
Можливий запис клавіатури за допомогою Scanner, як і інші. Але в ці високо графічні часи безглуздо робити калькулятор без графічного інтерфейсу користувача (GUI).
У сучасній Java це означає використовувати інструмент перетягування і перетягування JavaFX, як Scene Builder, щоб викласти графічний інтерфейс, що нагадує консоль калькулятора. Зауважте, що користуватися Scene Builder інтуїтивно легко та не вимагає додаткових навичок Java для своїх обробників подій, ніж те, що у вас вже є.
Для введення користувача у вас має бути широке TextField у верхній частині консолі GUI.
Тут користувач вводить номери, на яких хоче виконувати функції. Під текстовим полем у вас буде масив функціональних кнопок, які виконують основні (тобто додавання / віднімання / множення / ділення та пам'ять / відкликання / очищення). Після закінчення графічного інтерфейсу ви можете додати посилання "контролера", які пов'язують кожну функцію кнопки з її реалізацією Java, наприклад, виклик методу в класі контролера вашого проекту.
Це відео трохи старе, але все ж показує, як просто використовувати Builder сцени.
Scanner
дуже добре мати.