【问题标题】:local variable user_input is accessed from within inner class; needs to be declared final局部变量 user_input 从内部类中访问;需要声明为final
【发布时间】:2016-03-18 09:05:57
【问题描述】:
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”,所以它的行为就像“A 类”下面的整行代码是不可见的,它不允许我输入任何内容,使其无用。我比输入 user_input 以便我可以输入一些东西,但是出现了很多错误,但这是一个不断弹出的错误。

【问题讨论】:

  • 代码运行良好!!
  • uhhh 对此有点陌生,所以我不确定如何正确回复,但我使用 ide.c9.io 网站所以我不确定这是否是问题,由于某种原因它没有为我工作o:
  • 代码对我来说似乎很好。当您使用本地内部类(即方法中定义的类)时,会出现这种类型的错误。如果您想学习 java,请不要使用网站编写代码。获取 Eclipse 或 NetBeans 之类的 IDE。
  • @eleyond 这个答案有帮助吗?

标签: java variables github git-bash


【解决方案1】:

我希望你愿意这样做

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

}

}

【讨论】:

    【解决方案2】:

    该错误很可能是由于您声明了扫描仪 (input),然后使用了其他类的扫描仪 (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 方法中初始化类并运行这两个方法。

    【讨论】:

    • 谢谢!这解决了它!虽然我不太了解 Java,但我很高兴你帮助了我,所以我可以学习并继续我的下一个程序:P
    • @eleyond 很高兴我能帮上忙。如果您使用答案旁边的箭头下方的勾号接受它作为答案,我将不胜感激:)
    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 2015-02-10
    • 2019-09-22
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2016-10-11
    相关资源
    最近更新 更多