Java 如何访问if-else语句中的实例和变量

Java 如何访问if-else语句中的实例和变量,java,Java,如何访问变量“user_input”和实例“c1”?据我所知,在if-else语句@choice 1的范围之外,它们是不可访问的 请参见以下内容: public static void main (String [] args) { int choice; int user_input; Scanner in = new Scanner (System.in); do { System.out.println ("==== Circl

如何访问变量“user_input”和实例“c1”?据我所知,在if-else语句@choice 1的范围之外,它们是不可访问的

请参见以下内容:

 public static void main (String [] args)
{
    int choice;
    int user_input;

    Scanner in = new Scanner (System.in);

    do
    {
        System.out.println ("==== Circle Computation =========");
        System.out.println ("| 1. Create a new circle\t|");
        System.out.println ("| 2. Print area\t\t\t|");
        System.out.println ("| 3. Print circumference\t|");
        System.out.println ("| 4. Quit\t\t\t|");

        System.out.println ("Choose option (1 - 3): ");
        choice = in.nextInt();

        if (choice == 1)
        {
            System.out.println ("Enter the radius to compute the area & circumference:");
            user_input = in.nextInt();              

            Circle c1 = new Circle(user_input);     //refer to prob @ choice '2'
            System.out.println ("A new circle is created.\n");
        }

        if (choice == 2)
        {           
            //Prob - instance 'c1' & var 'user_input' @ choice '1' not visible in other if-else statements?
            //http://stackoverflow.com/questions/11685023/creating-an-instance-of-an-object-within-an-if-in-c-sharp
            System.out.println ("Area of circle:");
            System.out.println ("Radius: " + c1.getRadius());
            System.out.println ("Area: " + c1.area());
        }                   

用户输入可以在整个方法中使用

C1不能用于第二个if部分,因为if语句中定义了圆C1,因此只能在那里访问

用户输入在while循环外部定义,因此可以在整个循环中访问

每个变量都有它的。当c中的变量定义在块中,表示在{和}之间,它被限制在该范围内,这意味着它只能在该范围内被引用。

如果条件导致变量的范围是主方法,则变量用户输入在这两种情况下都是可访问的

在声明中

if (choice == 1)
{
    System.out.println ("Enter the radius to compute the area & circumference:");
    user_input = in.nextInt();              

    Circle c1 = new Circle(user_input);     //refer to prob @ choice '2'
    System.out.println ("A new circle is created.\n");
}
c1的范围是包含if条件的支架。如果您希望在另一个If循环中访问它,那么您可能希望将c1移出,如下所示。我已将c1的范围更改为main方法,以便它符合您的逻辑

    Circle c1 = null;
    do
    {
        System.out.println ("==== Circle Computation =========");
        System.out.println ("| 1. Create a new circle\t|");
        System.out.println ("| 2. Print area\t\t\t|");
        System.out.println ("| 3. Print circumference\t|");
        System.out.println ("| 4. Quit\t\t\t|");

        System.out.println ("Choose option (1 - 3): ");
        choice = in.nextInt();
        if (choice == 1)
        {
            System.out.println ("Enter the radius to compute the area & circumference:");
            user_input = in.nextInt();              

            c1 = new Circle(user_input);     //refer to prob @ choice '2'
            System.out.println ("A new circle is created.\n");
        }

        if (choice == 2)
        {           
            //Prob - instance 'c1' & var 'user_input' @ choice '1' not visible in other if-else statements?
            //http://stackoverflow.com/questions/11685023/creating-an-instance-of-an-object-within-an-if-in-c-sharp
            System.out.println ("Area of circle:");
            System.out.println ("Radius: " + c1.getRadius());
            System.out.println ("Area: " + c1.area());
        }           
    }
在主方法块中创建的用户输入变量 所以它可以在if或else阻塞的地方访问。
但是C1是不可访问的,因为它是局部变量/实例到IF block

中,它们在main的作用域中声明,所以它们可以从main的作用域和其中的任何作用域访问。user\u输入是可访问的。关于c1-在声明用户输入的同一位置声明它,它将被访问。错误,c1是在if块内声明的,因此只能从if块内使用。只有用户输入,c1是在if语句内声明的,这仍然是完全错误的。你的两句话自相矛盾,第二句仍然是错的。如果不构成循环。没有别的了。如果有,else块将无法访问c1。此外,考虑到程序的逻辑,OP不希望在每次迭代时将循环重新初始化为null。感谢@JBNizet Yes,查看逻辑,我认为最好将c1的范围更改为main方法。我说的对吗?是的,这就是我的意思。问题是用户想先访问选项1,然后再访问选项2?@brainsforying这是有效的。。在第一个循环中创建的圆对象将在后续运行期间保留,直到创建新的圆对象