Java: Trouver le plus court de mots dans une chaîne de caractères et d'imprimer les documents
Je suis un novice en Java. J'ai pris une classe en C, donc je suis en train de me sortir de ce mode de pensée. Le programme que je suis en train d'écrire a une section dans laquelle l'utilisateur entre un nombre entier, n, puis n nombre de mots par la suite. Cette section cherche ensuite à travers ces mots et trouve la plus courte, puis la retourne pour l'utilisateur. Par exemple, une entrée peut être:
D'ENTRÉE: 4 DE PROGRAMMATION JAVA EST AMUSANT
DE SORTIE: EST
Le code que j'ai actuellement semble renvoyer le mauvais mot. Dans ce cas, il renvoie "PROGRAMMATION", quand il devrait revenir "EST". J'ai pensé que peut-être vous avez tous pu me pointer dans la bonne direction.
int numwords = scan.nextInt();
String sentence = scan.nextLine();
String shortestword = new String();
String[] words = sentence.split(" ");
for (int i = 0; i < numwords; i++){
if (shortestword.length() < words[i].length()){
shortestword = words[i];
}
}
System.out.printf(shortestword);
Pour vous donner une idée de ce que j'étais en train de faire, j'ai été de tenter de saisir les mots dans une chaîne de caractères, "phrase", puis briser cette chaîne de mots individuels dans un tableau, "les mots[]," puis exécuter une boucle for pour comparer les chaînes de caractères les uns des autres en comparant les longueurs pour les entrées dans le tableau. Merci pour votre aide!
OriginalL'auteur Batteries | 2012-09-08
Vous devez vous connecter pour publier un commentaire.
Vous y êtes presque, mais votre comparaison de détecter le plus court de mots est inversé. Il doit être:
Qui est, si votre mot de longueur est inférieure à la longueur de votre ancien mot le plus court, le remplacer.
Aussi, au lieu de commencer avec un vide
String
, commencer avec le première mot, c'est à dire,words[0]
. Sinon, la chaîne vide sera toujours plus court que n'importe quelle chaîne de caractères dans votre tableau:Merci!!!! Je me sens embarrassé au sujet de mon instruction if inversé. Malheureusement, après que j'ai fait ces changements, mon programme ne retourne rien, et, au lieu de juste se termine.
Trouvé que les mots[0] en fait, la nécessaire afin d'être des mots[1]. Merci pour l'étape dans la bonne direction!
Vous êtes les bienvenus, ne soyez pas gêné, il peut arriver, surtout si vous êtes juste de commencer :-). Oui, c'est parce que vous avez un supplément d'espaces dans votre chaîne, entre le nombre
4
et la première chaîneJAVA
, donc vous vous retrouvez avec un tableau de 5 mots au lieu de 4. Vous pouvez ignorer cet espace à l'aide descan.skip(" ");
juste aprèsscan.nextInt()
. Ensuite, vous pouvez utiliser des mots[0].OriginalL'auteur João Silva
Vos si l'énoncé est faux. Cela devrait fonctionner.
OriginalL'auteur fatrock92
Voici une version qui rend l'utilisation de Java 8 Flux API:
Vous pouvez également trier les objets plus complexes, par un de leur attribut: Si vous avez un couple de
Person
s et que vous souhaitez trier par leurlastName
, le plus court d'abord, le code devient:OriginalL'auteur Matthias Braun
Java 8 a fait plus simple. Convertir votre
String
tableau à une liste et l'utilisersorted()
comparer et trier votre liste dans l'ordre croissant. Enfin, l'utilisationfindFirst()
pour obtenir la première valeur de la liste (qui est plus court après le tri).un coup d'oeil,
OriginalL'auteur Sufiyan Ghori
Je suggère d'utiliser Flux API et de commande par longueur:
OriginalL'auteur Aleksey Bykov