面对对象程序设计第一次大作业心得

  第一次大作业还是比较简单的,主要考察类方法的调用和简单考察编程逻辑
 
题目集一 7-1
7-1 身体质量指数(BMI)测算
作者 蔡轲
单位 南昌航空大学

体重是反映和衡量一个人健康状况的重要标志之一,过胖和过瘦都不利于健康,BMI(身体质量指数)计算方法:体重(以千克为单位)除以身高(以米为单位)的平方。中国成人正常的BMI应在18.5-24之间,如果小于18.5为体重不足,如果大于等于24为超重,大于等于28为肥胖。请编写程序,测算身体状态。

输入格式:

两个数值:体重(以千克为单位),身高(以米为单位),数值间以空格分隔。例如:65.5 1.75。
注意:体重的世界纪录是727公斤,身高的世界纪录是2.72米。输入数据上限不得超过纪录,下限不得小于等于0;

输出格式:

输入数值超出范围 :输出“input out of range”。例如:-2 3或者125 5。
BMI小于18.5 :输出“thin”。
BMI大于等于18.5小于24 :输出“fit”。
BMI大于等于24小于28 :输出“overweight”。
BMII大于等于28 :输出“fat”。

输入样例0:

在这里给出一组输入。例如:

-2  8

输出样例0:

在这里给出相应的输出。例如:

input out of range

输入样例1:

在这里给出一组输入。例如:

70 1.75

输出样例1:

在这里给出相应的输出。例如:

fit

思路:

  接收体重weight和身高height,判断数据是否合法,然后计算BMI,根据情况输出健康情况

  代码如下:

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        float weight=scan.nextFloat();
        float height=scan.nextFloat();
        if(weight<=727&&weight>0&&height<=2.72&&height>0){
            float BMI=weight/(height*height);
            if(BMI<18.5) System.out.println("thin");
            else if(BMI<24) System.out.println("fit");
            else if(BMI<28) System.out.println("overweight");
            else System.out.println("fat");
        }
        else System.out.println("input out of range");
    }
}

 

  7-1是较为简单的,记得判断输入的数据是否合法即可

题目集一 7-2
7-2 长度质量计量单位换算
分数 5
作者 蔡轲
单位 南昌航空大学
长度、质量的计量有多重不同的计算体系,有标准的国际单位制:千克与米,也有各个国家自己的计量方法如:磅、英寸;1磅等于0.45359237千克,1英寸等于0.0254米,请编写程序实现国际单位制与英制之间的换算。

输入格式:

两个浮点数,以空格分隔,第一个是质量(以千克为单位)、第二个是长度(以米为单位)。例如:0.45359237 0.0254。

输出格式:

两个浮点数,以空格分隔,第一个是质量(以磅为单位)、第二个是长度(以英寸为单位)。例如:1.0 1.0。

输入样例:

在这里给出一组输入。例如:

0.45359237 0.0254

输出样例:

在这里给出相应的输出。例如:

1.0 1.0
思路:
  接收入长度length和质量weight,进行单位换算后输出即可
   代码如下:
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        float length=scan.nextFloat();
        length/=0.45359237;
        float weigth=scan.nextFloat();
        weigth/=0.0254;
        System.out.printf(length + " " + weigth);
    }
}
 
   7-2是比较简单的,注意输出格式即可
 
  题目集一 7-3
7-3 奇数求和
 
 
作者 蔡轲
单位 南昌航空大学

计算一个数列中所有奇数的和。

输入格式:

十个整数,以空格分隔。例如:1 2 3 4 5 6 7 8 9 0。

输出格式:

输入数列中所有奇数之和。例如:25。

输入样例:

在这里给出一组输入。例如:

1 2 3 4 5 6 7 8 9 0

输出样例:

在这里给出相应的输出。例如:

25

思路:
  接收10个int型数据,判断是否为奇数,如果是奇数则total+=该数据,最后进行输出即可
  代码如下:

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int total=0;
        for(int a=0;a<10;a++){
            int b=scan.nextInt();
            if(b%2!=0)
                total+=b;
        }
        System.out.printf("%d",total);
    }
}

 

