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