-1
votes

Utilisation de variables en dehors des boucles while en java

J'essaie d'écrire un programme en Java qui collecte les noms préférés des utilisateurs dans un tableau, puis imprime ces noms à la fin.

REMARQUE: la longueur du tableau doit être définie par le nombre de noms saisis par un utilisateur.

Jetez un œil au code et dites-moi comment le réparer. Voici ce que j'ai fait jusqu'ici

//Only gets one entry
int i = 1;
String[] favNames = new String[i];

Voici le code d'erreur que j'obtiens:

//These parts:
String[] favNames = new String[i];
int i = 1;

J'ai essayé de déplacer les premières parties du code à l'intérieur de la boucle, mais cela n'imprime qu'un des noms que l'utilisateur entre.

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot find symbol
symbol: variable i
location: class JavaApplication13
at JavaApplication13.main(JavaApplication13.java:52)
Java Result: 1

Si j'échange les places entre la première et la deuxième ligne. Le tableau n'obtient qu'une seule entrée de l'utilisateur.

Scanner input = new Scanner(System.in);

System.out.println("What are your most favorite names?");
        
String[] favNames = new String[i];
int i = 1;
            
while (true){
    System.out.print("Please enter favorite name number" + i + ":  ");
    favNames[i-1] = input.next();
    System.out.print("Is that all?");
    String ans = input.next().toLowerCase();
    if(ans.startsWith("y")){
        System.out.print("Here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
        break;
    }
    i++;
}


0 commentaires

3 Réponses :


0
votes

Déplacez simplement le i ++ dans la boucle while et tout va bien!


1 commentaires

merci pour le commentaire! mais cela ne fonctionne toujours pas.



1
votes

Les variables doivent être déclarées avant utilisation. C'est pourquoi votre programme ne fonctionne pas.

Changement

int i = 1;
String[] favNames = new String[i];

À

String[] favNames = new String[i];
int i = 1;

Mais, gardez à l' esprit que , dans ce cas , l'utilisation ne peut entrer 1 fois (car les tableaux ont une taille fixe). Si vous souhaitez utiliser un nombre arbitraire d'entrées, vous devez utiliser ArrayList ou des types similaires.


0 commentaires

0
votes
  1. déclarer les variables avant de les utiliser:
  2. import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
    
            Scanner input = new Scanner(System.in);
    
            System.out.println("What are your most favorite names?");
    
            String[] favNames = new String[100];
    
            int i = 1;
            while (true) {
                System.out.print("Please enter favorite name number" + i + ":  ");
                favNames[i - 1] = input.next();
                System.out.print("Is that all?");
                String ans = input.next().toLowerCase();
                if (ans.startsWith("y")) {
                    System.out.print("Here is the completed list of your favorite names:\n" + printFavNames(favNames));
                    break;
                }
                i++;
                if (i > favNames.length)
                    System.out.print("Can't accept more than "+favNames.length+" entries, here is the completed list of your favorite names:\n" + printFavNames(favNames));
            }
            input.close();
        }
        static String printFavNames(String[] favNames) {
            String output = "[";
            for (String s : favNames) {
                if (s==null)
                    break;
                if (output.length() > 1)
                    output += ", ";
                output += s;
            }
            output += "]";
            return output;
        }
    }
    

    Cependant, un tableau de taille 1 ne fonctionnera que pour 1 entrée. Si vous souhaitez que l'utilisateur puisse entrer plus que cela, vous avez besoin d'un plus grand tableau.

    Je suggérerais une taille arbitrairement grande (disons 100), puis vérifierais que l'entrée s'inscrit dans le tableau; si ce n'est pas le cas, la partie est terminée.

    static String printFavNames(String[] favNames) {
        String output = "[";
        for (String s : favNames) {
            if (s==null)
                break;
            if (output.length() > 1)
                output += ", ";
            output += s;
        }
        output += "]";
        return output;
    }
    
    

    Le problème est alors que Arrays.toString affichera null pour les entrées vides.

    Je créerais une routine personnalisée pour imprimer le tableau qui se termine sur le premier null:

    String[] favNames = new String[100];
    
    int i = 1;
    while (true) {
        System.out.print("Please enter favorite name number" + i + ":  ");
        favNames[i - 1] = input.next();
        System.out.print("Is that all?");
        String ans = input.next().toLowerCase();
        if (ans.startsWith("y")) {
            System.out.print("Here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
            break;
        }
        i++;
        if (i > favNames.length)
            System.out.print("Can't accept more than "+favNames.length+" entries, here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
    }
    
    

    question connexe: Comment imprimer tous les éléments non nuls d'un tableau en utilisant Array.toString ()

    code complet:

            int i = 1;
            String[] favNames = new String[i];
    

2 commentaires

Merci beaucoup! <br> La question d'affectation m'a demandé de créer un tableau dont la longueur est définie par l'utilisateur. <br>


Ce n'était pas dans la question. Vous créiez toujours un tableau de taille 1, pas une taille définie par l'utilisateur, plutôt que d'utiliser 1, demandez à l'utilisateur la taille.