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;//从数字0到9随机生成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;//从数字0到9随机生成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的基本知识完全不熟悉。课程上落下了许多,对比同阶段的同学,知识非常不足。许多同学会的自己都不会。特别是类相关的知识自己一窍不通,看得很懵逼。这方面急需加强,要多看类有关的知识。赶上同学们的进度。
还有许多基础性的东西要熟悉起来。现在还老要翻书,去找相关的代码。老师教学很认真严谨也详细。可是希望作业要求方面能谅解一下我这种学渣,多宽容一点。课程方面希望能进度慢一点。
作业希望简单一点,要求宽容一点。
实验我觉挺好,能学到好多东西。老师教的也很细心,帮我们解决问题。重点是作业方面,希望宽容点点呀。其他方面都挺好的。

浙公网安备 33010602011771号