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

时间:2014-09-09 23:25:33

标签: java

我使用我的FigureGeometry接口创建了3个Circle,Rectangle和RightTriangle类。该程序应该使用不同的类进行输入运行计算。

我的do / while语句出现了一些错误。 do语句说“非法开始类型”。我的while语句说同样和“找不到变量选项”。

我已尝试在这里搜索其他问题/ google,但我找不到任何有助于我的代码的内容。它总是像一个额外的支架,但据我所知,这里没有任何额外的东西。

我已经仔细检查了我的所有打开/关闭括号是否匹配。我已经尝试在do语句中使用我的选项变量(我确定这是不正确的,但我只是尝试了一些不同的东西)。我只是不确定是什么问题?

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

1 个答案:

答案 0 :(得分:3)

问题:

删除所有无效修饰符。也就是说,改变:

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

要:

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

可能不是您问题的直接答案,但您需要将您的输入option = in.nextInt();放入循环中。否则你最终会得到一个无限循环。

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

修改

只是为了澄清,因为我看到你不理解。 你没有把int option = in.nextInt();放在循环中,除了int之外你都放了。{1}}。 (所以在循环中option = in.nextInt();)。你在循环之外说int option;

所以:

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

这就是为什么你得到一个错误,因为你的变量选项对于while循环是不可见的,所以如果找不到它,循环就无法比较0。

通常,尽量不要在循环内部创建任何内容,并在其外部创建以防止不必要的对象创建。另一个例子,你的Scanner对象应该在你的循环之外创建。

将语句Scanner in = new Scanner(System.in);置于循环之外,然后按照上述方式使用option = in.nextInt();