Donc, mon code doit prendre la chaîne et renvoyer le caractère au milieu de la chaîne et si la chaîne a un nombre pair d'éléments, il doit renvoyer deux au milieu

Donc ma question est quand j'écris mon code comme ça

 public static String getMiddle(String word) {

        if(word == null)
        {
            return null;
        }
        else
        {
            int length = word.length() / 2;
            if(word.length() % 2 == 0)
            {
                return "" + word.charAt(length-1) + word.charAt(length);
            }
            else
            {
                return "" + word.charAt(length);
            }

        }

Cela fonctionne bien, mais lorsque j'essaie de réécrire le code dans une seule instruction comme ci-dessous, j'ai obtenu un index de chaîne hors limites : erreur 2

    public static String getMiddle(String word) {


            int length = word.length() / 2;
            return "" + ((word.length() % 2 == 0)  ? (word.charAt(length-1)) +"" + (word.charAt(length+1)) :  word.charAt(length)

enter image description here

-1
Emeraldo 19 mars 2021 à 20:48

3 réponses

Meilleure réponse

L'opérateur + est différent entre string et char.

char two = '2'; // code point 50
char three = '3'; // code point 51

String twentyThree = ("" + '2') + '3'; // "23"
String charE = "" + ('2' + '3'); // "e", code point 101
2
ILMTitan 19 mars 2021 à 21:40

Cela devrait fonctionner

return (word.length() % 2 == 0)
    ? "" + word.charAt(length-1) + word.charAt(length)
    : "" + word.charAt(length);
1
Lionel Foxcroft 19 mars 2021 à 18:01

Premièrement, lorsque vous saisissez une chaîne dans getMiddle(), elle ne sera jamais nulle. Vous pouvez donc remplacer la première instruction if par : if (word.isEmpty()) { return null; }. Il est également conseillé de ne pas renvoyer juste null.

La raison pour laquelle votre instruction return renvoie un entier est que pour la première valeur de l'opérateur ternaire, vous ajoutez deux caractères, ce qui donne un entier. Pour corriger la première valeur, remplacez-la par : (word.charAt(length - 1) + "" + word.charAt(length + 1)). La deuxième valeur renvoie un caractère mais la méthode indique que vous renvoyez une chaîne, c'est donc une autre erreur. Pour corriger la deuxième valeur, remplacez-la par (word.charAt(length) + "")

1
averytard 19 mars 2021 à 18:11