有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    你对循环的想法是正确的,但是你的变量有很多问题

    1. 第一个问题是,您从用户-testNumber读取了一个变量,但随后(错误地)操作了一个完全不同的变量-newNumber
    2. 第二个问题是,您正在测试未更改的变量作为停止条件

    你可能希望你的循环是这样的:

        do {
             testNumber = testNumber * 2;
             System.out.println(testNumber);
        } while(testNumber < 1000000);
    
  2. # 2 楼答案

    将数字乘以2后需要更新:

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

    此外,您正在使用newNumbertestNumber,并且newNumber似乎没有在任何地方定义

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

    您需要选择一个,因为如果您正在更新newNumber,但比较循环中的testNumber,您将创建一个无限循环

    你展示的代码不应该编译,除非你在文章中遗漏了什么

  3. # 3 楼答案

    do-while循环中有一个棘手的部分。在这种类型的循环中,首先执行do部分。对于下面的示例,虽然输入已经大于1000000,但它打印1000001

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

    因此,在do while循环中执行某些操作之前,最好使用一些保护子句(aka,if-statements)。比如

    public void doWhileLoop() {
    
         int num = 1000001;
         if(num >= 1000000) {
            return;
         }
         do {
             System.out.println(num);
             num *= 2;
         } while (num < 1000000);
    }
    
  4. # 4 楼答案

    描述这里出了什么问题。我想提供一个完整的例子:

    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);
            }
        }
    }
    

    Try it online!


    小心该代码不会处理任何错误的用户输入。例如,如果给它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);
            }
        }
    }
    

    Try it online!

  5. # 5 楼答案

    您还可以为它创建一个递归方法

    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
    }
    
  6. # 6 楼答案

    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);
        }
    
    }