计算球的最大高度(级别:新手)
Calculation of max height of ball (level: newbie)
我决定学习一些 Java。因此,我一直在网上搜索一些练习。现在我被卡住了,非常感谢你的帮助。
我想计算我从地面扔出的球的最大高度。因此我使用 height = 0. 5 * speed * speed (in metres per second) / 9.81 (in metres per second²)
.
我的class'Ball'
public class Ball {
// Attributes
private static final double GRAVITATION = 9.81;
private static final double SECONDS_OF_HOUR = 3600.0;
private static final double METERS_OF_KILOMETER = 1000.0;
/**Speed of the ball in meters per second. */
private float speed;
// Constructor
public Ball(float speedInKmh) {
}
// Methods
/**
* @return maximal height in metres.
*/
public double maxHeight() {
return 0.5 * speed * speed / GRAVITATION;
}
/**
* @param kmh speed in kilometres / hour
* @return speed in meters / second
*/
private double kmHToMs(double kmh) {
return kmh * METERS_OF_KILOMETER / SECONDS_OF_HOUR;
}
}
我的问题:
1. 何时何地使用 kmHToMs?我的意思是,我必须在某个地方使用它来计算有人进入时的最大高度,例如命令行中的速度为 5 kmh。
我想再写一篇class'Balltester'。这里我想测试一下命令行的输入。我要检查大于 0 的数字。如果输入为空或包含一个或多个字母,我想退出程序。我在这里想念什么吗?测试器class还没有写,因为我不知道如何开始。
我尝试将构造函数与 public static void main(String[] args) {}
一起使用,但我通过输入 5 公里/小时的速度得到的结果是 Ball@659e0bfd。所以我想我必须 1. 以某种方式转换速度参数和 2. 将 class 'Balltester' 中的命令行参数传递给构造函数 Ball.
感谢任何帮助和反馈。提前谢谢你。
编辑
public class BallTester {
public static void main(String[] args) {
ball(new Ball(5));
}
private static void ball(Ball b) {
b.maxHeight();
System.out.println(b);
}
}
首先,您没有指定球的速度。您需要在构造函数中执行此操作:
public Ball(float speedInKmh) {
this.speed = kmhToMs(speedInKmh);
}
请注意,您需要使用 kmhToMs(speedInKmh)
,因为 speedInKmh
在 kilometers/hour 中,而您希望 speed
在 meters/hour 中。
其次,在 BallTester
class 中的 ball
方法中,您打印的是球,而不是最大高度。您需要将方法更改为:
private static void ball(Ball b) {
System.out.println(b.maxHeight());
}
为了你的测试class,我想这就是你想要的:
public class BallTester {
public static void main(String[] args)
{
int speed;
Scanner scanner = new Scanner(System.in);
string s = scanner.next();
try {
speed = Integer.parseInt(s);
if (speed > 0) {
ball(new Ball(5));
}
}
catch (NumberFormatException ex) {
System.out.println("This is not a valid speed.");
}
}
}
我决定学习一些 Java。因此,我一直在网上搜索一些练习。现在我被卡住了,非常感谢你的帮助。
我想计算我从地面扔出的球的最大高度。因此我使用 height = 0. 5 * speed * speed (in metres per second) / 9.81 (in metres per second²)
.
我的class'Ball'
public class Ball {
// Attributes
private static final double GRAVITATION = 9.81;
private static final double SECONDS_OF_HOUR = 3600.0;
private static final double METERS_OF_KILOMETER = 1000.0;
/**Speed of the ball in meters per second. */
private float speed;
// Constructor
public Ball(float speedInKmh) {
}
// Methods
/**
* @return maximal height in metres.
*/
public double maxHeight() {
return 0.5 * speed * speed / GRAVITATION;
}
/**
* @param kmh speed in kilometres / hour
* @return speed in meters / second
*/
private double kmHToMs(double kmh) {
return kmh * METERS_OF_KILOMETER / SECONDS_OF_HOUR;
}
}
我的问题: 1. 何时何地使用 kmHToMs?我的意思是,我必须在某个地方使用它来计算有人进入时的最大高度,例如命令行中的速度为 5 kmh。
我想再写一篇class'Balltester'。这里我想测试一下命令行的输入。我要检查大于 0 的数字。如果输入为空或包含一个或多个字母,我想退出程序。我在这里想念什么吗?测试器class还没有写,因为我不知道如何开始。
我尝试将构造函数与 public static void main(String[] args) {}
一起使用,但我通过输入 5 公里/小时的速度得到的结果是 Ball@659e0bfd。所以我想我必须 1. 以某种方式转换速度参数和 2. 将 class 'Balltester' 中的命令行参数传递给构造函数 Ball.
感谢任何帮助和反馈。提前谢谢你。
编辑 public class BallTester {
public static void main(String[] args) {
ball(new Ball(5));
}
private static void ball(Ball b) {
b.maxHeight();
System.out.println(b);
}
}
首先,您没有指定球的速度。您需要在构造函数中执行此操作:
public Ball(float speedInKmh) {
this.speed = kmhToMs(speedInKmh);
}
请注意,您需要使用 kmhToMs(speedInKmh)
,因为 speedInKmh
在 kilometers/hour 中,而您希望 speed
在 meters/hour 中。
其次,在 BallTester
class 中的 ball
方法中,您打印的是球,而不是最大高度。您需要将方法更改为:
private static void ball(Ball b) {
System.out.println(b.maxHeight());
}
为了你的测试class,我想这就是你想要的:
public class BallTester {
public static void main(String[] args)
{
int speed;
Scanner scanner = new Scanner(System.in);
string s = scanner.next();
try {
speed = Integer.parseInt(s);
if (speed > 0) {
ball(new Ball(5));
}
}
catch (NumberFormatException ex) {
System.out.println("This is not a valid speed.");
}
}
}