无法完成我的工作...虽然循环工作 - Java

Trouble Getting My Do...While Loop To Work - Java

我正在努力做到这一点,程序将继续请求输入 5 位数字,直到用户提供 5 位数字。当我 运行 以下内容时:

//import scanner to read keyboard input
import java.util.Scanner;
class NumberInverter {
    public static void main(String[] args) {
    //create a new Scanner object in the memory that reads from the input System.in
    Scanner keyboard = new Scanner(System.in);
        
        //display message propmt and input for number
        //conditional statement loop to check if the length is any number other than 5
        do {
        System.out.print("Enter any 5 digit whole number you wish to invert!");
        int num = keyboard.nextInt();
        int numSize = String.valueOf(num).length();
        } while(!isValid(numSize));
}
    private static boolean isValid(int numSize){
        
        if(numSize != 5){
            System.out.println("Oops! Looks like you gave a number that isn't exactly a 5 digit whole number. Try again!");
            return false;
        } else return true; 
}
}

我收到以下错误:

NumberInverter.java:20: error: cannot find symbol
                } while(!isValid(numSize));              ^
  symbol:   variable numSize
  location: class NumberInverter
1 error

我尝试了很多不同的东西,任何人都可以 java 帮助我吗?我是新手? 提前致谢!

num size 是在循环范围内声明的,您正试图在该范围外访问它。为此,请在 do 语句之前声明 numSize 并在循环内分配它。这样,变量在整个语句和循环内(用于赋值)都是可见的。

    int numSize;
    do {
      // The rest of your code, all variables declared here are
      // gone outside the brackets, however you can access the ones
      // in outer scopes.
      numSize = String.valueOf(num).length();
    } while(!isValid(numSize));

有关不同类型范围的更多信息,请参阅此内容:https://www.geeksforgeeks.org/variable-scope-in-java/

变量 numSizewhile 条件检查不在同一范围内。

在Java中,任何在块内声明的变量(被{}包围的区域)都不能在该块外访问。在这种情况下,由于您是在循环内部声明 numSize,因此循环的条件(在该块之外)无法访问它。每个块都会创建一个称为“块作用域”的东西,在其中创建的变量无法在其外部访问。

解决这个问题的方法非常简单:在与 while 循环相同的范围内声明变量。这可以通过将其放在 do 的正上方来完成。请注意,您只需要int numSize;,在外面一次。当你在循环中分配给它时,你不要把 int 放在循环中,你只是做 numSize = .... 因为你正在分配给一个先前声明的变量。

您仍然可以从循环内部为变量赋值,但由于它最初是在循环外部声明的,因此循环外部的东西可以访问它。

 int numSize;
 do {
        System.out.print("Enter any 5 digit whole number you wish to invert!");
        int num = keyboard.nextInt();
        numSize = String.valueOf(num).length();
 } while(!isValid(numSize));

可以在 .

找到有关作用域的更多信息

创建局部变量 numSize。 例如:

//import scanner to read keyboard input
import java.util.Scanner;
class NumberInverter {
    public static void main(String[] args) {
    //create a new Scanner object in the memory that reads from the input System.in
    Scanner keyboard = new Scanner(System.in);
   int numSize;
        //   int numSize;
        //display message propmt and input for number
        //conditional statement loop to check if the length is any number other than 5
        do {
        System.out.print("Enter any 5 digit whole number you wish to invert!");
        int num = keyboard.nextInt();
         numSize = String.valueOf(num).length();
             
         } while(!isValid(numSize));
}
    private static boolean isValid(int numSize){
        
        if(numSize != 5){
            System.out.println("Oops! Looks like you gave a number that isn't exactly a 5 digit whole number. Try again!");
            return false;
        } else return true; 
}

}