Java do/while语句中的编译错误?

Java do/while语句中的编译错误?,java,Java,我使用我的FigureGeometry界面创建了三个类:圆形、矩形和直角三角形。这个程序应该使用不同的类进行输入运行计算 我的do/while语句有几个错误。do语句表示“类型的非法开始”。我的while语句也这么说,“找不到变量选项” 我尝试在here/google上搜索其他问题,但我找不到任何对我的代码有帮助的东西。它总是像一个额外的括号,但据我所知,这里没有任何额外的东西 我已经仔细检查了我所有的开/关括号是否匹配。我曾尝试在do语句中使用option变量(我确信这是错误的,但我只是尝试了

我使用我的FigureGeometry界面创建了三个类:圆形、矩形和直角三角形。这个程序应该使用不同的类进行输入运行计算

我的do/while语句有几个错误。do语句表示“类型的非法开始”。我的while语句也这么说,“找不到变量选项”

我尝试在here/google上搜索其他问题,但我找不到任何对我的代码有帮助的东西。它总是像一个额外的括号,但据我所知,这里没有任何额外的东西

我已经仔细检查了我所有的开/关括号是否匹配。我曾尝试在do语句中使用option变量(我确信这是错误的,但我只是尝试了一些不同的事情)。我只是不知道问题出在哪里

package figuregeometry;

import java.util.Scanner;
public class FigGeometryCalculator
{

    //========================MAIN==============================================
    public static void main(String[] args)
    {

        float height;
        float width;
        float length;
        float radius;
        float degrees;

        String menu = "Would you like to figure the geometry for a: " + "\n"
        + "1. Circle" + "\n" 
        + "2. Rectangle" + "\n"
        + "3. Right Triangle" + "\n"
        + "0. Exit";

        do
        {
            Scanner in = new Scanner(System.in);
            int option = in.nextInt();

            switch(option)
            {
                case 1: System.out.println("Enter radius: ");
                        radius = in.nextFloat();
                        System.out.println("Enter Degrees of sector: ");
                        degrees = in.nextFloat();
                        Circle newCircle = new Circle(radius, degrees);

                        System.out.println("Set Scale: ");
                        newCircle.setScale(in.nextInt());
                        newCircle.toString();
                        break;

                case 2: System.out.println("Enter length: ");
                        length = in.nextFloat();
                        System.out.println("Enter width: ");
                        width = in.nextFloat();
                        Rectangle newRectangle = new Rectangle(length, width);

                        System.out.println("Set Scale: ");
                        newRectangle.setScale(in.nextInt());
                        newRectangle.toString();
                        break;

                case 3: System.out.println("Enter Length: ");
                        length = in.nextFloat();
                        System.out.println("Enter Height: ");
                        height = in.nextFloat();
                        RightTriangle newTriangle = new RightTriangle(length, width);

                        System.out.println("Set Scale: ");
                        newTriangle.setScale(in.nextInt());
                        newTriangle.toString();
                        break;

                case 0: 
                        System.out.println("Exit");
                        break;

                default: System.out.println("Not an a valid option. Please try again.");

            }
        }while(option != 0);
    }
}
问题:

删除所有无效的修饰符。即改变:

public float height;
public float width;
public float length;
public float radius;
public float degrees;
致:

可能不是对您的问题的直接回答,但您需要将收到的输入
option=in.nextInt()在循环内部。否则,将以无限循环结束

例如,如果用户选择“1”,选项将变为1,并且在循环中永远不会更新,因此循环将永远运行

编辑:

我只是想澄清一下,因为我知道你不明白。 您不需要将
int option=in.nextInt()放入
在循环中,除了
int
之外,您可以放置所有内容。(因此
option=in.nextInt();
在循环内部)。你说
int选项在循环之外

因此:

这就是为什么会出现错误,因为while循环看不到您的变量选项,因此如果找不到某个变量,则循环无法将其与0进行比较

通常,尽量不要在循环内部创建任何东西,而要在循环外部创建,以防止不必要的对象创建。另一个例子是,您的
扫描仪
对象应该在循环之外创建


将语句
Scanner放入=新的扫描仪(System.in)在循环之外,然后将其与
option=in.nextInt()一起使用如上所述。

方法中不能有任何访问修饰符<代码>公众浮标高度应为<代码>浮动高度
可能是在局部变量定义之前有
public
。好的,这也是有意义的。我已经纠正了这个问题,但我仍然不确定我的do/while语句出了什么问题?它将永远循环。in.nextInt()必须在loop语句中。不会有任何堆栈溢出,它将永远循环。可能不是堆栈溢出,因为没有发生递归,但很可能是OutOfMemoryError。那里没有任何可能导致内存泄漏的内容。@nem是的,是“(有内存时)”我反对的。@我明白了,我把它从我的答案中删除了,你说得对
float height;
float width;
float length;
float radius;
float degrees; 
int option;  // created outside the loop
do {
    System.out.print(menu);
    option = in.nextInt();  // used inside the loop
    switch(option)
    {
        // CASES AND CODE
    }
} while(option != 0);