Tentei criar uma calculadora, mas não consigo fazê-la funcionar porque não sei como obter informações do usuário .
Como posso obter a entrada do usuário em Java?
Tentei criar uma calculadora, mas não consigo fazê-la funcionar porque não sei como obter informações do usuário .
Como posso obter a entrada do usuário em Java?
Respostas:
Você pode usar qualquer uma das seguintes opções com base nos requisitos.
Scanner
classeimport java.util.Scanner;
Scanner scan = new Scanner(System.in);
String s = scan.next();
int i = scan.nextInt();
BufferedReader
e InputStreamReader
aulasimport 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
classeimport java.io.DataInputStream;
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();
O readLine
método da DataInputStream
classe foi preterido . Para obter o valor String, você deve usar a solução anterior com BufferedReader
Console
classeimport java.io.Console;
Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());
Aparentemente, esse método não funciona bem em alguns IDEs.
DataInputStream
é para ler dados binários. Usando readInt
em System.in
que não analisar um número inteiro a partir dos dados de caracteres, ele irá em vez reinterpretar os valores unicode e absurdo retorno. Veja DataInput#readInt
para detalhes ( DataInputStream
implementos DataInput
).
Uma das maneiras mais simples é usar um Scanner
objeto da seguinte maneira:
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);
?
Você pode usar a classe Scanner ou a classe Console
Console console = System.console();
String input = console.readLine("Enter input:");
Você pode obter informações do usuário usando BufferedReader
.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String accStr;
System.out.println("Enter your Account number: ");
accStr = br.readLine();
Ele armazenará um String
valor em, accStr
portanto, você precisará analisá-lo para um int
uso Integer.parseInt
.
int accInt = Integer.parseInt(accStr);
Aqui está como você pode obter as entradas do teclado:
Scanner scanner = new Scanner (System.in);
System.out.print("Enter your name");
name = scanner.next(); // Get what the user types.
Você pode criar um programa simples para solicitar o nome do usuário e imprimir o que quer que a resposta use entradas.
Ou peça ao usuário para digitar dois números e você pode adicionar, multiplicar, subtrair ou dividir esses números e imprimir as respostas para as entradas do usuário, exatamente como o comportamento de uma calculadora.
Então, aí você precisa da classe Scanner. Você precisa import java.util.Scanner;
e no código que precisa usar
Scanner input = new Scanner(System.in);
Entrada é um nome de variável.
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
Veja como isso é diferente: input.next();
, i = input.nextInt();
,d = input.nextDouble();
De acordo com uma String, int e um double variam da mesma maneira para o resto. Não esqueça a declaração de importação na parte superior do seu código.
Consulte também a postagem do blog "Classe de scanner e obtenção de entradas do usuário" .
As duas melhores opções são BufferedReader
e Scanner
.
O método mais usado é Scanner
e eu pessoalmente o prefiro devido à sua simplicidade e fácil implementação, além de seu poderoso utilitário para analisar o texto em dados primitivos.
Vantagens de usar o scanner
Scanner
classeVantagens do BufferedInputStream
Scanner
entre threads )No geral, cada método de entrada tem finalidades diferentes.
Se você estiver inserindo uma grande quantidade de dados, BufferedReader
poderá ser melhor para você
Se você está digitando muitos números, Scanner
faz uma análise automática, o que é muito conveniente
Para usos mais básicos, eu recomendaria o, Scanner
porque é mais fácil de usar e mais fácil escrever programas. Aqui está um exemplo rápido de como criar um Scanner
. Vou fornecer um exemplo abrangente abaixo de como usar oScanner
Scanner scanner = new Scanner (System.in); // create scanner
System.out.print("Enter your name"); // prompt user
name = scanner.next(); // get user input
(Para obter mais informações sobre BufferedReader
consulte Como usar um BufferedReader e consulte Lendo linhas de caracteres )
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
}
}
Nota: Outras classes como Console
e DataInputStream
também são alternativas viáveis.
Console
possui alguns recursos poderosos, como a capacidade de ler senhas, no entanto, não está disponível em todos os IDEs (como o Eclipse). O motivo disso ocorre porque o Eclipse executa seu aplicativo como um processo em segundo plano e não como um processo de nível superior com um console do sistema. Aqui está um link para um exemplo útil de como implementar a Console
classe.
DataInputStream
é usado principalmente para ler entrada como um tipo de dados primitivo, de um fluxo de entrada subjacente, de maneira independente da máquina. DataInputStream
é geralmente usado para ler dados binários. Ele também fornece métodos de conveniência para a leitura de certos tipos de dados. Por exemplo, ele possui um método para ler uma String UTF que pode conter qualquer número de linhas dentro delas.
No entanto, é uma classe mais complicada e mais difícil de implementar, por isso não é recomendado para iniciantes. Aqui está um link para um exemplo útil de como implementar a DataInputStream
.
DataInputStream
- a descrição lá parece idêntica ao caso de uso para Scanner
: ler dados em primitivos. Além disso, se alguém está no estágio em que não sabe como obter informações do usuário, provavelmente também não entende por que algumas partes da biblioteca padrão não estariam disponíveis em determinados IDEs. Certamente esse é o meu caso - por que Console
não está disponível?
try-with-resource
seria melhor.
Aqui, o programa solicita que o usuário insira um número. Depois disso, o programa imprime os dígitos do número e a soma dos dígitos.
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);
}
}
Aqui está o seu programa da pergunta usando 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
objetos; um teria sido suficiente.
Use a System
classe para obter a entrada.
http://fresh2refresh.com/java-tutorial/java-input-output/ :
Como os dados são aceitos no teclado?
Precisamos de três objetos,
- System.in
- InputStreamReader
BufferedReader
- InputStreamReader e BufferedReader são classes no pacote java.io.
- Os dados são recebidos na forma de bytes do teclado pelo System.in, que é um objeto InputStream.
- Em seguida, o InputStreamReader lê bytes e os decodifica em caracteres.
- Finalmente, o objeto BufferedReader lê o texto de um fluxo de entrada de caracteres, armazenando em buffer caracteres para fornecer uma leitura eficiente de caracteres, matrizes e linhas.
InputStreamReader inp = new InputStreamReader(system.in);
BufferedReader br = new BufferedReader(inp);
System.in
(int a primeira linha do código) terá capital S
para o nome da classe.
Apenas um detalhe extra. Se você não quiser arriscar um vazamento de memória / recursos, feche o fluxo do scanner quando terminar:
myScanner.close();
Observe que o java 1.7 e posterior captura isso como um aviso de compilação (não pergunte como eu sei disso :-)
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);
}
}
Aqui está uma versão mais desenvolvida da resposta aceita, que aborda duas necessidades comuns:
Código
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();
}
}
Exemplo
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...
Observe que nextLine()
, sem , a entrada incorreta acionará a mesma exceção repetidamente em um loop infinito. Você pode usar, next()
dependendo da circunstância, mas saiba que entradas como this has spaces
irão gerar várias exceções.
Adicione throws IOException
ao lado main()
e depois
DataInputStream input = new DataInputStream(System.in);
System.out.print("Enter your name");
String name = input.readLine();
É muito simples obter entrada em java, tudo o que você precisa fazer é:
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);
}
}
Você pode obter informações do usuário como esta usando um BufferedReader:
InputStreamReader inp = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inp);
// you will need to import these things.
É assim que você os aplica
String name = br.readline();
Portanto, quando o usuário digitar seu nome no console, "Nome da string" armazenará essas informações.
Se for um número que você deseja armazenar, o código ficará assim:
int x = Integer.parseInt(br.readLine());
Espero que isso ajude!
Pode ser algo assim ...
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");
}
Este é um código simples que usa a System.in.read()
função Este código apenas escreve o que foi digitado. Você pode se livrar do loop while se quiser apenas inserir uma vez e, se quiser, pode armazenar respostas em uma matriz de caracteres.
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;
}
}
}
}
Eu gosto do seguinte:
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;
}
}
}
e por exemplo, eu faria:
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...");
}
}
}
}
Você pode obter a entrada do usuário usando Scanner
. Você pode usar a validação de entrada adequada usando métodos adequados para diferentes tipos de dados, como next()
para String
ou nextInt()
para 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();
A maneira mais simples de obter informações do usuário seria usar o Scanner. Aqui está um exemplo de como deve ser usado:
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();
A linha de código import java.util.Scanner;
informa ao programa que o programador estará usando entradas do usuário em seu código. Como diz, importa o utilitário do scanner. Scanner sc=new Scanner(System.in);
diz ao programa para iniciar as entradas do usuário. Depois de fazer isso, você deve criar uma string ou número inteiro sem um valor e depois colocá-los na linha a=sc.nextInt();
ou a=sc.nextLine();
. Isso fornece às variáveis o valor das entradas do usuário. Então você pode usá-lo no seu código. Espero que isto ajude.
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
sem verificar primeiro o comprimento dessa matriz: voto negativo.
A entrada do teclado usando o Scanner é possível, como outras postadas. Porém, nesses tempos altamente gráficos, é inútil fazer uma calculadora sem uma interface gráfica do usuário (GUI).
No Java moderno, isso significa usar uma ferramenta JavaFX de arrastar e soltar, como o Scene Builder, para criar uma GUI semelhante ao console de uma calculadora. Observe que o uso do Scene Builder é intuitivamente fácil e não exige nenhuma habilidade Java adicional para seus manipuladores de eventos do que você já pode ter.
Para entrada do usuário, você deve ter um TextField amplo na parte superior do console da GUI.
É aqui que o usuário insere os números nos quais deseja executar as funções. Abaixo do TextField, você teria uma matriz de botões de função executando funções básicas (por exemplo, adicionar / subtrair / multiplicar / dividir e memória / recuperar / limpar). Depois que a GUI estiver definida, você poderá adicionar as referências 'controller' que vinculam cada função de botão à sua implementação Java, por exemplo, uma chamada ao método na classe controller do seu projeto.
Este vídeo é um pouco antigo, mas ainda mostra como é fácil usar o Scene Builder.
Scanner
é muito bom para ter disponível.