java第一次博客作业

 

 

 

目录

前言

设计与分析

踩坑心得

改进建议

总结

关于三次java题目的体会

这学期刚接触java,对Java还不熟悉。纸上得来终觉浅,实践才能出真知。通过这三次作业,对Java有了更深刻的了解。这三次题目涉及了许多知识点,从最简单的从键盘读取输入,字母转换数字,还有编写简单的程序进行简单的运算等。从最基本的一些操作练习很好的过度到解决一些简单的实际问题。让人收获通过计算机语言解决实际问题的满足感。当然三次题目集也让我碰到了不少困难,其中第三次作业中设计类的题目需要我们设计一个类来解决问题。但是我对类的运用非常不熟悉。导致自己多次无法通过测试点。最后截至提交了也没通过测试点。非常的遗憾。其实Java作业的总体题量不大,可是对我这种掌握不熟悉的同学来说,犯大量的错误,浪费了大量时间,许多不熟悉的操作语言要翻书寻找。就常常会感觉很匆忙。

第一次作业

读取键盘的输入,做一些简单的运算。大小顺序排序等

第二次作业

求下一天或者前几天日期,主要用到选择语句

第三次作业

设计类解决一些实际问题,如银行账户等

 

设计与分析

部分源码

public static void main(String[] args) {

int a=0,b=0,c=0;

//创建一个输入器

Scanner scanner = new  Scanner(System.in);

//接受三次输入

System.out.println("请输入第一条边");

a = scanner.nextInt();

System.out.println("请输入第二条边");

b =scanner.nextInt();

System.out.println("请输入第三条边");

c=scanner.nextInt();

//进行判断

if(a>0 && b>0 && c>0) {

//对三条边进行排序 (目的就确认 短,中,长)

if(a>b) {

int temp = a;

a=b;

b= temp;

}

if(a>c) {

int temp = a;

a=c;

c= temp;

}

if(b>c) {

int temp = b;

b=c;

c= temp;

}

//System.out.println(a+"  "+b+" "+c);

//判断是否组成三角形

if(a+b>c) {

if(a*a+b*b<c*c) {

if(a==b) {

System.out.println("等腰三角形");

}else {

System.out.println("钝角三角形");

}

}else if(a*a+b*b==c*c) {

if(a==b) {

System.out.println("等腰直角三角形");

}else {

System.out.println("直角三角形");

}

}else {

if(a==b) {

if(b==c) {

System.out.println("等边三角形");

}else {

System.out.println("等腰三角形");

}

该题较为简单,主要是对键盘输入的一个接收,然后反复使用选择语句进行判断。就是选择语句的一个练习,并不复杂。多用几次if else就可以了。

部分代码

public static boolean isLeapYear(int year) {//判断是否闰年

boolean isLeapYear = (year % 4 == 0 && year % 100 !=0 )||year % 400 == 0;

return isLeapYear;

}

 

public static boolean checkInputValidity(int year,int month,int day) {

        int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};

        if(isLeapYear(year))

         aa[2] = 29;

        boolean checkInputValidity = (year>=1820&&year<=2020&&month>0&&month<=12&&day<=aa[month]&&day>0);

         return checkInputValidity;

}

 

public static void nextDate(int year,int month,int day) {

//求下一天注意夸年月以及特殊月份以及闰年和平年的二月不同天数

int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};

        if(isLeapYear(year))

         aa[2] = 29;

     int a = 0,b = 0,c = 0;

        if(checkInputValidity(year,month,day)) {

         if(month==12) {

     if(day==aa[month]) {

     a = year+1;

     b = 1;

     c = 1;}

     if(day>0&&day<aa[month])

     {a = year;

     b = month;

     c =day +1;

     }

     }

     if(month<12) {

     if(day==aa[month]) {

     a = year;

     b = month + 1;

     c = 1;}

     if(day>0&&day<aa[month])

     {a = year;

     b = month;

     c = day+1;

     }

     }

System.out.println("Next date is:"+a+"-"+b+"-"+c);

}

else System.out.println("Wrong Format");

}

 

public static void main(String[] args) {

Scanner LJY = new Scanner(System.in);

Main ljy = new Main();

int year = LJY.nextInt();

int month = LJY.nextInt();

int day = LJY.nextInt();

ljy.nextDate(year,month,day);

 

}

 

 

部分代码

ublic static void main(String[] args) {

        Scanner as = new Scanner(System.in);

        boolean f=true;

        int q=0,e=0,r=0,t=0;

        if (as.hasNextInt())

            q= as.nextInt();

        else

            f=false;

        if (as.hasNextInt())

            e= as.nextInt();

        else

            f=false;

        if (as.hasNextInt())

            r= as.nextInt();

        else

            f=false;

        if (as.hasNextInt())

            t= as.nextInt();

        else

            f=false;

 

        if (checkInputValidity(q,e,r,t)&&f){

            nextDate(q,e,r,t);

        }else

            System.out.println("Wrong Format");

 

    }

 

    public static boolean isLeapYear(int year) {

        boolean ret=false;

        if ((year%100!=0&&year%4==0)||(year%400==0)){

            ret=true;

        }

        return ret;

    }

第二次作业是对日期的处理,相较之前的作业,在原有的基础上。因为需要对特殊月份进行特殊分析所以多了对数组的运用。总体上更加复杂,所以在做题时要更加细心,考虑清楚月份天数的处理。

 

 

 

 

 

 

 

部分代码

public class wang {

int year;

int month;

int day;

int [] mon_maxnum=new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};

    void getyear() {

 

}

    void getyear() {

 

}

public static void main(String[] args) {

 

由于有些题目我并未写出,所以无法展示代码。

第三次题目集,我学的很不好。题目也没做出来。但它总体是对类的使用的一个训练。是非常不错的题目。虽然难度对我来说有些高了。

但我相信随着不断的学习。会慢慢克服这些问题。以后自己会更加努力,解决他们。

 

 

 

踩坑心得

刚开始的时候,使用java这门语言进行编程题目的时候,由于和c语言有许多不同。会有些看不懂。可接触久了会发现许多东西是类似的。开头的模板直接套用就可以,重要的是不要忘了引用已存在的方法后头文件的引用。最开始我常常因为这个而报错,还不知道问题出在哪里,而抓耳挠腮。其次是输入的时候一定要用英文,有时候换成中文的字符了,自己不注意,长的又差不多,报错的时候也会很迷茫。

还有就是一些数据放的位置也有讲究。比如一个数据定义在一个循环里和循环外都是会产生差别的。这方面需要注意一些。

在写代码前就要思考好自己需要那些数据,要那些功能,需要进行一些什么操作。要定义那些量。

同样定义变量,方法这些东西的时候。自己在取名方面也要注意。如果随意取名,而题目需要定义的数据又多的话。很可能会导致到了后面自己需要的数据或方法自己都找不到了,忘了定义的名字。又要回头去看,导致浪费大量时间。

还有代码编译后一定要进行运行测试,检查是否有问题。

出现问题的话可以直接点旁边查看问题,,和解决方法。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

    Scanner input=new Scanner(System.in);

 

    int a=input.nextInt();

 

    int b=input.nextInt();

    System.out.println(a+b);

    }

}

像这道题,我因为忘了在开头引用import java.util.Scanner;

导致编译错误,这是我最开始犯的很愚蠢的错误。希望大家不要犯这种类似的错误。对方法使用后,记得前面一定要加上配套的代码。

接下来展示一段最近做的实验题的源码

 

实验一(随机生成学生信息)

package hello;

import java.text.DecimalFormat;

import java.util.*;

public class wa {

 

public static void main(String[] args) {

//Scanner sr = new Scanner(System.in);//输入数值sr

String studentID;//学号

String studentName;//名字

//double [][]scores;//四科成绩

 

int []id=new int[30];

//char [][]name=new char[30][5];

String []name =new String[30];

int [][]scores=new int[30][4];

//随机生成30个学生信息

for (int i=0;i<30;i++) {

 

 

id[i]=13201101+i;//从数字09随机生成id

 

 

}

for (int i=0;i<30;i++) {

 

//System.out.print(id[i]+"");

 

//System.out.println();

 

 

}

for (int i=0;i<30;i++) {

name[i]="";

for(int n=0;n<5;n++) {

name[i]=name[i]+(char)(int)(Math.random()*26+97);

}

}

for (int i=0;i<30;i++) {

//System.out.print(name[i]+"");

//System.out.println();

 

 

}

for (int i=0;i<30;i++) {

for(int n=0;n<4;n++) {

scores[i][n]=(int)(Math.random()*100);

 

}

}

for (int i=0;i<30;i++) {

for(int n=0;n<4;n++) {

DecimalFormat df = new DecimalFormat( "0.00" );//

     String cj=df.format( scores[i][n] );//把成绩转换成两位小数

//System.out.print(cj+" ");if(n==3)

//System.out.println();

}

}

double xspjf[]=new double[30];//学生平均分

for(int i=0;i<30;i++) {

 

xspjf[i]=pjf(scores[i][0],scores[i][1],scores[i][2],scores[i][3]);

}

for(int i=0;i<30;i++) {//输出30个学生平均分

DecimalFormat df = new DecimalFormat( "0.00" );//

     String cj=df.format( xspjf[i] );

//System.out.print(cj+"");

//System.out.println();

}

//最高平均分学生

double max=0;

int a=0;

for(int i=0;i<30;i++) {

 

if(max<xspjf[i]) {

max=xspjf[i];

a=i;

}

}

//System.out.print(max+"");

//System.out.print(a+"");

double xxs[]=new double [4];

Scanner in = new Scanner(System.in);

System.out.print("请输入学生姓名:");

System.out.println();

String xm=in.next();

System.out.print("请输入学生学号:");

int xh = in.nextInt();

System.out.print("请输入四门课的成绩,以空格分隔:");

 xxs[0]=in.nextDouble();

 xxs[1]=in.nextDouble();

 xxs[2]=in.nextDouble();

 xxs[3]=in.nextDouble();

 double xxspjf[]=new double [1];

 xxspjf[0]=pjf(xxs[0],xxs[1],xxs[2],xxs[3]);

// System.out.print(xxspjf[0]+"");

 double zgf=0;

 for(int i=0;i<4;i++) {

 if(zgf<xxs[i]) {

 zgf=xxs[3];

 }

 }

 int xzgf=0;

 for(int i=0;i<4;i++) {

 if(xzgf<scores[a][i]) {

 xzgf=scores[a][i];

 }

 }

 System.out.println(xm+"(ID:"+xh+") 平均分 "+xxspjf[0]+" 最高分 "+zgf);

 System.out.print(name[a]+"(ID:"+id[a]+") 平均分 "+max+" 最高分 "+xzgf);

 

}//主函数部分

//算平均分

public static double pjf(double cj1,double cj2,double cj3,double cj4) {

double sum=0;

 sum=(cj1+cj2+cj3+cj4)/4;

return sum;

}

 

}

这道题最开始我出现的错误是拿到手也没多想就开始敲,没有好好考虑变量数组的设定大小这些方面,导致后面十分的难受,然后做到一半又对前面的定义的变量进行修改。可是已经写了一大半了,一修改就要修改许多。前面许多东西都有推倒重做,浪费了大量时间。导致了许多问题的出现。其中变量放在循环内后,导致结果不是自己想要的问题,也是出现在这里,幸好同学帮助找出了。希望大家不要犯相同的错误,在编写程序之前一定要思考好,大体方向,以及需要的变量方法等。。。再开始动手。这样可以比少出错误,看似浪费了时间,其实节省了大量时间。

然后这道实验题,也让我学到了很多东西。许多时候自己不会的东西,要去大胆求教。这样才能更快进步。

 

 

 

改进建议

自身现在Java方面的知识十分薄弱,还没本事提出什么改进建议。只能暂时搁置,以后自己会好好学习相关知识。争取早日能对Java方面的知识熟练运用。

 

总结

对本阶段的三次题目集,我从中学到了许多知识。

有键盘的输入接收,对原有Java的函数的一些调用,还有用自己写的一些函数去进行一些简单的计算。创建数组,选择语句的使用。

类的创建。可以做一些简单的问题的解决。比如输入三边后用选择语句判断是何三角形。还通过课本和网上查询以及同学帮助学会了生成随机数,随机字母,这些东西。综合起来可以随机生成随机学生信息。然后通过一些绑定可以。做一些实际的问题操作。

for (int i=0;i<30;i++) {

 

 

id[i]=13201101+i;//从数字09随机生成id

 

 

}

for (int i=0;i<30;i++) {

 

//System.out.print(id[i]+"");

 

//System.out.println();

 

 

}

for (int i=0;i<30;i++) {

name[i]="";

for(int n=0;n<5;n++) {

name[i]=name[i]+(char)(int)(Math.random()*26+97);

}

}

for (int i=0;i<30;i++) {

//System.out.print(name[i]+"");

//System.out.println();

 

 

}

for (int i=0;i<30;i++) {

for(int n=0;n<4;n++) {

scores[i][n]=(int)(Math.random()*100);

 

}

}

for (int i=0;i<30;i++) {

for(int n=0;n<4;n++) {

DecimalFormat df = new DecimalFormat( "0.00" );//

     String cj=df.format( scores[i][n] );//把成绩转换成两位小数

//System.out.print(cj+" ");if(n==3)

//System.out.println();

这里就是部分随机生成的代码,是我最近学到的。其中还有强制转换。因为我之前随机生成的数小数位数太多了,而实验要求是两位小数。所以我要去寻找相关的操作代码。从中学到了强制转换。自己也发现了自己的许多不足,许多基本操作都不熟练。Java的基本知识完全不熟悉。课程上落下了许多,对比同阶段的同学,知识非常不足。许多同学会的自己都不会。特别是类相关的知识自己一窍不通,看得很懵逼。这方面急需加强,要多看类有关的知识。赶上同学们的进度。

还有许多基础性的东西要熟悉起来。现在还老要翻书,去找相关的代码。老师教学很认真严谨也详细。可是希望作业要求方面能谅解一下我这种学渣,多宽容一点。课程方面希望能进度慢一点。

作业希望简单一点,要求宽容一点。

实验我觉挺好,能学到好多东西。老师教的也很细心,帮我们解决问题。重点是作业方面,希望宽容点点呀。其他方面都挺好的。

posted @ 2021-04-04 22:23  我不气  阅读(78)  评论(0)    收藏  举报