题目集一7-4

7-4 房产税费计算2022
作者 蔡轲
单位 南昌航空大学

房屋交易在日常生活中非常常见的事情,房屋交易时要额外支付各种税费,按2022年房产交易新政策的规定买房人应缴纳税费包括:

1、契税:首次购房评估额90平(含)内1%、90平-144平(含)内1.5%,超过144平或非首 次3%,买方缴纳。

2、印花税:房款的0.05%。

3、交易费:3元/平方米。

4、测绘费:1.36元/平方米。

5、权属登记费及取证费:一般情况是在200元内。

输入格式:

四个数据,以空格分隔:
1、第几次购房(整数)
2、房款(整数/单位万元)
3、评估价(整数/单位万元)
4、房屋面积(浮点数/单位平方米)。
例如:1 100 100 90。

输出格式:

契税、印花税、交易费、测绘费(以元为单位),以空格分隔。例如:10000.0 500.0 270.0 122.4

输入样例:

在这里给出一组输入。例如:

1 100 100 90

输出样例:

在这里给出相应的输出。例如:

10000.0 500.0 270.0 122.4

思路:

  接收入第几次购房(整数),房款(整数/单位万元),评估价(整数/单位万元),房屋面积(浮点数/单位平方米),然后分别计算契税、印花税、交易费、测绘费然后输出

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int num=scan.nextInt();
        int number=scan.nextInt();
        float mianji=scan.nextFloat();
        double a=0.0,b,c;
        float d;
        if(n==1&&mianji<=90) a=number*100;
        else if(n==1&&mianji<=144) a=number*150;
        else a=number*300;
        b=num*5;
        c=3*mianji;
        d=1.36f*mianji;
        System.out.println(a+" "+b+" "+c+" "+d);
    }
}

  注意精度转化,输入为int型,输出为double型即可

题目集一7-5

7-5 游戏角色选择
作者 蔡轲
单位 南昌航空大学

一款网游中包括4个种族:人类、精灵、兽人、暗精灵,每个种族包含三种角色:战士、法师、射手。玩家新建人物时需要选择种族和角色。请编写角色选择程序。

输入格式:

两个整数:游戏种族、角色的选项,以空格分隔。例如:1 2。
种族选项设定为:1、人类 2、精灵 3、兽人 4、暗精灵
角色选项设定为:1、战士 2、法师 3、射手

输出格式:

所选择的种族、角色的名称,以空格分隔。例如:人类 法师
若输入数值超出选项范围,输出“Wrong Format”

输入样例1:

在这里给出一组输入。例如:

1 2

输出样例1:

在这里给出相应的输出。例如:

人类 法师

输入样例2:

在这里给出一组输入。例如:

1 6

输出样例2:

在这里给出相应的输出。例如:

Wrong Format

思路:

  接收两个int型种族和职业的数据,输出对应的种族和职业

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int a=scan.nextInt();
        int b=scan.nextInt();
        if(a>=0&&a<=4&&b>=0&&b<=3){
            if(a==1) System.out.printf("人类 ");
            else if(a==2) System.out.printf("精灵 ");
            else if(a==3) System.out.printf("兽人 ");
            else if(a==4) System.out.printf("暗精灵 ");
            if(b==1) System.out.printf("战士");
            else if(b==2) System.out.printf("法师");
            else if(b==3) System.out.printf("射手");
        }
        else System.out.printf("Wrong Format");
    }
}

  较为简单,基本没什么问题

题目集一7-6

7-6 学号识别
 
 
作者 蔡轲
单位 南昌航空大学

学校的学号由8位数字组成,前两位是入学年份(省略了20);第3、4位是学院编号,01代表材料学院,02代表机械学院,03代表外语学院,20代表软件学院;第5、6位是学院内部班级编号,最后两位是班级内部学号。如:18011103,入学年份是2018年,材料学院,11班,03号

输入格式:

8位数字组成的学号。例如:18011103
注意:输入学号不是8位或者学院编号不是01、02、03、20其中之一,属于非法输入

输出格式:

学号每一项的完整说明。例如:
入学年份:2018年
学院:材料学院
班级:11
学号:03

