web-dev-qa-db-fra.com

Java lisant plusieurs ints d'une seule ligne

Je travaille sur un programme et je veux permettre à un utilisateur d'entrer plusieurs entiers à la demande. J'ai essayé d'utiliser un scanner, mais j'ai constaté qu'il ne stocke que le premier entier saisi par l'utilisateur. Par exemple:

Entrez plusieurs entiers: 1 3 5

Le scanner n’obtiendra que le premier entier 1. Est-il possible d’obtenir les 3 différents entiers d’une même ligne et de les utiliser ultérieurement? Ces nombres entiers sont les positions des données dans une liste chaînée que je dois manipuler en fonction de la saisie de l'utilisateur. Je ne peux pas poster mon code source, mais je voulais savoir si c'était possible.

20
Steven

Je l'utilise tout le temps sur hackerearth

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String  lines = br.readLine();    

    String[] strs = lines.trim().split("\\s+");

    for (int i = 0; i < strs.length; i++) {
    a[i] = Integer.parseInt(strs[i]);
    }
19
Prasanth Louis

Vous voulez prendre les nombres en tant que chaîne, puis utiliser String.split(" ") pour obtenir les 3 nombres. 

String input = scanner.nextLine();    // get the entire line after the Prompt 
String[] numbers = input.split(" "); // split by spaces

Chaque index du tableau contiendra une représentation sous forme de chaîne des nombres qui peuvent être transformés en ints par Integer.parseInt()

8
BitNinja

Essaye ça

public static void main(String[] args) {
    Scanner in = new Scanner(System.in); 
    while (in.hasNext()) {
        if (in.hasNextInt())
            System.out.println(in.nextInt());
        else 
            in.next();
    }
}

Par défaut, Scanner utilise le motif de délimiteur "\ p {javaWhitespace} +" qui correspond à au moins un espace blanc en tant que délimiteur. vous n'avez rien de spécial à faire. 

Si vous souhaitez faire correspondre un espace (1 ou plus) ou une virgule, remplacez l’invocation Scanner par ceci.

Scanner in = new Scanner(System.in).useDelimiter("[,\\s+]");
8
E.A.

Le scanner a une méthode appelée hasNext ():

    Scanner scanner = new Scanner(System.in);

    while(scanner.hasNext())
    {
        System.out.println(scanner.nextInt());
    }
8
sendon1982

Si vous savez combien d’entiers vous obtiendrez, vous pouvez utiliser la méthode nextInt()

Par exemple

Scanner sc = new Scanner(System.in);
int[] integers = new int[3];
for(int i = 0; i < 3; i++)
{
    integers[i] = sc.nextInt();
}
5
Sk1X1

Voici comment vous utiliseriez l'analyseur pour traiter autant d'entiers que l'utilisateur voudrait entrer et placer toutes les valeurs dans un tableau. Cependant, vous ne devriez utiliser ceci que si vous ne connaissez pas le nombre entier que l'utilisateur entrera. Si vous le savez, vous devez simplement utiliser Scanner.nextInt() le nombre de fois que vous souhaitez obtenir un entier.

import Java.util.Scanner; // imports class so we can use Scanner object

public class Test
{
    public static void main( String[] args )
    {
        Scanner keyboard = new Scanner( System.in );
        System.out.print("Enter numbers: ");

        // This inputs the numbers and stores as one whole string value
        // (e.g. if user entered 1 2 3, input = "1 2 3").
        String input = keyboard.nextLine();

        // This splits up the string every at every space and stores these
        // values in an array called numbersStr. (e.g. if the input variable is 
        // "1 2 3", numbersStr would be {"1", "2", "3"} )
        String[] numbersStr = input.split(" ");

        // This makes an int[] array the same length as our string array
        // called numbers. This is how we will store each number as an integer 
        // instead of a string when we have the values.
        int[] numbers = new int[ numbersStr.length ];

        // Starts a for loop which iterates through the whole array of the
        // numbers as strings.
        for ( int i = 0; i < numbersStr.length; i++ )
        {
            // Turns every value in the numbersStr array into an integer 
            // and puts it into the numbers array.
            numbers[i] = Integer.parseInt( numbersStr[i] );
            // OPTIONAL: Prints out each value in the numbers array.
            System.out.print( numbers[i] + ", " );
        }
        System.out.println();
    }
}
2
Mostafa

