Java小白_面向对象程序设计01顺序结构_03Java顺序结构之有输入格式化输出平抛小球与抛出点之间的距离

学习-Java顺序结构之有输入格式化输出平抛小球与抛出点之间的距离

  • [任务描述]
  • 相关知识
    • [Scanner 类 reader 对象]
  • [编程要求]
  • [测试说明]

1. 任务要求

任务描述

本关任务:一小球以 v0 米/秒的水平速度平抛,重力加速度取 9.8 米/秒2,在忽略空气阻力的情况下,求经过时间 t 秒后,小球所在位置与抛出点之间的距离 (假设小球距地面足够高),输出结果四舍五入后保留两位小数。

相关知识

为了完成本关任务,你需要掌握:

  1. Scanner 类 reader 对象;
  2. 输入整型和浮点型数据。
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. 需求分析
  1. 输入
    1. 获取键盘第一次输入的值,将其命名为V0,用于表示水平初速度
    2. 获取键盘第二次输入的值,将其命名为t,用于表示小球飞行的时间
  2. 计算小球所在位置与抛出点之间的距离 (假设小球距地面足够高)。
    • 一小球以 v0 米/秒 的水平速度平抛,重力加速度取9.8米/秒
3. 所需知识
  1. scanner 没啥好说的
  2. 计算, 分两个,也没啥好说的
  3. 最后算的时候要调用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);
    }
}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值