【问题标题】:How to Call Method from main?如何从main调用方法?
【发布时间】:2017-02-13 12:05:56
【问题描述】:

我正在尝试使用我的 MoveUp 方法修改点值。但是,我无法在 main 方法中实例化类及其新值。我声明了Point x1 = new Point(); 然后x1.moveUp();,但是 moveUp();创建该方法不适用于参数的错误。

   public class Point {
        private int xcoord = 6;
        private int ycoord;



    public static void main(String[] args) {
        Point x1 = new Point();
        x1.moveUp();
        System.out.print(x1);

    }


        public Point ()
        {
            xcoord = 0;
            ycoord = 0;

        }


        public Point (int x, int y)
        {
            x = 9;
            y = 8; 
        }


        public int getX ()
        {
            return xcoord;
        }


        public int getY ()
        {
            return ycoord;
        }


        public void moveUp(int amount) 
        {
            amount = xcoord + 1;
        }


        public void moveDown(int amount) 
        {
            amount = ycoord - 2;


        }


        public void moveRight(int amount)
        {
            amount = xcoord + 1;

        }


        public void moveLeft(int amount) 
        {
            amount = xcoord - 1;


        }
    }

【问题讨论】:

  • x1.moveUp();,方法声明:void moveUp(int amount)
  • 它有一个 int 类型的参数,所以传递一个 int 参数..它会正常工作
  • 首先,您的方法moveUp 什么都不做,只是修改了参数。新分配的值永远不会被使用。第二:你的方法有一个参数,但你调用它时没有参数。

标签: java methods main


【解决方案1】:

public void moveUp(int amount) { 数量 = xcoord + 1; } 请记住,此方法要求一个 int 值作为其参数值。 所以你需要给出一个特定的 int 值。 喜欢 : x1.moveUp(500);

【讨论】:

    【解决方案2】:

    这些方法声明错误!

        public void moveUp(int amount) 
        {
            amount = xcoord + 1;
        }
    
    
        public void moveDown(int amount) 
        {
            amount = ycoord - 2;
    
    
        }
    
    
        public void moveRight(int amount)
        {
            amount = xcoord + 1;
    
        }
    
    
        public void moveLeft(int amount) 
        {
            amount = xcoord - 1;
    
    
        }
    

    这些方法每个都有一个amount 参数,我想您希望点向上、向下、向左、向右移动一定量。为此,您不应将xcoord - 1 分配给amount,因为它没有任何实际意义。另外,您似乎弄乱了 x 和 y 坐标。

    相反,这样做:

        public void moveUp(int amount) 
        {
            ycoord += amount;
        }
    
    
        public void moveDown(int amount) 
        {
            ycoord -= amount;
    
    
        }
    
    
        public void moveRight(int amount)
        {
            xcoord += amount;
    
        }
    
    
        public void moveLeft(int amount) 
        {
            xcoord -= amount;
    
    
        }
    

    现在方法都正确了,让我们看看如何正确调用方法。

    正如我之前所说,moveXXX 方法需要一个数量作为参数。所以如果你这样称呼它:

    x1.moveUp();
    

    它不起作用,因为moveUp 不知道它应该向上移动多少。你需要给它一个值。假设 10:

    x1.moveUp(10);
    

    现在x1.getX() 将返回 10!

    另外,我建议您覆盖toString。这样,println() 就可以真正打印出有意义的东西了:

    @Override
    public String toString() {
        return "(" + getX() + ", " + getY() + ")"
    }
    

    【讨论】:

      【解决方案3】:

      关于期望 int 作为参数的 moveUp 方法的建议都是有效的 - 但我也注意到你在这些方法中所做的事情没有意义 - 例如你将新值分配给 @您作为参数传入的 987654323@。我想你想要做的是更新xcoord 或ycoord

      这样,您的代码应该如下所示:

          public void moveUp(int amount) 
          {
              xcoord += (amount+ 1);
          }
      
      
          public void moveDown(int amount) 
          {           
              ycoord  -=(amount +2);
          }
      
      
          public void moveRight(int amount)
          {
             xcoord  += (amount + 1);
          }
      
      
          public void moveLeft(int amount) 
          {            
              xcoord - =(amount+1);
          }
      

      正如已经建议的那样,您可以像这样从您的 main 调用 moveUp 方法:

       public static void main(String[] args) {
              Point x1 = new Point();
              int someAmount = 50;
              x1.moveUp(someAmount );
              System.out.print(x1);
          }
      

      我希望这会有所帮助...

      【讨论】:

        【解决方案4】:
         public void moveUp(int amount) 
         {
                    amount = xcoord + 1;
         }
        

        根据您的方法实现,您的方法调用必须是

        MoveUp(someIntegerValue)

        【讨论】:

          【解决方案5】:

          根据您的代码,moveUp 方法将“金额”作为参数。但你称它为

          x1.moveUp();

          即没有争论。这就是您遇到错误的原因。

          【讨论】:

            【解决方案6】:

            您的 move* 方法逻辑不正确。

            如果您希望传递移动Point 的数量,正如参数名称所暗示的那样,逻辑应该更新xcoord 或ycoord,而不是局部变量amount。

            例如,为了向上移动,您应该将amount 添加到ycoord:

                public void moveUp(int amount) 
                {
                    ycoord += amount;
                }
            

            然后你会调用这个方法:

            x1.moveUp(5);
            

            【讨论】:

              【解决方案7】:

              从方法声明中可以看出

              public void moveUp(int amount) 
              

              它需要一个 int 参数,所以你的代码应该是这样的

              x1.moveUp (50);  // or some other input from your program
              

              同时修复 move* 方法中的逻辑错误

              【讨论】:

                猜你喜欢
                • 2021-12-21
                • 2019-04-21
                • 2014-06-09
                • 2013-11-28
                • 2013-05-16
                • 1970-01-01
                • 1970-01-01
                • 2016-12-26
                • 2014-04-29
                相关资源
                最近更新 更多