Cela fonctionne bien ....

int a = nextInt();int b = nextInt();int c = nextInt();

Ou vous pouvez les lire en boucle

1
2rd_7

je sais que c'est vieux discuter :) j'ai testé ci-dessous le code cela a fonctionné

`String day = "";
 day = sc.next();
 days[i] = Integer.parseInt(day);`
0
Mahsun Fahmi

Quand on veut prendre Integer comme entrées
Pour seulement 3 entrées comme dans votre cas:

import Java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a,b,c;
a = scan.nextInt();
b = scan.nextInt();
c = scan.nextInt();

Pour plus d'entrées, nous pouvons utiliser une boucle:

import Java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a[] = new int[n]; //where n is the number of inputs
for(int i=0;i<n;i++){
    a[i] = scan.nextInt();    
}
0
Shivaansh Agarwal

Vous recherchez probablement String.split (String regex). Utilisez "" pour votre expression rationnelle. Cela vous donnera un tableau de chaînes que vous pouvez analyser individuellement en entiers.

0
adv12

Il est préférable d’obtenir la totalité de la ligne sous forme de chaîne, puis d’utiliser StringTokenizer pour obtenir les nombres (en utilisant l’espace comme séparateur), puis de les analyser sous forme d’entiers. Cela fonctionnera pour n nombre d’entiers dans une ligne.

    Scanner sc = new Scanner(System.in);
    List<Integer> l = new LinkedList<>(); // use linkedlist to save order of insertion
    StringTokenizer st = new StringTokenizer(sc.nextLine(), " "); // whitespace is the delimiter to create tokens
    while(st.hasMoreTokens())  // iterate until no more tokens
    {
        l.add(Integer.parseInt(st.nextToken()));  // parse each token to integer and add to linkedlist

    }
0
rogue_leader

créé ce code spécialement pour l'examen de la terre Hacker 


  Scanner values = new Scanner(System.in);  //initialize scanner
  int[] arr = new int[6]; //initialize array 
  for (int i = 0; i < arr.length; i++) {
      arr[i] = (values.hasNext() == true ? values.nextInt():null);
      // it will read the next input value
  }

 /* user enter =  1 2 3 4 5
    arr[1]= 1
    arr[2]= 2
    and soo on 
 */ 

0
saurabh singh

Utilisation de BufferedReader

StringTokenizer st = new StringTokenizer(buf.readLine());

while(st.hasMoreTokens())
{
  arr[i++] = Integer.parseInt(st.nextToken());
}
0
Varun Chaudhary

En utilisant ceci sur de nombreux sites de codage:

  • CAS 1: QUAND NOMBRE D'INTÉGRANTS DANS CHAQUE LIGNE IS DONNÉES 

Supposons que vous receviez 3 cas de test avec chaque ligne de 4 entrées entières séparées par des espaces 1 2 3 4, 5 6 7 8, 1 1 2 2

        int t=3,i;
        int a[]=new int[4];

        Scanner scanner = new Scanner(System.in);

        while(t>0)  
        {
            for(i=0; i<4; i++){
                a[i]=scanner.nextInt();
                System.out.println(a[i]);
            }   

        //USE THIS ARRAY A[] OF 4 Separated Integers Values for solving your problem
            t--;
        }
  • CAS 2: LORSQUE LE NOMBRE D'INTÉGRANTS de chaque ligne n'est pas indiqué

        Scanner scanner = new Scanner(System.in);
    
        String lines=scanner.nextLine();
    
        String[] strs = lines.trim().split("\\s+");
    

    Notez que vous devez d’abord trim (): trim().split("\\s+") - sinon, par exemple. splitting a b c émettra deux chaînes vides en premier

        int n=strs.length; //Calculating length gives number of integers
    
        int a[]=new int[n];
    
        for (int i=0; i<n; i++) 
        {
            a[i] = Integer.parseInt(strs[i]); //Converting String_Integer to Integer 
            System.out.println(a[i]);
        }
    
0
Abhimanyu Sharma