Java 如何访问if-else语句中的实例和变量
如何访问变量“user_input”和实例“c1”?据我所知,在if-else语句@choice 1的范围之外,它们是不可访问的 请参见以下内容: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
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这是有效的。。在第一个循环中创建的圆对象将在后续运行期间保留,直到创建新的圆对象