学习-Java顺序结构之有输入格式化输出平抛小球与抛出点之间的距离
Java顺序结构之有输入格式化输出平抛小球与抛出点之间的距离)
- [任务描述]
- 相关知识
- [Scanner 类 reader 对象]
- [编程要求]
- [测试说明]
1. 任务要求
任务描述
本关任务:一小球以 v0 米/秒的水平速度平抛,重力加速度取 9.8 米/秒2,在忽略空气阻力的情况下,求经过时间 t 秒后,小球所在位置与抛出点之间的距离 (假设小球距地面足够高),输出结果四舍五入后保留两位小数。
相关知识
为了完成本关任务,你需要掌握:
- Scanner 类 reader 对象;
- 输入整型和浮点型数据。
Scanner 类 reader 对象
我们在使用 Java 写代码时,如果想要实现输入操作怎么办呢,这时候我们需要用到的是 Scanner 类来实现获取用户从键盘上的输入操作。
Scanner 类是一个基于正则表达式的文本扫描器,它可以从文件、输入流、字符串中解析出基本类型值和字符串值;Scanner 类可以任意地对字符串和基本类型(如 int 和 double )的数据进行分析。
当我们引入 Scanner 这个类的时候,我们需要导入java.util.Scanner
这个类。
使用 import 导入类
如果我们要使用其他包的类,需要使用 import 导入,从而可以在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。import 导入包后,便于编写代码,提高可维护性。
注意:Java 会默认导入 java.lang 包下所有的类,因此这些类我们可以直接使用,例如 System、Math 都是 java.lang 包下的类。
例子:
import java.util.Scanner;public class Demo {
public static void main(String[] args) {
}
}
导入了这个类以后,我们就可以使用 Scanner 这个类了。现在我们来使用该类创建一个 Scanner 的实例对象。
import java.util.Scanner;public class Demo {
public static void main(String[] args) {
// 创建一个Scanner的实例对象,这个对象可以为用户提供输入,将这个实例对象命名为reader,后面我们可以直接用reader调用Scanner类的相关方法
Scanner reader = new Scanner(System.in);
}
}
Scanner 类提供了两种方法来获取输入,这两种方法分别是:
- nextXXX():获取用户输入的内容,其中 XXX 可以用来表示 int,long,double 等代表基本数据类型,需要注意的是,如果我们是获取输入的字符串,那么我们可以直接使用 next()。
例子:
import java.util.Scanner;public class Demo {
public static void main(String[] args) {
// 创建一个Scanner的实例对象,这个对象可以为用户提供输入,将这个实例对象命名为reader,后面我们可以直接用reader调用Scanner类的相关方法
Scanner reader = new Scanner(System.in);
// 从键盘处接收用户输入的浮点型数据
double a = reader.nextDouble();
System.out.print("输入的数据为:" + a); }}
假设用户键盘输入的数据为:10.0
。
注意:输入完数据后需要回车,而且你定义的数据类型不能小于键盘输入的数据类型,例如这里你键盘输入的是 10.0,那你这里就不能用整型接收,只能用浮点型接收。
执行结果:
输入的数据为:10.0
如果想要从键盘获取多个值又该怎么办呢?
例子:
import java.util.Scanner;public class Demo {
public static void main(String[] args) {
// 创建一个Scanner的实例对象,这个对象可以为用户提供输入,将这个实例对象命名为reader,后面我们可以直接用reader调用Scanner类的相关方法
Scanner reader = new Scanner(System.in);
// 从键盘处接收用户第一次输入的浮点型数据
double a = reader.nextDouble();
// 从键盘处接收用户第二次输入的整型数据
int b = reader.nextInt();
System.out.println("第一次输入的数据为:" + a);
System.out.print("第二次输入的数据为:" + b);
}
}
用户第一次键盘输入的数据为:20.0
。回车 用户第二次键盘输入的数据为:55
。回车
执行结果:
第一次输入的数据为:20.0第二次输入的数据为:55
- hasnextXXX():表示是否还有下一个输入项,其中 XXX 与上个方法一致,我们会在后面详细介绍。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
注意:本关已经定好键盘输入的值,第一次键盘输入的值为 *v*0的值,是浮点型数据,第二次键盘输入的值为 *t*的值,是整型数据。
/**
* 任务:一小球以 v0 米/秒 的水平速度平抛,重力加速度取9.8米/秒2,
* 在忽略空气阻力的情况下,求经过时间 t 秒后,
* 小球所在位置与抛出点之间的距离 (假设小球距地面足够高)。
* 类名为:Distance
*/
import java.util.Scanner;
public class Distance {
public static void main(String[] args) {
double g = 9.8; // 声明浮点型变量 g,用于表示重力加速度
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 第一步:创建一个Scanner的实例对象,命名为reader
// 第二步:获取键盘第一次输入的值,将其命名为V0,用于表示水平初速度
// 第三步:获取键盘第二次输入的值,将其命名为t,用于表示小球飞行的时间
// 第四步:计算水平距离,并赋值给s
// 第五步:计算垂直距离,并赋值给h
// 第六步:计算小球与原点的距离,并赋值给d,Math.sqrt()可以用来对括号里的值求平方根
// 第七步:打印出小球与原点的距离d,最后结果四舍五入后保留两位小数
/********** End **********/
}
}
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。
开始你的任务吧,祝你成功!
2. 任务分析
1. 输入输出分析
输入:
- 获取键盘第一次输入的值,将其命名为V0,用于表示水平初速度
- 获取键盘第二次输入的值,将其命名为t,用于表示小球飞行的时间
输出:
- 打印出小球与原点的距离d,最后结果四舍五入后保留两位小数
/**
- 任务:一小球以 v0 米/秒 的水平速度平抛,重力加速度取9.8米/秒2,
- 在忽略空气阻力的情况下,求经过时间 t 秒后,
- 小球所在位置与抛出点之间的距离 (假设小球距地面足够高)。
- 类名为:Distance
*/
2. 需求分析
- 输入
- 获取键盘第一次输入的值,将其命名为V0,用于表示水平初速度
- 获取键盘第二次输入的值,将其命名为t,用于表示小球飞行的时间
- 计算小球所在位置与抛出点之间的距离 (假设小球距地面足够高)。
- 一小球以 v0 米/秒 的水平速度平抛,重力加速度取9.8米/秒
3. 所需知识
- scanner 没啥好说的
- 计算, 分两个,也没啥好说的
- 最后算的时候要调用math.sqrt 来计算垂直和水平的平方和根号
4. 确认代码框架
// 第一步:创建一个Scanner的实例对象,命名为reader
Scanner reader = new Scanner(System.in);
// 第二步:获取键盘第一次输入的值,将其命名为V0,用于表示水平初速度
double 0 = reader.nextDoule();
// 第三步:获取键盘第二次输入的值,将其命名为t,用于表示小球飞行的时间
double t = reader.nextDouble();
// 第四步:计算水平距离,并赋值给s
double s = v0*t
// 第五步:计算垂直距离,并赋值给h
double h = 0.5 * g * t * t
// 第六步:计算小球与原点的距离,并赋值给d,Math.sqrt()可以用来对括号里的值求平方根
double d = Math.sqrt(s*s + h*h)
// 第七步:打印出小球与原点的距离d,最后结果四舍五入后保留两位小数
public static void num_to_str(double num){
DecimalFormat df = new DecimalFormat("#.##");
String output = df.format(num);
System.out.pirntf(output);
}
5. 书写代码
import java.util.*;
import java.lang.*;
public class Distance{
public static void main(String[] args){
Scanner reader = new Scanner(System.in);
double v0 = reader.nextDouble();
double t = reader.nextDouble();
double g = 9.8;
double h = Verticaldistance(g,t);
double s = Horizontaldistance(v,t);
double d = Absolutedistance(h,s);
num_to_str(d);
}
//垂直距离vertical distance
public static double Verticaldistance(double g,double t){
double h = 0.5*g*t*t;
return h;
}
//水平距离horizontal distance
public static double Horizontaldistance(double v,double t){
double s = v * t;
return s;
}
//绝对距离absolute distance
public static double Absolutedistance(double h,double s ){
double d = math.sqrt(h*h + s*s);
return d;
}
public static void num_to_str(double num){
DecimalFormat df = new DecimalFormat("#.##");
df.setMinimumFractionDigits(2);//设置最小的小数位数为2
String output = df.format(num);
System.out.printf(output);
}
}
3. 代码
最终代码
import java.util.*;
import java.text.DecimalFormat;
import java.lang.*;
public class Distance{
public static void main(String[] args){
Scanner reader = new Scanner(System.in);
double v0 = reader.nextDouble();
double t = reader.nextDouble();
double g = 9.8;
double h = Verticaldistance(g,t);
double s = Horizontaldistance(v0,t);
double d = Absolutedistance(h,s);
num_to_str(d);
}
//垂直距离vertical distance
public static double Verticaldistance(double g,double t){
double h = 0.5*g*t*t;
return h;
}
//水平距离horizontal distance
public static double Horizontaldistance(double v,double t){
double s = v * t;
return s;
}
//绝对距离absolute distance
public static double Absolutedistance(double h,double s ){
double d = Math.sqrt(h*h + s*s);
return d;
}
public static void num_to_str(double num){
DecimalFormat df = new DecimalFormat("#.##");
df.setMinimumFractionDigits(2);//设置最小的小数位数为2
String output = df.format(num);
System.out.printf(output);
}
}
之前的代码
import java.util.Scanner;
public class Distance {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
// 获取键盘输入的水平速度 v₀(米/秒)
double v0 = reader.nextDouble();
// 获取键盘输入的时间 t(秒)
int t = reader.nextInt();
// 计算水平方向位移
double dh = v0 * t;
// 计算竖直方向位移
double g = 9.8; // 重力加速度
double dv = 0.5 * g * t * t;
// 计算总位移
double distance = Math.sqrt(dh * dh + dv * dv);
// 输出结果并四舍五入保留两位小数
System.out.printf("%.2f\n", distance);
}
}