Как мне многократно умножить число в Java на 2, пока оно не достигнет 1 миллиона? - PullRequest
0 голосов
/ 11 сентября 2018
import java.util.Scanner;

class Main {

    static Scanner userInput = new Scanner(System.in);

    public static void main(String[] args) {
        int testNumber = userInput.nextInt();
        do{
             System.out.println(newNumber * 2);
             newNumber++;
        }while( testNumber < 1000000);
    }
}

Ответы [ 6 ]

0 голосов
/ 11 сентября 2018

Есть хитрая часть do-while петель.В циклах этого типа сначала выполняется do часть.В приведенном ниже примере, хотя ввод уже больше, чем 1000000, он печатает 1000001.

public void doWhileLoop() {

    int num = 1000001;
    do {
        System.out.println(num);
        num *= 2;
    } while (num < 1000000);
}

Следовательно, перед выполнением команды будет полезно использовать некоторые охранные предложения (иначе, if-statements).что-то в циклах do-while.Мол,

public void doWhileLoop() {

     int num = 1000001;
     if(num >= 1000000) {
        return;
     }
     do {
         System.out.println(num);
         num *= 2;
     } while (num < 1000000);
}
0 голосов
/ 11 сентября 2018

@ brso05 преуспел , описав, что здесь пошло не так.Я хотел бы предложить полный пример:

import java.util.Scanner;



public class Main {

    private static Scanner userInputScanner = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.print("Please input a number: ");

        int userInputNumber = userInputScanner.nextInt();
        System.out.println();

        int newNumber = userInputNumber;

        while (newNumber < 1_000_000) {
            newNumber *= 2; // Take the variable on the left, multiply it by the number on the right, and save it in the variable on the left
            System.out.println(newNumber);
        }
    }
}

Попробуйте онлайн!


Осторожно! Этот код необрабатывать любой плохой пользовательский ввод.Например, если вы дадите ему 0, он будет зацикливаться вечно, а если вы дадите ему foo, он рухнет.Если вы хотите обработать все крайние случаи пользовательского ввода, это будет сделано:

import java.util.*;



public class Main {

    private static Scanner userInputScanner = new Scanner(System.in);

    public static void main(String[] args) {

        int userInputNumber;

        // 
        while(true) {
            System.out.print("Please input a number: ");
            if (userInputScanner.hasNext()) {
                // The user gave us something, but we don't know if it's a number

                String rawUserInput = userInputScanner.next();

                try {
                    userInputNumber = Integer.parseInt(rawUserInput);

                    // If that previous line runs, the user has given us an integer!
                    System.out.println();
                    if (userInputNumber > 0) {
                        // The user has given a valid number. Break out of the loop and multiply it!
                        break;
                    }
                    else {
                        // The user has given a bad number. Tell them why and ask again.
                        System.out.println("The number has to be greater than 0.");
                    }
                }
                catch (NumberFormatException exception) {
                    // The user has given us something, but it wasn't an integer
                    System.out.println();
                    System.out.println("That is not a number: " + exception.getMessage());
                }
            }
            else {
                // There is no input, so we can't do anything.
                return;
            }
        }
        // Done looping through user input

        int newNumber = userInputNumber;

        while (newNumber < 1_000_000) {
            newNumber *= 2; // Take the variable on the left, multiply it by the number on the right, and save it in the variable on the left
            System.out.println(newNumber);
        }
    }
}

Попробуйте онлайн!

0 голосов
/ 11 сентября 2018
class Main {
private static Scanner userInput = new Scanner(System.in);
public static void main(String[] args) {
    int newNumber = 0;

    do{
       System.out.println("Enter a positive number: ");

       try{
          newNumber = userInput.nextInt();
       }catch(Exception ignored){  }

       System.out.println("");

    }while(newNumber <= 0);

    System.out.println("-----  " + newNumber + "  multiply by 2 ------");

    while(newNumber <= 1_000_000){
         System.out.print("2 * " + newNumber +" = ");
         newNumber <<= 1;//in some compilers left shift is faster than multiply           
         System.out.println(newNumber);
    }

}
0 голосов
/ 11 сентября 2018

Вы также можете сделать для него рекурсивный метод.

public int reachMillion(int num) {
  if(num<=0)
    return -1;          // indicating it is not possible.
  if(num>=1000000)      // Base Condition denoting we have reached 1 million 
    return num;
  return reachMillion(num*2); // recursive part to multiply by 2 until we reach 1 million
}
0 голосов
/ 11 сентября 2018

Вы имеете правильную идею с вашим циклом, но у вас есть несколько проблем с вашими переменными.

  1. Ваша первая проблема - вы читаете переменную от пользователя - testNumber, но затемвы (неправильно) манипулируете совершенно другой переменной - newNumber.
  2. Ваша вторая проблема заключается в том, что вы тестируете неизменную переменную как условие остановки.

Возможно, вы хотите, чтобы ваш цикл был примерно таким:

    do {
         testNumber = testNumber * 2;
         System.out.println(testNumber);
    } while(testNumber < 1000000);
0 голосов
/ 11 сентября 2018

Вам нужно обновить число после умножения его на 2:

newNumber = newNumber * 2;
System.out.println(newNumber);

Также вы используете newNumber и testNumber, а newNumber нигде не определено ...

}while( ***testNumber***newNumber*** < 1000000);

Вам нужно выбрать один, потому что, если вы обновляете newNumber, но сравнивая testNumber в вашем цикле, вы создадите бесконечный цикл.

Код, который вы показали, не должен компилироваться, если вы не пропустите что-то из своего поста.

...