【问题标题】:Why does my for loop which calls the addLink method not print the proper coefficient and exponent values?为什么我的调用 addLink 方法的 for 循环不打印正确的系数和指数值?
【发布时间】:2021-02-14 04:05:05
【问题描述】:

第一个 for 循环将正确的系数和指数值打印为 由值字符串提供,但第二个 for 循环哪个类 addLink 方法不打印正确的值?我看不到什么 问题是。为什么第一个 for 循环的输出与第二个循环的输出不匹配?

代码已被编辑。我已将 addLink 方法移到第一个 for 循环中,我的输出如下所示。这仍然不是我想要的。

public class Polyvalues {
    Term head;

    public Polyvalues() {
        String value = "5 6 8 9 1 9";
        String sub[] = value.split(" ");
        double coeff = 0;
        int exp = 0;

        for (int i = 0; i < sub.length; i++) 
        {
            if (sub[i].isEmpty()) {
                System.out.println("No input");
            }
            if (i % 2 == 0) {
                try {
                    coeff = Double.parseDouble(sub[i]);
                    System.out.println("Coeff is " + coeff);
                } catch (NumberFormatException e) {
                    System.out.println("Fix This");
                }

            } else {
                try {
                    exp = Integer.parseInt(sub[i]);
                    System.out.println("The exp is " + exp);
                } catch (NumberFormatException e) {
                    System.out.println("Fix This");
                }
            }
     

          this.addLink(coeff, exp);//moved from commented out for-loop
        }
        System.out.println("*******************************************");
        /*for (int i = 0; i < sub.length; i++)
        {
            this.addLink(coeff, exp);
        }*/ 
        
    }//end constructor
        
    public void addLink(double a, int b)
    {
        if(head == null)
        {
            head = new Term(a,b);
            return;
        }
        Term currNode = head;
        while(currNode.next != null)
        {
            currNode = currNode.next;
        }    
        currNode.next = new Term(a,b);
        //addLink(a,b);
    }
    
    static class Term{
        double coeff;
        int exp;
        Term next;

        Term(double c, int e){
            this.coeff = c;
            this.exp = e;
            this.next = null;
            System.out.println("The Coeff "+ this.coeff);
            System.out.println("The Exp "+ this.exp);
        }    
    }

    public static void main(String[] args) 
    {
        Polyvalues p1 = new Polyvalues();
    }
} //end of class

现在,当我将 addLink 方法移到第一个 for 循环中时,我得到了这个。为什么我在打印时会得到这些重复的输出?

当这是我想要的: 是我的节点吗?

【问题讨论】:

    标签: java for-loop methods polynomials


    【解决方案1】:

    因为在第二个循环中,您每次都传递相同的 coeffexp 值。
    coeff 的第一个循环结束时,值为 1.0,exp 为 9 并且您每次都在第二个循环中将相同的值传递给方法addLink
    要解决它,要么创建一个数组来存储每个值,要么在第一个循环中调用 addLink

    【讨论】:

      【解决方案2】:

      您确实需要学习如何调试代码。每个程序员都需要知道如何调试代码。你读过这个网页吗? How to debug small programs
      无论如何,如果您使用的是 IDE(如 EclipseIntelliJ),那么它应该有一个调试器,并且您应该学会使用它。

      你的代码很接近。您只需将调用移至方法addLink。 (参见下面的代码。)如果您使用调试器单步执行代码,您就会明白原因。基本上你需要调用addLink你已经获得bothcoeffexp的值。在您的代码中,您调用了两次addLink - 一次是您只有coeff 值,第二次是您同时拥有coeffexp

      在下面的代码中,我用注释表示了更改Moved from after this 'else' block。我也离开了原始行,但将其注释掉了。

      还请注意,我添加了 [overridden] toString 方法只是为了更容易查看执行代码的结果。

      public class Polyvalues {
          Term head;
      
          public Polyvalues() {
              String value = "5 6 8 9 1 9";
              String sub[] = value.split(" ");
              double coeff = 0;
              int exp = 0;
      
              for (int i = 0; i < sub.length; i++) {
                  if (sub[i].isEmpty()) {
                      System.out.println("No input");
                  }
                  if (i % 2 == 0) {
                      try {
                          coeff = Double.parseDouble(sub[i]);
                          System.out.println("Coeff is " + coeff);
                      }
                      catch (NumberFormatException e) {
                          System.out.println("Fix This");
                      }
                  }
                  else {
                      try {
                          exp = Integer.parseInt(sub[i]);
                          System.out.println("The exp is " + exp);
                          this.addLink(coeff, exp); // Moved from after this 'else' block.
                      }
                      catch (NumberFormatException e) {
                          System.out.println("Fix This");
                      }
                  }
                  //this.addLink(coeff, exp);//moved from commented out for-loop
              }
              System.out.println("*******************************************");
          }// end constructor
      
          public void addLink(double a, int b) {
              if (head == null) {
                  head = new Term(a, b);
                  return;
              }
              Term currNode = head;
              while (currNode.next != null) {
                  currNode = currNode.next;
              }
              currNode.next = new Term(a, b);
              // addLink(a,b);
          }
      
          public String toString() {
              StringBuilder sb = new StringBuilder();
              Term curr = head;
              while (curr != null) {
                  sb.append(curr);
                  curr = curr.next;
              }
              return sb.toString();
          }
      
          static class Term {
              double coeff;
              int exp;
              Term next;
      
              Term(double c, int e) {
                  this.coeff = c;
                  this.exp = e;
                  this.next = null;
                  System.out.println("The Coeff " + this.coeff);
                  System.out.println("The Exp " + this.exp);
              }
      
              public String toString() {
                  return String.format("[C=%.2f,E=%d]-> ", coeff, exp);
              }
          }
      
          public static void main(String[] args) {
              Polyvalues p1 = new Polyvalues();
              System.out.println(p1);
          }
      } // end of class
      

      运行上述代码会打印以下内容:

      Coeff is 5.0
      The exp is 6
      The Coeff 5.0
      The Exp 6
      Coeff is 8.0
      The exp is 9
      The Coeff 8.0
      The Exp 9
      Coeff is 1.0
      The exp is 9
      The Coeff 1.0
      The Exp 9
      The Coeff 1.0
      The Exp 9
      *******************************************
      [C=5.00,E=6]-> [C=8.00,E=9]-> [C=1.00,E=9]-> [C=1.00,E=9]-> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-23
        • 2021-12-31
        • 2011-06-11
        • 1970-01-01
        • 2021-09-24
        • 2019-12-16
        • 2019-07-31
        相关资源
        最近更新 更多