Qual a sua pergunta? Você acabou de publicar um código e disse que não gosta de ponteiros. Não entender os ponteiros ainda pode voltar a mordê-lo em java se você não entender passar por referência e passar por valor.
13133 Scott
4
você deve tentar aprender java lendo um livro, Java como programar, 7 / e é uma agradável
Marco Aviles
Respostas:
333
Você pode usar qualquer uma das seguintes opções com base nos requisitos.
import java.io.BufferedReader;import java.io.InputStreamReader;BufferedReader br =newBufferedReader(newInputStreamReader(System.in));String s = br.readLine();int i =Integer.parseInt(s);
Observe que DataInputStreamé para ler dados binários. Usando readIntem System.inque 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#readIntpara detalhes ( DataInputStreamimplementos DataInput).
Radiodef 05/04
3
isso é ótimo, gostaria de ver as importações necessárias adicionadas para garantir a integridade. Também realmente ajudaria aqueles que precisam.
KnightHawk
1
Essa resposta seria muito mais útil se mencionasse quais eram realmente os requisitos. Eu comecei uma recompensa para tentar consertar isso.
temporary_user_name
405
Uma das maneiras mais simples é usar um Scannerobjeto da seguinte maneira:
import java.util.Scanner;Scanner reader =newScanner(System.in);// Reading from System.inSystem.out.println("Enter a number: ");int n = reader.nextInt();// Scans the next token of the input as an int.//once finished
reader.close();
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 =newScanner(System.in);
Entrada é um nome de variável.
Scanner input =newScanner(System.in);System.out.println("Please enter your name : ");
s = input.next();// getting a String valueSystem.out.println("Please enter your age : ");
i = input.nextInt();// getting an integerSystem.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.
As duas melhores opções são BufferedReadere Scanner.
O método mais usado é Scannere 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
Fácil de usar o Scanner classe
Entrada fácil de números (int, curto, byte, flutuante, longo e duplo)
As exceções são desmarcadas, o que é mais conveniente. Depende do programador ser civilizado e especificar ou capturar as exceções.
É capaz de ler linhas, espaços em branco e tokens delimitados por expressões regulares
Vantagens do BufferedInputStream
BufferedInputStream é sobre a leitura de blocos de dados em vez de um único byte por vez
Pode ler caracteres, matrizes e linhas de caracteres
No geral, cada método de entrada tem finalidades diferentes.
Se você estiver inserindo uma grande quantidade de dados, BufferedReaderpoderá ser melhor para você
Se você está digitando muitos números, Scannerfaz uma análise automática, o que é muito conveniente
Para usos mais básicos, eu recomendaria o, Scannerporque é 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 =newScanner(System.in);// create scannerSystem.out.print("Enter your name");// prompt user
name = scanner.next();// get user input
import java.util.InputMismatchException;// import the exception catching classimport java.util.Scanner;// import the scanner classpublicclassRunScanner{// main method which will run your programpublicstaticvoid 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 =newScanner(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 inputstry{// 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 inputSystem.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 Consolee DataInputStreamtambém são alternativas viáveis.
Consolepossui 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 Consoleclasse.
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.
Vou seguir em frente e chamar o vencedor aqui. Principalmente uma ótima resposta, embora eu desejasse que fosse mais aprofundado sobre quando eu gostaria de usar 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 Consolenão está disponível?
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;publicclassPrintNumber{publicstaticvoid main(String[] args){Scanner scan =newScanner(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);}}
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.
import java.util.Scanner;classDaytwo{publicstaticvoid main(String[] args){System.out.println("HelloWorld");Scanner reader =newScanner(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:
Coletando entrada do usuário repetidamente até que um valor de saída seja inserido
Lidando com valores de entrada inválidos (não inteiros neste exemplo)
Código
package inputTest;import java.util.Scanner;import java.util.InputMismatchException;publicclassInputTest{publicstaticvoid main(String args[]){Scanner reader =newScanner(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 inputSystem.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.Type0 to exit.Enter an integer:12The number entered was:12Enter an integer:-56The number entered was:-56Enter an integer:4.2Invalid input type (must be an integer)Enter an integer: but i hate integers
Invalid input type (must be an integer)Enter an integer:3The number entered was:3Enter an integer:0Exiting...
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 spacesirão gerar várias exceções.
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;publicclassRoot{publicstaticvoid main(String[] args){newRoot();}publicRoot(){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;}}}}
import java.util.Scanner;publicclassMain{publicstaticvoid main(String[] args){System.out.println("Welcome to the best program in the world! ");while(true){System.out.print("Enter a query: ");Scanner scan =newScanner(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 Stringou nextInt()para Integer.
import java.util.Scanner;Scanner scanner =newScanner(System.in);//reads the input until it reaches the spaceSystem.out.println("Enter a string: ");String str = scanner.next();System.out.println("str = "+ str);//reads until the end of lineString aLine = scanner.nextLine();//reads the integerSystem.out.println("Enter an integer num: ");int num = scanner.nextInt();System.out.println("num = "+ num);//reads the double valueSystem.out.println("Enter a double: ");double aDouble = scanner.nextDouble();System.out.println("double = "+ aDouble);//reads the float value, long value, boolean value, byte and shortdouble 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;publicclass main {publicstaticvoid main(String[]args){Scanner sc=newScanner(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.
class ex1 {publicstaticvoid 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 1020
c =30
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.
Esta resposta foi rebaixada - sem motivo. Para mim, é a única maneira utilizável de obter a entrada do usuário em um aplicativo Java.
Trunk
Isso é muito útil e não vejo por que foi negado o voto. No entanto, as respostas atuais e a declaração de recompensa sugerem que eles estão procurando uma resposta para futuros usuários que desejam obter informações por meio de um console.
JFreeman 27/01/19
Eu simplesmente não vejo nenhum usuário de Java - exceto aqueles presos com código escrito em versões antigas do Java - tendo algum uso para a entrada do teclado do Scanner. Da última vez, estou respondendo a uma postagem com recompensa. . .
Trunk
Entendo sua queixa completamente. Pessoalmente, acredito que sua resposta é muito útil, portanto não entendo por que ela foi rejeitada. No entanto, em muitas ocasiões tenho programas escritos que não possuem GUI e, portanto, acredito que o código adequado para a Scanneré muito bom para ter disponível.
precisa saber é
Se o OP disser que se trata de um processo de baixo custo (incorporado?) Com E / S mínima ou nenhuma tela, é justo - o scanner é o que eles precisam. Mas eles não declararam isso. O OP nos pediu essencialmente para aceitarmos que esta frase, "entrada do usuário", sugere principalmente a entrada do teclado ou nos convidou a interpretar a frase por nós mesmos. . .
Respostas:
Você pode usar qualquer uma das seguintes opções com base nos requisitos.
Scanner
classeBufferedReader
eInputStreamReader
aulasDataInputStream
classeO
readLine
método daDataInputStream
classe foi preterido . Para obter o valor String, você deve usar a solução anterior com BufferedReaderConsole
classeAparentemente, esse método não funciona bem em alguns IDEs.
fonte
DataInputStream
é para ler dados binários. UsandoreadInt
emSystem.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. VejaDataInput#readInt
para detalhes (DataInputStream
implementosDataInput
).Uma das maneiras mais simples é usar um
Scanner
objeto da seguinte maneira:fonte
Scanner reader1 = new Scanner(System.in);
?Você pode usar a classe Scanner ou a classe Console
fonte
Você pode obter informações do usuário usando
BufferedReader
.Ele armazenará um
String
valor em,accStr
portanto, você precisará analisá-lo para umint
usoInteger.parseInt
.fonte
Aqui está como você pode obter as entradas do teclado:
fonte
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 usarEntrada é um nome de variável.
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" .
fonte
As duas melhores opções são
BufferedReader
eScanner
.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 convenientePara 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 umScanner
. Vou fornecer um exemplo abrangente abaixo de como usar oScanner
(Para obter mais informações sobre
BufferedReader
consulte Como usar um BufferedReader e consulte Lendo linhas de caracteres )java.util.Scanner
Nota: Outras classes como
Console
eDataInputStream
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 aConsole
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
.fonte
DataInputStream
- a descrição lá parece idêntica ao caso de uso paraScanner
: 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 queConsole
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.
fonte
Para ler uma linha ou string, você pode usar um
BufferedReader
objeto combinado com um daInputStreamReader
seguinte maneira:fonte
Aqui está o seu programa da pergunta usando
java.util.Scanner
:fonte
Scanner
objetos; um teria sido suficiente.Use a
System
classe para obter a entrada.http://fresh2refresh.com/java-tutorial/java-input-output/ :
fonte
System.in
(int a primeira linha do código) terá capitalS
para o nome da classe.fonte
Apenas um detalhe extra. Se você não quiser arriscar um vazamento de memória / recursos, feche o fluxo do scanner quando terminar:
Observe que o java 1.7 e posterior captura isso como um aviso de compilação (não pergunte como eu sei disso :-)
fonte
fonte
fonte
Aqui está uma versão mais desenvolvida da resposta aceita, que aborda duas necessidades comuns:
Código
Exemplo
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 comothis has spaces
irão gerar várias exceções.fonte
Adicione
throws IOException
ao ladomain()
e depoisfonte
É muito simples obter entrada em java, tudo o que você precisa fazer é:
fonte
fonte
Você pode obter informações do usuário como esta usando um BufferedReader:
É assim que você os aplica
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:
Espero que isso ajude!
fonte
Pode ser algo assim ...
fonte
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.fonte
Eu gosto do seguinte:
e por exemplo, eu faria:
fonte
fonte
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, comonext()
paraString
ounextInt()
paraInteger
.fonte
A maneira mais simples de obter informações do usuário seria usar o Scanner. Aqui está um exemplo de como deve ser usado:
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 linhaa=sc.nextInt();
oua=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.fonte
fonte
fonte
args
sem verificar primeiro o comprimento dessa matriz: voto negativo.java ex1
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.
fonte
Scanner
é muito bom para ter disponível.