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.
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]);
}
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+]");
Scanner a une méthode appelée hasNext ():
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
System.out.println(scanner.nextInt());
}
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 int
s par Integer.parseInt()
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();
}
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();
}
}
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.
cela fonctionne très bien ....
int a = nextInt();
int b = nextInt();
int c = nextInt();
Ou vous pouvez les lire dans une boucle
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
}
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 fractionnementa b c
émettra d'abord deux chaînes videsint 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]); }
Utilisation De BufferedReader -
StringTokenizer st = new StringTokenizer(buf.readLine());
while(st.hasMoreTokens())
{
arr[i++] = Integer.parseInt(st.nextToken());
}