【问题标题】:passing a method as an argument from one class to the constructor of another class in java将方法作为参数从一个类传递给java中另一个类的构造函数
【发布时间】:2016-04-08 03:37:40
【问题描述】:

我的问题如下:

我有一个java课程的特定作业,其中第二类的构造函数说明如下:

定义一个构造函数,参数传入用户输入的初始位置和初始速度,并使用它们:

  • 将初始位置常数和当前位置数据字段都初始化为初始位置参数的值。
  • 将初始速度常数和当前速度数据字段初始化为初始速度参数的值。

现在第一个类的main方法:

定义一个主要方法来:

  • 显示程序将对用户做什么的描述(在描述中使用高度阈值常数)。

  • 使用静态方法(也需要提示和验证输入)从用户那里读取初始位置和初始速度值。

  • 在读取所有用户输入后显示几个空行。 o 创建 FallingItem 类的新对象,使用从用户读取的初始位置和初始速度作为构造函数的参数。

到目前为止,我是这样设置的:

投影机类:

      public static void main(String[] args) {

    System.out.println("This program will calculate the position and " 
            + "velocity \n of a falling object until it reaches " 
            + HEIGHT_THRESHOLD + " feet above the ground.");

    initialPosition();

    initialVelocity();

    System.out.println();
    System.out.println();

    FallingItem I = new FallingItem(initialPosition(), initialVelocity());

.... 方法如下:

'public static double initialPosition(){
      Scanner input = new Scanner(System.in);
      boolean validated; //validator for while statements
     double startPosition; //variable for initialPosition
     System.out.println("Please enter the intial position from which" +
            " you intend to drop the object." + "this cannot be lower "+
            "than 600 feet.");
    do{


    startPosition = input.nextDouble();
    if (startPosition > HEIGHT_THRESHOLD){
        validated = true;
    }
    else{
        System.out.print("error, value is too low. Try again");
        validated = false;
    }


    }while (validated = false);
   return startPosition;
   }


   public static double initialVelocity(){
   Scanner userInput = new Scanner(System.in);
   double startVelocity;

   System.out.println("\n please enter the initial velocity, in feet per" + 
           " second. \n This value cannot be less than -500");
   startVelocity = userInput.nextDouble();

   if(startVelocity <= FallingItem.TERMINAL_VELOCITY){
       System.out.print("error, this value cannot be less than -500 feet" +
               " per second. Please re-enter the value");
       startVelocity = userInput.nextDouble();


   }

   return startVelocity;'

在你问之前: 是的,需要有一个 do-while 循环,并且 是的,方法需要这样提示

项目类的构造函数:

public FallingItem(double initialPosition, double    initialVelocity){

    INITIAL_POSITION = initialPosition; //constant to be filled by user input

    INITIAL_VELOCITY = initialVelocity; //constant to be filled by user input

    currentPosition = initialPosition;

    currentVelocity = initialVelocity;

}

因此,简而言之,我非常感谢社区提供的任何帮助,以找到一种方法来满足要求,而不会让用户输入提示重复自己,这是目前正在发生的事情,因为坦率地说,我没有想法。

问候,火磁。

【问题讨论】:

    标签: java methods constructor


    【解决方案1】:

    我会在你的一些会议休息时间打给你...

    FallingItem I = new FallingItem(initialPosition(), initialVelocity());
    

    Java 中的变量遵循 Camel 大小写,而类遵循 Pascal 大小写。

    • 骆驼壳:fallingItem,itemThatIsFalling
    • 帕斯卡大小写:MyFallingItem、FallingItem、BurgerKingHotdog

    此外,您的 Scanner 对象一直在本地定义,或者在您只想使用它一次的每个方法中定义。相反,尝试全局定义它(在 main 方法括号之外的 main 方法上方)。然后,您可以在程序中的任何位置引用它,而无需初始化它的新实例以使用它一次。如果您在理解全局变量时遇到困难,请查看this。

    确保您的代码格式也正确无误。越容易阅读,就越容易发现错误。 Clean code 只是让每个人的生活更轻松。

    【讨论】:

    • Zulfe,感谢您的评论,但是当我尝试这样做时,netbeans 会引发以下错误:“无法从静态上下文引用非静态变量。”
    • 使用private static Scanner whatever = new Scanner();
    • 成功了,谢谢。但是,您对将方法传递给项目类的构造函数有什么建议吗?正如目前实施的那样,根据说明,我最终会得到两个输入提示,这是不应该发生的。问候,火磁。
    • @firemagnet 确保你的方法有重点。当您说“我最终每个提示输入两个” 时,我假设您是在单独谈论您对initialPosition() 的调用,并作为main() 方法中的参数。独立电话什么也没做,这让我很困惑为什么它在那里。如果您要删除它,该方法本身仍应在调用 FallingItem 对象的参数值时进行提示。
    • @firemagnet 换句话说,FallingItem I = new FallingItem(initialPosition(), initialVelocity()); 将调用每个方法,然后将返回值作为参数用于初始化FallingItem 对象。由于initialPosition()和initialVelocity()都有提示,可以去掉main()中的独立调用。
    猜你喜欢
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多