Como ler o valor inteiro da entrada padrão em Java

109

Que classe posso usar para ler uma variável inteira em Java?

Nehil Verma
fonte

Respostas:

141

Você pode usar java.util.Scanner( API ):

import java.util.Scanner;

//...

Scanner in = new Scanner(System.in);
int num = in.nextInt();

Ele também pode tokenizar entrada com expressão regular, etc. A API tem exemplos e existem muitos outros neste site (por exemplo, como evito que um scanner lance exceções quando o tipo errado é inserido? ).

poligenelubrificantes
fonte
1
Estou tentando executá-lo no meu ID do eclipse sem nenhum erro de sintaxe, mas não está mostrando nada na saída do console quando tento gerar os valores inteiros lidos. Porque isto é assim?
rh979
@polygenelubricants: in.nextInt () aceita apenas o valor int, não um valor inteiro
Ved Prakash
31

Se estiver usando Java 6, você pode usar o seguinte oneliner para ler um número inteiro do console:

int n = Integer.parseInt(System.console().readLine());
faltando faktor
fonte
17
Gostaria de comentar que, na maioria dos IDEs, System.console retornará nulo quando o aplicativo for invocado por meio de um inicializador, dificultando a depuração. Isso parece ser verdade para IDEA, Eclipse e NetBeans.
Andrew White
1
Se ele inserir uma string ou 'Enter', ele lançará uma NumberFormatException. Portanto, é melhor controlar a string antes de analisá-la como Inteiro
Vasile Surdu
e se houver mais de um inteiro nessa linha separado por espaço?
LostMohican
@LostMohican, existem maneiras de ler tokens delimitados por espaços em branco usando o Scanner.
missingfaktor
17

Aqui estou fornecendo 2 exemplos para ler o valor inteiro da entrada padrão

Exemplo 1

import java.util.Scanner;
public class Maxof2
{ 
  public static void main(String args[])
  {
       //taking value as command line argument.
        Scanner in = new Scanner(System.in); 
       System.out.printf("Enter i Value:  ");
       int i = in.nextInt();
       System.out.printf("Enter j Value:  ");
       int j = in.nextInt();
       if(i > j)
           System.out.println(i+"i is greater than "+j);
       else
           System.out.println(j+" is greater than "+i);
   }
 }

Exemplo 2

public class ReadandWritewhateveryoutype
{ 
  public static void main(String args[]) throws java.lang.Exception
  {
System.out.printf("This Program is used to Read and Write what ever you type \nType  quit  to Exit at any Moment\n\n");
    java.io.BufferedReader r = new java.io.BufferedReader (new java.io.InputStreamReader (System.in));
     String hi;
     while (!(hi=r.readLine()).startsWith("quit"))System.out.printf("\nYou have typed: %s \n",hi);
     }
 }

Prefiro o Primeiro Exemplo, é fácil e bastante compreensível.
Você pode compilar e executar os programas JAVA online neste site: http://ideone.com

Srivastav
fonte
1
ex 2 pode não ser a melhor maneira de apresentar o fluxo de entrada ... ou eu acho que os "Objetos de entrada do sistema" para alguém novo em OOD, Java ou codificação para esse assunto - todo aquele código descritivo e você nomeia o objeto-chave " r ".... um wiseguy, hein? xD +1
Tapper7
1
O Exemplo 1 não está protegido contra entradas de formato falso
Martin Meeser
11

Verifique este:

public static void main(String[] args) {
    String input = null;
    int number = 0;
    try {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        input = bufferedReader.readLine();
        number = Integer.parseInt(input);
    } catch (NumberFormatException ex) {
       System.out.println("Not a number !");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
o perdido
fonte
Qual é o objetivo de capturar NumberFormatExceptione imprimir o rastreamento de pilha?
missingfaktor,
6

A segunda resposta acima é a mais simples.

int n = Integer.parseInt(System.console().readLine());

A questão é "Como ler a entrada padrão".

Um console é um dispositivo normalmente associado ao teclado e monitor a partir do qual um programa é iniciado.

Você pode desejar testar se nenhum dispositivo de console Java está disponível, por exemplo, Java VM não iniciado a partir de uma linha de comando ou os fluxos de entrada e saída padrão são redirecionados.

Console cons;
if ((cons = System.console()) == null) {
    System.err.println("Unable to obtain console");
    ...
}

Usar o console é uma maneira simples de inserir números. Combinado com parseInt () / Double () etc.

s = cons.readLine("Enter a int: ");
int i = Integer.parseInt(s);    

s = cons.readLine("Enter a double: ");
double d = Double.parseDouble(s);
Najib Tounsi
fonte
2
-1 por não responder à pergunta. Ele não quer ler de um console, mas sim da entrada padrão.
Ingo
A pergunta afirma claramente que Ele não deseja ler do console. de qualquer maneira, obrigado por dar algumas informações sobre como ler do console.
Srivastav,
4

verifique este:

import java.io.*;
public class UserInputInteger
{
        public static void main(String args[])throws IOException
        {
        InputStreamReader read = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(read);
        int number;
                System.out.println("Enter the number");
                number = Integer.parseInt(in.readLine());
    }
}
madhav
fonte
3

Isso causa dores de cabeça, então atualizei uma solução que será executada usando as ferramentas de hardware e software mais comuns disponíveis para os usuários em dezembro de 2014. Observe que o JDK / SDK / JRE / Netbeans e suas classes subsequentes, bibliotecas de modelos, compiladores, editores e depuradores são livre.

Este programa foi testado com Java v8 u25. Foi escrito e construído usando
Netbeans IDE 8.0.2, JDK 1.8, OS é win8.1 (desculpas) e o navegador é Chrome (desculpas duplas) - destinado a ajudar o OG UNIX-cmd-line a lidar com a interface gráfica moderna baseada na Web IDEs a ZERO COST - porque as informações (e IDEs) devem ser sempre gratuitas. Por Tapper7. Para todos.

bloco de código:

    package modchk; //Netbeans requirement.
    import java.util.Scanner;
    //import java.io.*; is not needed Netbeans automatically includes it.           
    public class Modchk {
        public static void main(String[] args){
            int input1;
            int input2;

            //Explicity define the purpose of the .exe to user:
            System.out.println("Modchk by Tapper7. Tests IOStream and basic bool modulo fxn.\n"
            + "Commented and coded for C/C++ programmers new to Java\n");

            //create an object that reads integers:
            Scanner Cin = new Scanner(System.in); 

            //the following will throw() if you don't do you what it tells you or if 
            //int entered == ArrayIndex-out-of-bounds for your system. +-~2.1e9
            System.out.println("Enter an integer wiseguy: ");
            input1 = Cin.nextInt(); //this command emulates "cin >> input1;"

            //I test like Ernie Banks played hardball: "Let's play two!"
            System.out.println("Enter another integer...anyday now: ");
            input2 = Cin.nextInt(); 

            //debug the scanner and istream:
            System.out.println("the 1st N entered by the user was " + input1);
            System.out.println("the 2nd N entered by the user was " + input2);

            //"do maths" on vars to make sure they are of use to me:
            System.out.println("modchk for " + input1);
            if(2 % input1 == 0){
                System.out.print(input1 + " is even\n"); //<---same output effect as *.println
                }else{
                System.out.println(input1 + " is odd");
            }//endif input1

            //one mo' 'gain (as in istream dbg chk above)
            System.out.println("modchk for " + input2);
            if(2 % input2 == 0){
                System.out.print(input2 + " is even\n");
                }else{
                System.out.println(input2 + " is odd");
            }//endif input2
        }//end main
    }//end Modchk
Tapper7
fonte