0
votes

JAVA trouve le mot le plus grand et le plus petit dans la chaîne

    public class maxWord {
    public static void main(String[] args) {
        String str = "“@2434 rfdfd4f fff“";
        System.out.println(maxWord(str));
        System.out.println(minWord(str));
    }

    public static String maxWord(String input){
        String[] str = input.split(" ");
        if (str.length==0) return null;
        String longest=" ";
        for (String word:str){

            if (word.length()>longest.length()) {
                longest=word;

            }
        }
        return longest;
    }

    public static String minWord(String input){
        String[] str = input.split(" ");
        String shortest=" ";
        for (String word:str){
            if (word.length()<shortest.length()) {
                shortest=word;

            }
        }
        return shortest;
    }
}
i have 2 methods here and they are almost similar but minWord doesn't show the smallest word, where is the mistake?actually don't undestand where is a problem, i hope you will help me

2 commentaires

String shortest = " "; - il y a déjà un caractère bien avant d'entrer dans la boucle.


Si vous utilisez IntelliJ, cela peut être utile pour vous: jetbrains.com/help/idea/ ... Placez le point d'arrêt à l'instruction if dans la méthode minWord()


3 Réponses :


0
votes

Vous devez définir la première chaîne du tableau comme "longueur minimale" car la valeur initiale "" n'est que de longueur 1 et plus courte que les autres.

Par exemple:

private static String shortest(String test) {
    String[] words = test.split(" ");
    String shortest = words[0];
    for(int i = 1; i < words.length;i++){
        if(words[i].length() < shortest.length()){
            shortest = words[i];
        }
    }
    return shortest;
}

Ou sans si dans la boucle:

private static String shortest(String test) {
    String[] words = test.split(" ");
    String shortest = null;
    for(String word : words){
        if(shortest == null){
            shortest = word;
        }else  if(word.length() < shortest.length()){
            shortest = word;
        }
    }
    return shortest;
}


0 commentaires

2
votes

Vous pouvez utiliser des flux pour le faire en une seule ligne:

public static void main(String[] args) {
    String string = "This is a long sentence";
    List<String> wordList = Arrays.asList(string.split("\\s+"));

    String shortest = wordList
            .stream()
            .min(Comparator.comparingInt(String::length))
            .orElse(null);
    System.out.println(shortest); //prints "a"

    String longest = wordList
            .stream()
            .max(Comparator.comparingInt(String::length))
            .orElse(null);
    System.out.println(longest); //prints "sentence"
}


0 commentaires

2
votes

Vous avez String shortest=" "; par conséquent, le shortest a une longueur = 1. Vous pouvez simplement donner au shortest une très longue chaîne, ou même la chaîne d'entrée elle-même:

    public static String minWord(String input){
        String[] str = input.split(" ");

        String shortest=input; // so shortest is initially the largest string

        for (String word:str){
            if (word.length()<shortest.length()) {
                shortest=word;

            }
        }
        return shortest;
    }


0 commentaires