0
votes

Boucle While en Java :: continue de diviser tant que la condition n'est pas remplie

J'ai un code de base:

public class experiment {

    public static void main(String[] args) {
        System.out.println(experiment(80));
    }

    public static int experiment (int number) {
        while (number > 10) {
            number = number / 2;
            return number;
        } return -1;
    }
}

Il me renvoie 40.

Donc ça veut dire qu'il ne boucle pas sur la variable numéro .

Je voudrais qu'il continue à boucler sur le numéro (80, 40, 20, 10), jusqu'à ce qu'il retourne 10 .

Existe-t-il un moyen de le faire sans utiliser la boucle for ?


5 commentaires

Vous renvoyez le numéro après la première division; renvoyez-le une fois la boucle terminée.


vous avez une déclaration de retour dans votre boucle. Il reviendra donc à la première itération. Retirez-le simplement et revenez une fois votre boucle terminée. BTW: La même chose se produirait si vous utilisiez une boucle for et retourniez à l'intérieur de la boucle for. Ce n'est pas spécifique à la boucle while


numéro de retour; -> il y a votre problème, cela met fin à la méthode, donc la boucle aussi


expérience int statique publique (nombre entier) {while (nombre> 10) {nombre = nombre / 2; } numéro de retour; }


oh, je crois que ça pourrait marcher. Vous pouvez poster la réponse, s'il vous plaît


3 Réponses :


-2
votes

en utilisant la récursivité:

        while (k > 10) {
            k = k / 2;
        } 

        return k;

ou modifiez simplement la boucle comme ceci

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(test.toTen(80));

    }
    public static int toTen(int k) {
        if (k==10) {
            return k;
        }
        else {
            return toTen(k/2);
        }

    }

}


1 commentaires

Pourquoi utiliser la récursivité? Si vous dites que c'est une meilleure approche, vous devez expliquer pourquoi. Et vous devez expliquer pourquoi l'approche d'OP n'a pas fonctionné. Dumping code sans explication ne constitue pas une bonne réponse.



1
votes

Déplacez le return hors de la boucle:

public static int experiment (int number) {
    if (number < 0) { // or some condition
        return -1;
    }
    while (number > 10) {
        number = number / 2;
    }
    return number;
}

Si vous avez besoin du -1 pour un cas particulier, vous devez le vérifier avant d'entrer dans la boucle:

public static int experiment (int number) {
    while (number > 10) {
        number = number / 2;
    }
    return number;
}

BTW, commencez à utiliser un débogueur, vous pouvez parcourir ce type de code et trouver facilement le problème.


0 commentaires

0
votes

Ce qui ne va pas, c'est que vous mettez le numéro de retour dans la boucle tandis que met fin à l'itération et renvoie la valeur de 40 . Donc vous devez,

public static void experiment (int number) {
    while (number > 10) {
        number = number / 2;
        System.out.println(number);
    } 
}

Si vous voulez que tous les nombres passés par la boucle soient imprimés;

public static int experiment (int number) {
    while (number > 10) {
        number = number / 2;
    } 
    return number;
}


0 commentaires