运行或编译java代码时出错…非常混乱的程序无法运行

运行或编译java代码时出错…非常混乱的程序无法运行,java,terminal,Java,Terminal,这个程序不会在netBeans上运行,也不会在终端上编译……我想我的程序本身没有任何错误。。 这个程序需要显示一个圆的面积 不能有任何无效输入(字母、&^#、…等) 请并感谢您抽出时间;) 你知道这是行不通的: try { double r = sc.nextDouble(); } catch( NumberFormatException e ) { System.err.println("Invalid Input, please enter a number"); /

这个程序不会在netBeans上运行,也不会在终端上编译……我想我的程序本身没有任何错误。。 这个程序需要显示一个圆的面积 不能有任何无效输入(字母、&^#、…等)

请并感谢您抽出时间;)


你知道这是行不通的:

try {
    double r = sc.nextDouble();
}
catch( NumberFormatException e ) {
    System.err.println("Invalid Input, please enter a number");
    //put a message or anything you want to tell the user that their input was weird.
}
由于从try块内声明r,因此它仅在try块内可见,在其他地方完全不可见(这称为超出“范围”)

相反:

  • 在try块之前声明
    double r
    ,并将其初始化为0.0:
    double r=0.0;//根据mfrankli更正
  • 尝试在Try块中获取输入
  • 将所有内容包含在while循环中,并继续循环,直到输入有效
  • 在try块之后不要重新声明
    r
  • 改进代码格式,特别是使代码缩进统一。这样做将使代码更易于您和我们调试
  • 在这里提出更好的问题。在最初的问题中,提供所有必要的信息来帮助你通常是个好主意。你的答案漏掉了很多东西,让我们不得不猜测哪些会导致错误或混乱的答案

我刚刚试用了您的程序,我看到的唯一真正的问题是,您在开始时有一个等待用户输入的位:

    try {
        double r = sc.nextDouble();
    }
    catch( NumberFormatException e ) {
        System.err.println("Invalid Input, please enter a number");
        //put a message or anything you want to tell the user that their input was weird.
    }
由于该代码出现在程序产生任何输出之前,因此其效果是程序只是挂起;用户不清楚他们是否应该输入一个数字。(事实上,他们不必太担心自己输入的数字,因为程序只会在稍晚的时候提示他们输入另一个数字:

    double r = sc.nextDouble(); // Read in the double from the keyboard

实际上使用的是第二个。)

删除文件开头和结尾的星号。其余的都没问题,除了在实际输入之前必须按enter键。

那么您根本看不到任何编译错误?当你运行它时会发生什么?你可能应该告诉我们更多关于你的问题的重要细节。当你说它“不会编译”时,你的意思是它给你一个编译错误吗?如果是这样--您不认为发布该错误会有帮助吗?似乎您忘记发布您收到的错误消息如果代码发布开始和结束处的“**”实际上都在您的文件中,那么这就是您的答案。对我有效,只是在我输入一个数字之前它不会提示输入,而这个数字会被忽略,然后提示输入半径。那么它就可以正常工作了。我不认为你可以将null赋值给一个基本的double?
    double r = sc.nextDouble(); // Read in the double from the keyboard