0
votes

Les paramètres de boucle Java sont ignorés; La boucle ne casse pas

Je veux que mon contribution soit au minimum de 4 cordes et au maximum de 8. Je les ai goûtés pour la pratique. J'ai des paramètres configurés pour que le nombre de jetons soit supérieur à 4 et moins de 8 ans, mais mon code fonctionne, quel que soit le nombre de jetons et je ne sais pas pourquoi.

J'ai également essayé d'insérer une pause à Plusieurs emplacements et je ne peux pas comprendre comment l'arrêter et continuer. Chaque fois que je l'exécute, j'ai besoin de le terminer manuellement. P>

Je veux obtenir l'entrée, la réimprimer, répertorier le nombre de caractères dans chaque jeton, puis réévaluer à nouveau les caractères pour les cas supérieurs / minuscules, les chiffres , espaces blancs. p>

J'apprécie vraiment toute idée. P>

Voici mon code: p>

You entered: 
hi there
hi has 2 characters.
there has 5 characters.
The total number of characters entered without spaces: 7
The number of letters is 7.
The number of digits is 0.
The number of lower case letters is 7.
The number of upper case letters is 0.
The number of white spaces is 1.


0 commentaires

3 Réponses :


1
votes

Le problème est que vous devez arrêter votre principale boucle; Le moyen le plus simple de résoudre ce problème est d'introduire une variable booléenne qui indiquera à l'application que la boucle doit être terminée en tant que telle: xxx

également, petite note concernant votre code - la longueur totale n'est jamais utilisée.


8 commentaires

Merci. Cela aide ma question de boucle, mais savez-vous pourquoi mes paramètres sont ignorés? Peu importe le nombre de chaînes, il imprime à la console, mais je veux seulement que cela soit compris entre 4 et 8 inclus.


Oh, le même problème ici, lorsque vous exécutez votre déclaration "pause", il n'existait que la boucle intérieure - votre seconde en boucle - si vous souhaitez exister complètement le programme, vous devez utiliser "retour" à la place.


Il y a 2 autres problèmes; Premièrement, vous devez exécuter les CountTokens avant d'appeler strtokenizer.nextToken (). Deuxièmement, Yoru si la déclaration est fausse, il est indiqué "S'exécutez-moi si comptez plus de 4 et moindres puis 8", mais cela devrait être opposé <= 4 || Comptez> = 8, c'est-à-dire que seules les saisies avec 4 ou 8 jetons seront acceptées, par ex. "salut là-bas" sera rejeté


@Zacharymull Puisse-je savoir pourquoi avez-vous introduit une boucle de temps pendant la première fois? Je ne vois pas beaucoup de valeur dedans; Donc, je me débarrasserais, changez de condition et utilisez la déclaration de retour là-bas


Je ne suis pas sûr qu'il ait eu du sens parce que je voulais remplir mon tableau d'entrée Tokenized. Maintenant que j'ai placé tokenizedinput.add (stratensizer.nextToken ()); après INT compte = stratensizer.Counttokens (); et a retourné mon plus grand et moins que, mon seul problème est que lorsque les paramètres ne sont pas remplis, il imprime toujours et imprime la sortie deux fois. Si les paramètres sont remplis, cela fonctionne parfaitement.


@Zacharymull C'est pourquoi vous avez besoin d'une déclaration de retour pour mettre fin à l'exécution de l'application; Une autre façon de s'attaquer à ce qu'il est de mettre votre code de scanner à l'intérieur de la boucle. La logique fonctionnera donc comme suit: 1. Insérez votre déclaration; 2. Vérifiez si votre déclaration est remplie vos exigences (de 4 à 8 jetons); 3. Dans l'affirmative, procédez avec la valorisation 4. S'il ne se rencontrait pas, demandez à la touche de plus en plus


@Zacharymull J'ai changé mon code de réponse pour montrer comment tout fonctionnera


Merci Alexander. J'apprécie vraiment votre temps. J'ai toujours du mal à travailler à travers une partie de cette logique, alors quand il est montré, je peux la réaliser plus vite. Je vois ce que tu dis maintenant. Votre logique a beaucoup de sens. Je ne peux vraiment pas vous remercier assez pour votre patience.



0
votes

Un autre moyen est de marquer votre boucle extérieure infinie par une étiquette: xxx


1 commentaires

C'est l'exemple méchant et néfaste d'utiliser goto. Java a construit des mécanismes pour sortir du cycle et il n'ya pas de raison de réinventer la roue et d'utiliser goto ici.



-1
votes

Quel EDI utilisez-vous? Savez-vous ce qu'est un débogueur? Essayez votre code dans un débogueur.

Je pense que votre code est correct mais aussi loin que je peux voir "tout en est toujours vrai". Donc, il fonctionne sans fin. Créez simplement un booléen et réglez-le sur FALSE à la fin. P>

if (strTokenizer.countTokens ( ) >= 4 && strTokenizer.countTokens ( ) <= 8) 
            {
                int count = strTokenizer.countTokens ( ); 
                System.out.println (count); 
            } 
            else 
            {
                System.out.println ("Error. Please type a sentence containing at least 4 words, with a maximum of 8 words"); 
                System.exit (1); 
            }
            
            for (int i = 0; i <= strTokenizer.countTokens ( ); i++) 
            {
                tokenizedInput.add (i, strTokenizer.nextToken ( ) ); 
            }

            // printing out the sentence
            System.out.println ("You entered: ");
            System.out.println (sentenceRetrieved);

            // count the characters in each word
            int totalLength = 0;


7 commentaires

Cela devrait être dans un commentaire.


Cela devrait être dans un commentaire? Pourquoi ?


Merci, cela aide avec la boucle, mais je ne sais pas pourquoi mes paramètres sont ignorés.


Vous ne fournissez pas une solution viable. Dire des questions à l'intérieur d'une réponse est le premier avis qui devrait disparaître.


Es-tu sérieux? Désolé, je ne le sais pas. Mais j'ai fourni une réponse.


Alors qu'en est-il des questions rhétoriques? XD


Votre code fonctionne, peu importe le nombre de jetons que vous avez parce que strtokenizer.Hasmoretokens () revient toujours vrai s'il y a plus d'éléments (chaînes) à gauche. Utilisez simplement une boucle à la place.