注意:如非法输入,输出“Wrong Format"

输入样例:

在这里给出一组输入。例如:

18011103

输出样例:

在这里给出相应的输出。例如:

入学年份:2018年
学院:材料学院
班级:11
学号:03

输入样例1:

在这里给出一组输入。例如:

18013

输出样例1:

在这里给出相应的输出。例如:

Wrong Format

思路:

  接收字符串数据,先检测长度是否有误,然后根据学院分别输出所需数据

  代码如下

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        String str=scan.nextLine();
        char[] num=str.toCharArray();
        if(str.length()!=8) System.out.print("Wrong Format");
        else {
        if(num[2]=='0'&&num[3]=='1'){
            System.out.println("入学年份:20"+num[0]+num[1]+"年");
            System.out.println("学院:材料学院");
            System.out.println("班级:"+num[4]+num[5]);
            System.out.println("学号:"+num[6]+num[7]);
        }
        else if(num[2]=='0'&&num[3]=='2'){
            System.out.println("入学年份:20"+num[0]+num[1]+"年");
            System.out.println("学院:机械学院");
            System.out.println("班级:"+num[4]+num[5]);
            System.out.println("学号:"+num[6]+num[7]);
        }
        else if(num[2]=='0'&&num[3]=='3'){
            System.out.println("入学年份:20"+num[0]+num[1]+"年");
            System.out.println("学院:外语学院");
            System.out.println("班级:"+num[4]+num[5]);
            System.out.println("学号:"+num[6]+num[7]);
        }
        else if(num[2]=='2'&&num[3]=='0'){
            System.out.println("入学年份:20"+num[0]+num[1]+"年");
            System.out.println("学院:软件学院");
            System.out.println("班级:"+num[4]+num[5]);
            System.out.println("学号:"+num[6]+num[7]);
        }
        else System.out.print("Wrong Format");
            
        }
    }
}

 

题目集一7-7 

7-8 巴比伦法求平方根近似值
作者 蔡轲
单位 南昌航空大学

巴比伦法求n的近似值可以用以下公式:
nextGuess = (lastGuess+n/lastGuess)/2
程序初始运行时lastGuess可赋予一个最初的猜测值。当由公式求得的nextGuess和lastGuess相差较大时,把nextGuess的值赋给lastGuess,继续以上过程,直至nextGuess和lastGuess几乎相同,此时lastGuess或者nextGuess就是平方根的近似值。
本题要求:nextGuess和lastGuess的差值小于0.00001时认为两者几乎相同

输入格式:

1、两个浮点数,以空格分隔,第一个是n,第二个是lastGuess最初的猜测值。例如:2 1。
2、若输入的两个数中包含负数或者lastGuess初始输入为0,认定为非法输入

输出格式:

1、输出n的平方根近似值:lastGuess。例如:1.4142157
2、非法输入时输出:"Wrong Format"

输入样例:

在这里给出一组输入。例如:

2 1

输出样例:

在这里给出相应的输出。例如:

1.4142157

输入样例1:

在这里给出一组输入1。例如:

2 -1

输出样例:

在这里给出相应的输出。例如:

Wrong Format

思路:

  先判断非法数据,然后对数据和估值进行遍历操作,当当前估值与上次估值的差值小于0.00001时,输出结果

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        Float n,last;
        Float next;
        n=scan.nextFloat();
        last=scan.nextFloat();
        if(n<0||last<=0) System.out.println("Wrong Format");
        else{
            next=(last+n/last)/2;
            while(next-last>=0.00001||last-next>=0.00001)
            {
                last=next;
                next=next=(last+n/last)/2;
            }//for
            System.out.println(last);
        }//else
    }
}

  注意差值小于0.00001有两种情况,可以取绝对值也可以交换减数和被减数差值小于0.00001再或一下,就像我的代码一样

题目集一7-9

7-9 二进制数值提取
作者 蔡轲
单位 南昌航空大学

在一个字符串中提取出其中的二进制数值序列,。

输入格式:

一个由0、1构成的序列,以-1为结束符,非0、1字符视为正常输入,但忽略不计,未包含结束符的序列视为非法输入。例如:abc00aj014421-1

输出格式:

将输入的序列去掉非0、1字符以及结尾符的数据内容,
注:结束符-1之后的0\1字符忽略不计。
例如:00011。

输入样例:

在这里给出一组输入。例如:

abc00aj014421-1

输出样例:

在这里给出相应的输出。例如:

00011

输入样例1:

在这里给出一组输入。例如:

a0571-1k001y

输出样例1:

在这里给出相应的输出。例如:

01

思路:

  遍历检索字符串中的字符,如果为0,1则记录到字符数组,最后输出合法字符

  代码如下:

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        String str=scan.nextLine();
        char n[]=str.toCharArray();
        int length=str.length(),biaoji=0,l=0;
        char num[]=new char[length];
        boolean q=false;
        for(int a=0;a<length&&q!=true;a++)
        {
            if(n[a]=='-') biaoji=1;
            else {
                if(biaoji==1&&n[a]=='1') q=!q;
                else {
                        biaoji=0;
                        if(n[a]=='0') {num[l]='0';l++;}
                        if(n[a]=='1') {num[l]='1';l++;}
                }//else
            }//else
        }//for
        if(q==true) System.out.println(num);
        else System.out.println("Wrong Format");
    }
}

题目集一7-10

 

7-7 判断三角形类型
作者 段喜龙
单位 南昌航空大学

输入三角形三条边,判断该三角形为什么类型的三角形。

输入格式:

在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的取值范围均为[1,200]。

输出格式:

(1)如果输入数据非法,则输出“Wrong Format”;
(2)如果输入数据合法,但三条边不能构成三角形,则输出“Not a triangle”;
(3)如果输入数据合法且能够成等边三角形,则输出“Equilateral triangle”;
(3)如果输入数据合法且能够成等腰直角三角形,则输出“Isosceles right-angled triangle”;
(5)如果输入数据合法且能够成等腰三角形,则输出“Isosceles triangle”;
(6)如果输入数据合法且能够成直角三角形,则输出“Right-angled triangle”;
(7)如果输入数据合法且能够成一般三角形,则输出“General triangle”。

输入样例1:

在这里给出一组输入。例如:

50 50 50.0

输出样例1:

在这里给出相应的输出。例如:

Equilateral triangle

输入样例2:

在这里给出一组输入。例如:

60.2 60.2 80.56

输出样例2:

在这里给出相应的输出。例如:

Isosceles triangle

输入样例3:

在这里给出一组输入。例如:

0.5 20.5 80

输出样例3:

在这里给出相应的输出。例如:

Wrong Format

 思路:

  接收入double型的三边长,然后对三边长分别进行能否构成三角形,是不是等边三角形,是不是等腰直角三角形,是不是等腰三角形,是不是直角三角形,然后对结果进行输出,值得一提的是,这题会出现精度问题,所以需要将==0的判别式改为<1e-6来避免失精

  代码如下:

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        double a,b,c,tmp;
        a=scan.nextDouble();
        b=scan.nextDouble();
        c=scan.nextDouble();
        for(int p=0;p<3;p++)
        {
            if(a>b) {tmp=a;a=b;b=tmp;}
            if(b>c) {tmp=b;b=c;c=tmp;}
        }
        if(a<1||c>200) System.out.print("Wrong Format");
        else{
            if(a+b<=c) System.out.print("Not a triangle");
            else if(a==b&&b==c) System.out.print("Equilateral triangle");
            else if(a==b||b==c){//内else
                if(a*a+b*b-c*c<0.000001) System.out.print("Isosceles right-angled triangle");
                else System.out.print("Isosceles triangle");
                }//内else
            else if(a*a+b*b-c*c<0.000001) System.out.print("Right-angled triangle");
            else System.out.print("General triangle");
        }//外else
    }
}

心得总结:

  通过这次大作业,熟悉了java的各种类还有许多功能函数的使用,以及对字符串的处理,相较于后面几次大作业,第一次大作业还是比较简单的并没有碰到什么问题

posted @   北顾Jeffrey  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示