java не работает в цикле - PullRequest
       1

java не работает в цикле

0 голосов
/ 12 февраля 2020

Я пишу программу для курса java в университете, которая меняет заданное значение на целое число. Первый l oop работает нормально, однако по какой-то причине второй l oop даже не запускается и программа зависает. Я не уверен, почему это происходит, и, возможно, у кого-то есть ответ. Нам сказали хранить значения в переменных типа long, а не хранить в строках. Спасибо. `

    Scanner keyboard = new Scanner(System.in); //For user input
    long number = 0L; //Where the number entered by the user will be stored
    long loopNumber = 0L; //To be able to control the loop more effectively. a do while loop just kept going forever for some reason
    int nbDigits = 0; //Where the total number of digits will be stored
    long reverse = 0L;//Where the reversed number will be stored


    System.out.println("Enter a number with at most 10 digits:");
        number = keyboard.nextInt();
     keyboard.close(); //Close the Scanner object


    //Counting the total number of digits in the number
    loopNumber = number;
    while(loopNumber != 0) {
        loopNumber /= 10;
        ++nbDigits;
        System.out.println("this is the value of nbDigits " +nbDigits );
    }
    //calculating the reverse order of the entered integer
    loopNumber = number;
    while(loopNumber != 0) {
        reverse *= 10;
        reverse = reverse + (number%10);
    }

    System.out.println("Number of digits is " + nbDigits +"\nReverse of " + number + " is " + reverse);

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Вы никогда не измените loopNumber во втором l oop, поэтому оно никогда не закончится.

//calculating the reverse order of the entered integer
loopNumber = number;
while(loopNumber != 0) {
    reverse *= 10;
    reverse = reverse + (number%10);
}
0 голосов
/ 12 февраля 2020

Этот код должен работать для вас

import java.util.Scanner;

public class Test {
    public static void main(String args[]) {
        Scanner keyboard = new Scanner(System.in); // For user input
        long number = 0L; // Where the number entered by the user will be stored
        long loopNumber = 0L; // To be able to control the loop more effectively. a do while loop just kept
                                // going forever for some reason
        int nbDigits = 0; // Where the total number of digits will be stored
        long reverse = 0L;// Where the reversed number will be stored

        System.out.println("Enter a number with at most 10 digits:");
        number = keyboard.nextInt();
        keyboard.close(); // Close the Scanner object

        // Counting the total number of digits in the number
        loopNumber = number;
        while (loopNumber != 0) {
            loopNumber /= 10;
            ++nbDigits;
        }
        // calculating the reverse order of the entered integer
        loopNumber = number;
        int loopDigits = nbDigits;
        while (loopDigits != 0) {
            loopDigits--;
            long orig = loopNumber;
            loopNumber /= 10;
            reverse = (long) (reverse + (orig - loopNumber * 10) * Math.pow(10, loopDigits));
        }

        System.out.println("Number of digits is " + nbDigits + "\nReverse of " + number + " is: " + reverse);
    }
}

Вот пример ввода / вывода

Enter a number with at most 10 digits:789456
Number of digits is 6
Reverse of 789456 is: 654987
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...