Я попытался создать калькулятор, но я не могу заставить его работать, потому что я не знаю, как получить пользовательский ввод.
Как я могу получить пользовательский ввод в Java?
Я попытался создать калькулятор, но я не могу заставить его работать, потому что я не знаю, как получить пользовательский ввод.
Как я могу получить пользовательский ввод в Java?
Один из самых простых способов - использовать объект 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
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.
Вы можете использовать класс Scanner или класс Console
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();
В соответствии со строкой, int и double изменяются одинаково для остальных. Не забудьте оператор import в верхней части вашего кода.
Также см. сообщение в блоге "Класс сканера и получение пользовательских входов" .
Чтобы прочитать строку или строку, вы можете использовать объект BufferedReader
в сочетании с InputStreamReader
следующим образом:
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
String inputLine = bufferReader.readLine();
Здесь программа запрашивает у пользователя ввод числа. После этого программа печатает цифры номера и суммы цифр.
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; }
}
Для получения ввода используйте класс 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);
Scanner input=new Scanner(System.in); int integer=input.nextInt(); String string=input.next(); long longInteger=input.nextLong();
Только одна дополнительная деталь. Если вы не хотите рисковать утечкой памяти/ресурсов, вы должны закрыть поток сканера по завершении:
myScanner.close();
Обратите внимание, что java 1.7 и более поздние версии воспринимают это как предупреждение о компиляции (не спрашивайте, как я знаю, что: -)
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);
}
}
Два лучших варианта - это 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 и посмотрите Чтение строк символов)
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
.
Scanner input = new Scanner(System.in);
String inputval = input.next();
Добавьте 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);
}
}
Вот более развитая версия принятого ответа, в которой рассматриваются две общие потребности:
код
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
будет генерировать несколько исключений.
Может быть что-то вроде этого...
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");
}
Вы можете получить пользовательский ввод, как это, используя 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());
Это поможет!
Это простой код, который использует функцию 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?")
Вы можете получить пользовательский ввод с помощью 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();
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
Вход на клавиатуру с помощью сканера возможен, как и другие. Но в эти чрезвычайно графические времена бессмысленно делать калькулятор без графического интерфейса пользователя (GUI).
В современной Java это означает использование инструмента перетаскивания JavaFX, такого как Scene Builder, для создания GUI, напоминающего консоль калькулятора. Обратите внимание, что использование Scene Builder интуитивно просто и не требует дополнительных навыков работы с Java для его обработчиков событий по сравнению с тем, что у вас уже может быть.
Для пользовательского ввода у вас должен быть широкий TextField в верхней части консоли графического интерфейса.
Здесь пользователь вводит числа, для которых он хочет выполнять функции. Ниже TextField у вас будет массив функциональных кнопок, выполняющих базовые функции (например, сложение/вычитание/умножение/деление и память/возврат/очистка). После того, как GUI выстроен, вы можете добавить ссылки 'controller', которые связывают каждую функцию кнопки с ее реализацией Java, например, вызов метода в вашем классе контроллера проекта.
Это видео немного устарело, но все еще показывает, насколько прост в использовании Scene Builder.