2017-02-14 3 views
0

J'essaie de remplir un tableau de chaînes avec des valeurs via l'entrée utilisateur. Je ferai plus avec cette classe plus tard, mais je veux juste voir le tableau rempli et l'imprimer. J'utilise une boucle while pour remplir une valeur spécifique, en attendant que l'utilisateur saisisse 0 pour arrêter, mais j'obtiens une exception ArrayIndexOutOfBoundsException quelle que soit la taille de mon tableau ou pour les boucles après avoir soumis une valeur. La saisie de 0 ne l'arrête pas non plus. Code complet ci-dessous.Le tableau de chaînes jette toujours ArrayIndexOutOfBoundsException

En outre, l'exception a la taille de mon tableau qui lui est associée (dans ce cas, 25.)

aide serait très apprécié, merci!

import java.util.Scanner; 

public class Dincision { 
static Scanner scanner = new Scanner(System.in); 

public static String entered; 
public static String[]foods; 

public static void main (String[]args){ 
    getChoices(); 
    int count=0; 
    for (count=0; count<=24; count++){ 
     System.out.println(foods[count]); 
    } 
} 

static public void getChoices() { 
    int i=0; 
    foods= new String[25]; 
    String input; 
    System.out.println("Enter an eating option."); 
    input=scanner.next(); 
    while (input != "0"){ 
     foods[i]=input; //error here// 
     i++; 
    } 
    System.out.println("That's all!"); 

} 
} 
+3

'while (entrée! =" 0 "&& i <25) {'. –

+1

Vous pouvez également ajouter un point d'arrêt à l'emplacement défaillant et le déboguer. C'est comme ça qu'on apprend. – JonyD

+4

Besoin de café, n'utilisez pas ['==' ou '! =' Pour comparer les chaînes en Java] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – azurefrog

Répondre

0

Vous devez limiter la mise en boucle de l'instruction while à la taille de la baie. Vous essayez d'obtenir de la nourriture [26] qui n'existe pas.

7

Il y a deux problèmes ici. Tout d'abord, c'est not the correct way to compare Strings. Vous devriez plutôt utiliser while(!input.equals("0"). Deuxièmement, vous n'obtenez pas de nouvelles données à l'intérieur de la boucle. Il va continuer à répéter en utilisant la même valeur d'entrée encore et encore jusqu'à ce qu'il dépasse les limites du tableau. Modifiez la boucle à ceci:

input=scanner.next(); 
while(!input.equals("0")){ 
    foods[i]=input; 
    i++; 
    input=scanner.next(); 
} 

pour obtenir une nouvelle entrée à l'intérieur de la boucle. Par ailleurs, pour être sûr, vous devez ajouter une vérification des bornes à la boucle while. Arrêtez en boucle s'il n'y a pas plus d'espace pour le mettre dans

while(!input.equals("0") && i < foods.length){ 
+0

Cela a fonctionné pour moi, merci! Je pense que ça va sans dire que je suis assez nouveau. J'ai supposé que vous ne pouviez pas lire l'entrée deux fois avec scanner comme ça ... merci. – Jerevand

0

Puisque je ne peux pas commenter. Je préfère

!"0".equals(input) 

parce qu'il fonctionne lorsque l'entrée est nulle.