哈哈的第一次BLOG作业

一、前言

  第一次作业:总共有9道题,大体上是检测一些基本的语法内容,如条件语句、循环等等,总的来说不难,但是我得分并不高

  第二次作业:一共三道题,第一题较为简单,后两题难,本次作业涉及到了如何判定非法输入以及输出格式的问题

  第三次作业:一共三道题,第一题相对简单,后两题好难,这次作业更加强调要用类的方式去解决问题,同时也涉及到判断输入格式的问题(正则表达不太会啊)

二、设计与分析

   第一次作业谈不上设计了,基本没有运用类来解决问题,大体上都是面向过程的一个解决方法。对于第一次作业的分析呢,只能说初次接触面向对象不太熟,但那些基础的语法还是值得注意的,千万不能在这方面犯错。

  第二次作业比第一次好一点,不过还是没用到类,运用了函数对方法进行包装,用起来方便,整个代码结构看起来也比较清晰。这里对第二题进行分析,首先我先附上源代码

import java.util.Scanner;

 

public class Main {

 

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner in = new Scanner(System.in);
String s1 = new String();
s1 = in.nextLine();
char[] a1 = s1.toCharArray();
int c = 0;
if(s1.length()>=11)
{
int b= 0;
for(int i = 0;i<s1.length();i++)
{

while(((int)a1[i]-(int)'0')==0&&s1.length()-i>=10)

 


{
b=i;
c++;
i = b+10;
if((int)a1[b+10]-(int)'0'==1&&(int)a1[b+9]-(int)'0'==1)
{
System.out.println(c+":"+s1.substring(b+1,b+9));
break;

 

}
else if((int)a1[b+10]-(int)'0'==1&&(int)a1[b+9]-(int)'0'==0)
{
System.out.println(c+":"+"parity check error");
break;
}
else if((int)a1[b+10]-(int)'0'==0)
{
System.out.println(c+":"+"validate error");
break;
}

}

}
}
else
{
System.out.println(c+":"+"null data");
}
}

 

 

 

 

对于这题,我是线定义了一个String变量来存储用户输入的一大串数据,再通过toChar Array()方法转化为一个char数组,然后再按照题目的要求进行判断的输入符合哪种情况或者是不是属于非法输入。然后再用if语句输出相应的内容。

  第三次作业,这次和前两次大不相同,因为老师这次强调了必须使用类来解决问题,所以这次我用了类。但是这次题目比前两次难很多,比较难写,又加上我自己的判断失误,我开始写这次作业的时间比较晚,所以我只完成了第一题,另外两题完成情况较差。所以这里我就用第一题作为分析的对象吧,老规矩先附上源代码:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String s1 = new String();
s1 = in.nextLine();
if(count(s1)<2)
{

// boolean c;
// c = s1.matches("^[+-]?(0|[1-9][\\\\d]{0,})(\\\\.[\\\\d]{1,})?[\\\\,][+-]?(0|[1-9][\\\\d]{0,})(\\\\.[\\\\d]{1,})?[\\\\s][+-]?(0|[1-9][\\\\d]{0,})(\\\\.[\\\\d]{1,})?[\\\\,][+-]?(0|[1-9][\\\\d]{0,})(\\\\.[\\\\d]{1,})?");
if(s1.matches("^[+-]?(0|[1-9][\\d]{0,})(\\.[\\d]{1,})?[\\,][+-]?(0|[1-9][\\d]{0,})(\\.[\\d]{1,})?[\\s][+-]?(0|[1-9][\\d]{0,})(\\.[\\d]{1,})?[\\,][+-]?(0|[1-9][\\d]{0,})(\\.[\\d]{1,})?"))
{
String[] strs = s1.split("");
String s2 = new String();
String s3 = new String();
// for (String s : strs) {
// System.out.println(s);
// }
int num1 = s1.indexOf(" ");
s2 = s1.substring(0,num1);
s3 = s1.substring(num1+1,s1.length());
Point1 a = change(s2);
Point1 b = change(s3);
double result = distance(a,b);
System.out.println(result);
}
else
{
System.out.println("Wrong Format");
}
}
else
{
System.out.println("wrong number of points");
}
}

public static int count(String s1)
{
int a = 0;
for(int i = 0;i<s1.length();i++)
{
if(s1.charAt(i) == ' ')
a++;

}
return a;
}
public static Point1 change(String s)
{
int num = s.indexOf(",");
double m,n;
m = Double.parseDouble(s.substring(0,num));
n = Double.parseDouble(s.substring(num+1,s.length()));
//Point1 a = new Point1(Double.parseDouble(s.substring(0, num)),Double.parseDouble(s.substring(num, s.length()+1)));
Point1 a = new Point1(m,n);
return a;
}
public static double distance(Point1 p1,Point1 p2)
{
double distance = Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+
(p1.y-p2.y)*(p1.y-p2.y));
return distance;
}

}
class Point1{
double x,y;
public Point1(double x,double y)
{
this.x = x;
this.y = y;
}
// public double distance(Point1 p1,Point1 p2)
// {
// double distance = Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+
// (p1.y-p2.y)*(p1.y-p2.y));
// return distance;
// }
}

 

 

 

这题的设计思路大体是这样的,我定义了一个点类,里面包含x轴坐标和y轴坐标两个属性以及计算两点距离的方法,然后一样是使用String变量接收用户输入数据,再进行判断是否

 

 

合题目要求。这里值得注意的是,判断用户输入是否符合题目要求格式时可以使用正则表达式,这样方便简洁效率高。

 

 

三、踩坑心得

1.写完还是要注意一些边界值的测试,第一次作业就有许多边界值测试没通过,类似这种

 

 

2.有一个值得注意的是double型的0.1实际上打印出来是0.09999999999999998原因就是浮点数是无法精确表示的。所以当我们遇到浮点数运算时,必须要注意这一点。那我们应该怎么解决这个问题呢?当浮点数 |a - b| <(1E-10) ,则认为a与b相等。我就在这里吃过一次亏,希望这次能记住,下次不要再犯错了。

3.判断用户输入是否符合题目要求格式时记得使用正则表达式,这样可以大大提高你代码的效率。

四、改进建议

多多使用类来解决问题,下次动手敲代码之前要画好类图,构思好需要写点什么,这样就能够有效避免写出来的东西混乱、自己都看不明白的局面。还要注意一定要尽早开始动手写大作业,要不然即使有思路也写不出来了。

五、总结

问题总是会存在的,要不断的发现问题并解决问题,写代码要多动手尝试。总的来说,问题还有很多,慢慢解决吧。

posted @ 2022-04-10 22:11  21201615-李俊  阅读(30)  评论(0)    收藏  举报