当前位置: 首页 > 知识库问答 >
问题:

调用main方法后的附加值

山翼
2023-03-14

如果输入正确的值(int值),该程序工作正常。但是,当我输入一个字符或任何其他错误的值时,它会显示错误的输入消息并再次调用main方法。唯一的问题是在调用main方法并输入正确的输入后,它会打印出额外的数据,为什么?

import javax.swing.JOptionPane;



public class TestPolyVal {
  public static void main(String[] args){
      int xValue = 0;
      String value = JOptionPane.showInputDialog(null, "What is the value of X");
    try{
     xValue = Integer.parseInt(value);}
    catch (NumberFormatException e){
        JOptionPane.showMessageDialog(null,"Wrong input. Please input only integer values.");

        TestPolyVal.main(args);
    }
    int[] intArray = new int[20] ;
    for (int i = 0; i < 20; i ++){
      intArray[i] = 2;}

    System.out.println(calculateBruteForce(intArray,xValue));
    System.out.println("0");
    System.out.println(calculateHorner(intArray,xValue));}


static int calculateBruteForce(int[] a, int b){
    int sum = 0 ;
    for (int i = 0; i < 20; i ++){
      sum +=a[i]*powerCalc(b,i);}
    return sum;}

static int powerCalc(int c, int d){
    int powerValue = c;
    if (d==0){
      powerValue = 1;}
    else if (d==1){
      powerValue = c;}
    else if (d>1){
      for (int i = 1; i<d;i++){

        powerValue = powerValue*c;}}
    return powerValue;}

static int calculateHorner(int[] e, int f){

    int acc = e[e.length-1];
    for(int i = e.length-2; i >= 0; i--){
        acc = (acc * f)+ e[i];}
    return acc;}

}

共有2个答案

郎嘉树
2023-03-14

在这种情况下,从main()内部调用main()的方法不是一种很好的方法。一、 作为一个敌对用户,可以在对话框中反复输入“a”。最终,这将导致堆栈溢出错误,程序将崩溃。

我建议使用循环。

while(true) {
    try{
        xValue = Integer.parseInt(value);
        break;
    }
    catch (NumberFormatException e){
        JOptionPane.showMessageDialog(null,"Wrong input. Please input only integer values.");
    }
}

这样,您的程序将永远循环,或者直到用户输入正确的输入,而不是崩溃。除非您正在实现递归算法,否则我想不出方法调用自身的任何理由。

岳池暝
2023-03-14

您将获得额外的打印输出,因为第一次main执行将在第二次main调用完成后继续。

这可以通过在对main的新调用后添加一个返回;来修复:

catch (NumberFormatException e){
    JOptionPane.showMessageDialog(null,"Wrong input. Please input only integer values.");
    TestPolyVal.main(args);
    return;
}
 类似资料:
  • 我在这个上面有点卡住了。我正在编写一个包含两个类的java程序,然后是一个测试程序来测试类中的方法。我被困在主方法中调用下面的两个方法上。所有的类文件(测试程序类和另外两个类)都在编译,IDE没有给我任何错误消息,计算只是没有发生…… --主要方法代码: -账户类别代码: 注意:平衡设置器正在工作,因为它在测试程序的前面被调用... 非常感谢任何帮助!!! 账户类别的完整代码: 主要方法完整代码:

  • 我的作业是为一家正在补货的珠宝店计算税金和附加费,我遇到了一点小麻烦。我三次使用一种叫做calcExtraTax的方法来计算劳动率以及州税和联邦税。然后,我需要获取该方法的每个实例的结果,并将值传递给我的main方法中的适当变量。这是我的代码现在的样子(显然不完整): 我想弄清楚的是,我还需要在我的第二种方法中添加什么,以便每次都能够根据公式中使用的税率变量将结果传递到不同的税收成本变量中。

  • 问题内容: 我有 但后来当我打电话从通过运行以下命令在命令行上,JAVA抱怨说,你不能调用从静态功能的方法。 所以我的问题是:如何从主方法调用方法,如果不可能,使用java命令从命令行运行程序后,有哪些替代策略可以调用方法。 问题答案: 您只能针对类的实例调用类似的实例方法(顺便说一下,这是一个非法的方法名称): 另外,如果对您的设计有效,则也使它成为静态。

  • 问题内容: 我需要使用反射从另一个主要方法调用Java类的主要方法。 必须使用反射,以消除被调用主类的编译时依赖性。直截了当的方法并没有产生效果,因为它只识别“公共”和“非静态”方法。有什么建议吗? 问题答案: 不应比调用任何其他函数更复杂: 但是我真的看不到有什么用途,只要您不使用特定的代码路径,就可以买到该程序,而无需链接另一个程序,这是它唯一能为您带来的好处,但是如果这是您需要的,在这里走

  • 6.7.1.BuildExcerpts (产生文本摘要和高亮) 原型:function BuildExcerpts ( $docs, $index, $words, $opts=array() ) 该函数用来产生文档片段(摘要)。连接到searchd,要求它从指定文档中产生片段(摘要),并返回结果。 $docs为包含各文档内容的数组。$index为包含索引名字的字符串。给定索引的不同设置(例如字符

  • 我们正在用蓝J学习爪哇,我发现蓝J非常不清楚和令人困惑。我们得到了一个赋值,第一步是“创建一个主方法来调用对象”。我敢肯定他的意思是“调用火车方法”。 无论如何,我正在尝试让main方法在下面的代码中调用Train方法,因此当您在BlueJ中传递字符串参数时,它会执行main中的代码。就是这样。Train方法传入一个String和两个int值: 我一直得到一个错误,当试图这样做,但不知道为什么。