Lecture Java de plusieurs entrées à partir d'une seule ligne

je travaille sur un programme et je veux permettre à un utilisateur d'entrer plusieurs entiers lorsqu'on le lui demande. J'ai essayé d'utiliser un scanner, mais j'ai trouvé qu'il n'enregistre que le premier entier saisi par l'utilisateur. Par exemple:

entrer plusieurs entiers: 1 3 5

le scanner n'obtiendra que le premier entier 1. Est-il possible d'obtenir les 3 entiers différents d'une même ligne et de pouvoir les utiliser plus tard? Ces entiers sont les positions des données dans une liste liée que je dois manipulez en fonction des entrées des utilisateurs. Je ne peux pas poster mon code source, mais je voulais savoir si c'est possible.

18
demandé sur Steven 2014-05-07 03:52:29

11 réponses

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]);
    }
16
répondu Prasanth Louis 2018-07-02 15:03:27

Essayez ceci

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, le Scanner utilise le motif de délimiteur "\p{javaWhitespace}+ " qui correspond au moins à un espace blanc comme délimiteur. vous n'avez pas à faire quelque chose de spécial.

si vous voulez faire correspondre un espace blanc(1 ou plus) ou une virgule, remplacez l'invocation du Scanner par ceci

Scanner in = new Scanner(System.in).useDelimiter("[,\s+]");
8
répondu E.A. 2014-08-07 02:55:59

Scanner a une méthode appelée hasNext ():

    Scanner scanner = new Scanner(System.in);

    while(scanner.hasNext())
    {
        System.out.println(scanner.nextInt());
    }
7
répondu sendon1982 2014-05-07 01:24:13

Vous voulez prendre les chiffres dans une Chaîne, puis utiliser String.split(" ") pour obtenir les 3 numéros.

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 String des nombres qui peut être faite pour être ints par Integer.parseInt()

7
répondu BitNinja 2016-02-18 15:21:09

Si vous savez comment beaucoup entiers que vous obtiendrez, vous pouvez utiliser nextInt() méthode

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
répondu Sk1X1 2014-05-06 23:58:48

Voici comment vous utiliseriez le Scanner pour traiter autant d'entiers que l'utilisateur voudrait entrer et mettre toutes les valeurs dans un tableau. Cependant, vous ne devriez utiliser cette option si vous ne savez pas combien d'entiers à l'utilisateur d'entrée. Si vous le savez, vous devez tout simplement utiliser Scanner.nextInt() le nombre de fois où 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
répondu Mostafa 2016-04-29 19:55:04

vous cherchez probablement String.split (String regex). Utilisez "" pour votre regex. Cela vous donnera un tableau de chaînes que vous pouvez analyser individuellement dans ints.

0
répondu adv12 2014-05-06 23:55:49

cela fonctionne très bien ....

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

Ou vous pouvez les lire dans une boucle

0
répondu 2rd_7 2016-05-25 06:03:46

mieux vaut obtenir la ligne entière comme une chaîne et puis utiliser StringTokenizer pour obtenir les nombres (en utilisant l'espace comme délimiteur ) et puis les Parser comme des 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
répondu rogue_leader 2016-12-09 07:51:13

en utilisant ceci sur de nombreux sites de codage:

  • cas 1: QUAND LE NOMBRE D'ENTIERS DANS CHAQUE LIGNE EST DONNÉ

supposons qu'on vous donne 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'entiers dans chaque ligne n'est pas donné

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

    Notez que vous avez besoin de couper() tout d'abord: trim().split("\s+") - sinon, par exemple le fractionnement a b c émettra d'abord deux chaînes vides

        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
répondu Abhimanyu Sharma 2018-01-05 15:42:21

Utilisation De BufferedReader -

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

while(st.hasMoreTokens())
{
  arr[i++] = Integer.parseInt(st.nextToken());
}
0
répondu Varun Chaudhary 2018-02-06 09:19:28