Défini par l'utilisateur String taille de la matrice d'entrée/Java
Je suis en train d'écrire un menu powered programme en Java. Je vais avoir un peu de difficulté à l'aide d'une boucle for à la lecture du mode d'entrée de mon tableau de chaînes de bien. Lorsque je modifie le tableau de String en int le code fonctionne très bien. Mais quand j'ai changer de chaîne, il traverse deux fois la boucle avant que l'utilisateur a une chance à saisir un nom d'équipe. J'ai également besoin d'avoir à l'utilisateur de contrôler la taille du tableau en fonction du nombre d'équipes qu'ils veulent entrer, donc si vous voulez entrer en dire 5 équipes alors la matrice sera de taille 5. Si je déclare le tableau avant de l'utilisateur entre la taille de la matrice alors il ne fonctionne pas. Et je ne peux pas garder à l'intérieur de l'instruction if ou il sera question de la portée. Quelqu'un peut-il voir un moyen de contourner cela? Voici le premier bit du programme
import java.util.Scanner;
public class main {
public static void main(String[] args) {
System.out.println("Howdy sports fan!");
String menuSelect;
do {
System.out.println("Please pick an option from the list below:");
System.out.println("1) Create League");
System.out.println("2) List all teams");
System.out.println("3) Record a win");
System.out.println("4) Record a loss");
System.out.println("5) Quit");
Scanner keyboard = new Scanner(System.in);
menuSelect = keyboard.nextLine();
if ( menuSelect.equals("1") )
{
System.out.println("How many teams should I make?");
String[] teamsArray= new String[keyboard.nextInt()];
for ( int i = 0; i < teamsArray.length; i++ )
{
System.out.println("Team " + (i+1) + "'s name?");
teamsArray[i] = keyboard.nextLine();
}
}
} while(!menuSelect.equals("5"));
}
Vous devez vous connecter pour publier un commentaire.
Votre code a un certain nombre de problèmes avec elle que j'ai essayé de corriger comme par ci-dessous:
Un: Vous avez eu votre classe nommée "main" - qui est à la limite ok, mais doivent être capitalisés. Cependant, j'ai pris la liberté de le renommer en quelque chose de plus pertinent à votre problème.
Deux: Vous devez utilisation ArrayLists au lieu de "normal" tableaux où possible - que vous réaffectez, désallouer de la mémoire et d'autres options beaucoup mieux que vous le feriez avec un réseau régulier.
Trois: Vous devez utiliser le commutateur - depuis votre nombre de cas dépasse 4 (qui est une règle générale de pouce lors de l'écriture de code de menu pour des raisons de lisibilité).
- Les de côté, je pense que cela devrait convenir à votre problème tout à fait bien.
Dans votre cas, la boucle était en train de le lire deux fois, puisque vous n'avez un
keyboard.nextInt()
. Même si, vous avez bien lu l'entier correctement, le caractère de saut de ligne n'avait pas été lu. Par conséquent, lorsquekeyboard.nextLine()
a été appelé, il lire le caractère de saut de ligne - ce qui vous a donné l'impression que vous avez eu en boucle "deux fois" et n'avait pas repris votre deuxième sortie (alors qu'en fait, il avait, mais vous ne saviez pas, ou voir). C'est aussi pourquoi, lorsque l'on a comme une chaîne de caractères, il a capturé le caractère de saut de ligne et la capture a fonctionné parfaitement.Mise à JOUR:
Modifiées à utiliser les tableaux statiques versus ArrayLists: