从内部 class 访问局部变量 user_input;需要声明为final

local variable user_input is accessed from within inner class; needs to be declared final

import java.util.Scanner;

public class Testing {

    public static void main(String [] args)  {

        Scanner user_input = new Scanner( System.in );

        String start;
        System.out.print("(Don't put capital letters) ");

        String color;
        System.out.print("Enter Your Favorite Color: ");
        color = user_input.next ( );

        String animal;
        System.out.print("Enter Your Favorite Animal: ");
        animal = user_input.next ( );

        String preference;
        preference = color + " and that your favorite animal is a " + animal;

        System.out.println("From the information I gathered, I figured out that you like the color " + preference);

        class A {
            public void Main(String[] args) {
                Scanner input = new Scanner(System.in);
                    System.out.println("Do you want to hear a joke?");
                String a = user_input.next ( );

                if (a.equalsIgnoreCase("yes")) ;
                    System.out.println("What did the fish say when he ran into a wall? Dam");

                if(a.equalsIgnoreCase("no")) ;
                    System.out.println("Oh..."); }

        }
    }
}

这就是错误

Testing.java:29: error: local variable user_input is accessed from within inner class; needs to be declared final
    String a = user_input.next ( );
               ^

1 个错误

我一直在弄乱代码,错误越来越多,所以我决定问问比我更有经验的人。我只使用了 java 一天,这是我创建的第一个程序,我搜索了至少 2 小时的解决方案但找不到,所以我决定问问。我之前让它编译过,但它没有 "user_input.next" 所以它表现得就像 "class A" 下面的整行代码是不可见的,它不会让我输入任何东西,让它变得毫无用处。我不是输入 user_input 这样我就可以输入一些东西,但是出现了很多错误,但这是不断出现的一个错误。

错误很可能是由于您声明了一个扫描器 (input),然后使用了另一个 class (user_input)

的扫描器

试试这个代码

import java.util.Scanner;

public class Testing 
{
    public void input1()
    {
        Scanner user_input = new Scanner( System.in );

        System.out.print("(Don't put capital letters) ");

        String color;
        System.out.print("Enter Your Favorite Color: ");
        color = user_input.next();

        String animal;
        System.out.print("Enter Your Favorite Animal: ");
        animal = user_input.next();

        String preference;
        preference = color + " and that your favorite animal is a " + animal;

        System.out.println("From the information I gathered, I figured out that you like the color " + preference);
    }

    public void input2()
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Do you want to hear a joke?");
        String a = input.next();

        if(a.equalsIgnoreCase("yes"))
        {
            System.out.println("What did the fish say when he ran into a wall? Dam");
        }
        else if(a.equalsIgnoreCase("no"))
        {
            System.out.println("Oh...");
        }
    }

    public static void main(String[] args)
    {
        Testing tS = new Testing();
        tS.input1();
        tS.input2();
    }
}

这段代码中有两种方法; input1input2。这些方法包含您尝试与命令控制台进行的两个对话。然后在 main 方法中初始化 class 并运行这两个方法。

我希望你愿意这样做

public class Test2 {
private static Scanner user_input = new Scanner(System.in);

private static boolean wantsToContinue(){
    System.out.println("Do you want to hear a joke?");
    String a = user_input.next();
    if(a.equalsIgnoreCase("yes"))
        return true;
    else
        return false;
}

public static void main(String[] args)
{    
    System.out.print("(Don't put capital letters) ");

    System.out.print("Enter Your Favorite Color: ");
    String color = user_input.next();

    System.out.print("Enter Your Favorite Animal: ");
    String animal = user_input.next();

    String preference = color + " and that your favorite animal is a " + animal;
    System.out.println("From the information I gathered, I figured out that you like the color " + preference);


    if(!wantsToContinue()){
        //If not want to continue just return
        System.out.println("Oh...");
        return;
    }

    //Continue with your next joke here
    System.out.println("What did the fish say when he ran into a wall? Dam");

}

}