热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java第三,四次大作业T1~T3及期中考试总结

第三次大作业:T17-1点线形系列1-计算两点之间的距离输入连个点的坐标,计算两点之间的距离 输入格式:4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x

第三次大作业:

  T1

  7-1 点线形系列1-计算两点之间的距离

输入连个点的坐标,计算两点之间的距离

 


输入格式:

4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。


输出格式:

计算所得的两点之间的距离。例如:1.4142135623730951

 实现代码:

import java.util.Scanner;

public class Main
{
public static void main(String[] args)
{
double z,v;
Scanner in=new Scanner(System.in);
String a=in.nextLine();
String []xy=a.split(" ");
String []nm=xy[0].split(",");
String []jk=xy[1].split(",");
if(xy.length>2)
{
System.out.print("wrong number of points");
}
else if(nm[0].charAt(0)=='+'&&nm[0].charAt(1)=='+'||nm[0].charAt(0)=='+'&&nm[0].charAt(1)=='-'||nm[0].charAt(0)=='-'&&nm[0].charAt(1)=='-'||nm[0].charAt(0)=='-'&&nm[0].charAt(1)=='+'||nm[1].charAt(0)=='+'&&nm[1].charAt(1)=='+'||nm[1].charAt(0)=='+'&&nm[1].charAt(1)=='-'||nm[1].charAt(0)=='-'&&nm[1].charAt(1)=='-'||nm[1].charAt(0)=='-'&&nm[1].charAt(1)=='+'||jk[0].charAt(0)=='+'&&jk[0].charAt(1)=='+'||jk[0].charAt(0)=='+'&&jk[0].charAt(1)=='-'||jk[0].charAt(0)=='-'&&jk[0].charAt(1)=='-'||jk[0].charAt(0)=='-'&&jk[0].charAt(1)=='+'||jk[1].charAt(0)=='+'&&jk[1].charAt(1)=='+'||jk[1].charAt(0)=='+'&&jk[1].charAt(1)=='-'||jk[1].charAt(0)=='-'&&jk[1].charAt(1)=='-'||jk[1].charAt(0)=='-'&&jk[1].charAt(1)=='+')
{
System.out.print("Wrong Format");
System.exit(0);
}
else
{
double x1=Double.parseDouble(nm[0]);
double y1=Double.parseDouble(nm[1]);
double x2=Double.parseDouble(jk[0]);
double y2=Double.parseDouble(jk[1]);
z=((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
v=Math.sqrt(z);
System.out.print(v);
}
}
}

--------------------------------------------------------------------------------------------------------------------------------------------------------

 

实验思路及对代码的改进思路

    实验要求较多,对于这样的实验,想要实现其所有要求,使用if else语句是必不可少的,实现多情况要求时,还用到正则公式实现代码,还用split函数将输入数据断开,来实现分段操作

。由于代码长度很长,只能分if else分别实现。

    在实现计算是否为错误输入时,if语句中条件很多。原因是分段很短,需要一段一段判断,故实现较为麻烦。后续判断使用了正则公式,实现就更加方便简单,代码的长度很长是我这次

的疏忽,就实际情况讨论,导致后续代码的维护等等会出现较多问题,是代码质量不良的表现。

    个别要求代码并没有实现,原因是实在不清楚具体是哪里没有实现。代码实现也有些许问题,这个是我本人的疏忽。

 

--------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

    T2

7-2 点线形系列2-线的计算

 

用户输入一组选项和数据,进行与直线有关的计算。选项包括:
1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。
3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.
5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。


输入格式:

基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。
例如:1:0,0 1,1
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
不论哪个选项,如果格式、点数量都符合要求,但构成任一条线的两个点坐标重合,输出"points coincide",

 

代码:

 

import java.util.Scanner;

 

class Main {

 

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

Scanner input = new Scanner(System.in);
String num0 = input.nextLine();//输入的字符串
String num = num0.substring(2,num0.length());//去掉前面选项的字符串
String []arr = num.split(" ");

// for(int i = 1; i // if(arr[i - 1].equals(arr[i])) {
// System.out.println("points coincide");
// System.exit(i);
// }
//// System.out.println(arr[0]);
//// System.exit(0);
// }
//
// if(judge(num)) {
// System.out.println("Wrong Format");
// System.exit(0);
// }

if(num0.charAt(0) == '1') {//当选项为1时
if(arr.length != 2) {
System.out.println("wrong number of points");
System.exit(0);
}else {
String arr1 = arr[0];
String arr2 = arr[1];
String []strNum1 = arr1.split(",");
String []strNum2 = arr2.split(",");
if(!strNum(strNum1[0]) || !strNum(strNum1[1]) || !strNum(strNum2[0]) || !strNum(strNum2[1])) {
System.out.println("Wrong Format");
System.exit(0);
}else if(arr1.equals(arr2)) {
System.out.println("points coincide");
System.exit(0);
}
else if(strNum1[0].equals(strNum2[0])) {
System.out.println("Slope does not exist");
System.exit(0);
}else {
double num1[] = new double[2];
double num2[] = new double[2];
num1[0] = Double.parseDouble(strNum1[0]);
num1[1] = Double.parseDouble(strNum1[1]);
num2[0] = Double.parseDouble(strNum2[0]);
num2[1] = Double.parseDouble(strNum2[1]);
//System.out.println(num1[0]);
System.out.println((num2[1] - num1[1]) / (num2[0] - num1[0]));
System.exit(0);
}
}
}else if(num0.charAt(0) == '2') {//当选项为2或3时
if(arr.length != 3) {
System.out.println("wrong number of points");
System.exit(0);
}else {
String arr1 = arr[0];
String arr2 = arr[1];
String arr3 = arr[2];
String []strNum1 = arr1.split(",");
String []strNum2 = arr2.split(",");
String []strNum3 = arr3.split(",");

double num1[] = new double[2];
double num2[] = new double[2];
double num3[] = new double[2];
num1[0] = Double.parseDouble(strNum1[0]);//x1
num1[1] = Double.parseDouble(strNum1[1]);//y1
num2[0] = Double.parseDouble(strNum2[0]);//x2
num2[1] = Double.parseDouble(strNum2[1]);//y2
num3[0] = Double.parseDouble(strNum3[0]);//x3
num3[1] = Double.parseDouble(strNum3[1]);//y3

if(!strNum(strNum1[0]) || !strNum(strNum1[1]) || !strNum(strNum2[0]) || !strNum(strNum2[1])
|| !strNum(strNum3[0]) || !strNum(strNum3[1])) {
System.out.println("Wrong Format");
System.exit(0);
}
else if(arr2.equals(arr3)) {
System.out.println("points coincide");
System.exit(0);
}
System.out.println(Math.abs((num3[1]-num2[1]) * num1[0] + (num2[0]-num3[0]) * num1[1]
+ num3[0] * num2[1] - num3[1] * num2[0]) /
Math.sqrt((num3[1]-num2[1]) * (num3[1]-num2[1]) +(num3[0]-num2[0]) * (num3[0]-num2[0])));
System.exit(0);
// if(strNum1[0].equals(strNum2[0]) && strNum1[0].equals(strNum3[0]) ||
// strNum1[1].equals(strNum2[1]) || strNum2[1].equals(strNum3[1])) {
//
// }
}
import java.util.Scanner;

 

class Main {

 

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

Scanner input = new Scanner(System.in);
String num0 = input.nextLine();//输入的字符串
String num = num0.substring(2,num0.length());//去掉前面选项的字符串
String []arr = num.split(" ");

// for(int i = 1; i // if(arr[i - 1].equals(arr[i])) {
// System.out.println("points coincide");
// System.exit(i);
// }
//// System.out.println(arr[0]);
//// System.exit(0);
// }
//
// if(judge(num)) {
// System.out.println("Wrong Format");
// System.exit(0);
// }

if(num0.charAt(0) == '1') {//当选项为1时
if(arr.length != 2) {
System.out.println("wrong number of points");
System.exit(0);
}else {
String arr1 = arr[0];
String arr2 = arr[1];
String []strNum1 = arr1.split(",");
String []strNum2 = arr2.split(",");
if(!strNum(strNum1[0]) || !strNum(strNum1[1]) || !strNum(strNum2[0]) || !strNum(strNum2[1])) {
System.out.println("Wrong Format");
System.exit(0);
}else if(arr1.equals(arr2)) {
System.out.println("points coincide");
System.exit(0);
}
else if(strNum1[0].equals(strNum2[0])) {
System.out.println("Slope does not exist");
System.exit(0);
}else {
double num1[] = new double[2];
double num2[] = new double[2];
num1[0] = Double.parseDouble(strNum1[0]);
num1[1] = Double.parseDouble(strNum1[1]);
num2[0] = Double.parseDouble(strNum2[0]);
num2[1] = Double.parseDouble(strNum2[1]);
//System.out.println(num1[0]);
System.out.println((num2[1] - num1[1]) / (num2[0] - num1[0]));
System.exit(0);
}
}
}else if(num0.charAt(0) == '2') {//当选项为2或3时
if(arr.length != 3) {
System.out.println("wrong number of points");
System.exit(0);
}else {
String arr1 = arr[0];
String arr2 = arr[1];
String arr3 = arr[2];
String []strNum1 = arr1.split(",");
String []strNum2 = arr2.split(",");
String []strNum3 = arr3.split(",");

double num1[] = new double[2];
double num2[] = new double[2];
double num3[] = new double[2];
num1[0] = Double.parseDouble(strNum1[0]);//x1
num1[1] = Double.parseDouble(strNum1[1]);//y1
num2[0] = Double.parseDouble(strNum2[0]);//x2
num2[1] = Double.parseDouble(strNum2[1]);//y2
num3[0] = Double.parseDouble(strNum3[0]);//x3
num3[1] = Double.parseDouble(strNum3[1]);//y3

if(!strNum(strNum1[0]) || !strNum(strNum1[1]) || !strNum(strNum2[0]) || !strNum(strNum2[1])
|| !strNum(strNum3[0]) || !strNum(strNum3[1])) {
System.out.println("Wrong Format");
System.exit(0);
}
else if(arr2.equals(arr3)) {
System.out.println("points coincide");
System.exit(0);
}
System.out.println(Math.abs((num3[1]-num2[1]) * num1[0] + (num2[0]-num3[0]) * num1[1]
+ num3[0] * num2[1] - num3[1] * num2[0]) /
Math.sqrt((num3[1]-num2[1]) * (num3[1]-num2[1]) +(num3[0]-num2[0]) * (num3[0]-num2[0])));
System.exit(0);
// if(strNum1[0].equals(strNum2[0]) && strNum1[0].equals(strNum3[0]) ||
// strNum1[1].equals(strNum2[1]) || strNum2[1].equals(strNum3[1])) {
//
// }
}
else if(arr1.equals(arr2) || arr3.equals(arr4)) {
System.out.println("points coincide");
System.exit(0);
}
else if(strNum1[0].equals(strNum2[0]) && strNum3[0].equals(strNum4[0])) {
System.out.println("true");
System.exit(0);
}else if(strNum1[0].equals(strNum2[0]) || !strNum3[0].equals(strNum4[0])) {
System.out.println("false");
System.exit(0);
}else {
if(arr1.equals(arr3) || arr1.equals(arr4) || arr2.equals(arr3) || arr2.equals(arr4)
||(num3[1] - num1[1]) / (num3[0] - num1[0]) ==
(num4[1] - num3[1]) / (num4[0] - num3[0])
||(num1[1] - num3[1]) / (num1[0] - num3[0]) ==
(num4[1] - num3[1]) / (num4[0] - num3[0])) {
System.out.println("false");
System.exit(0);
}
else if((num2[1] - num1[1]) / (num2[0] - num1[0]) ==
(num4[1] - num3[1]) / (num4[0] - num3[0])) {
System.out.println("true");
System.exit(0);
}else {
System.out.println("false");
System.exit(0);
}
}
}
}

else if(num0.charAt(0) == '5') {//当选项为4或5时
if(arr.length != 4) {
System.out.println("wrong number of points");
System.exit(0);
}else {

String arr1 = arr[0];
String arr2 = arr[1];
String arr3 = arr[2];
String arr4 = arr[3];
String []strNum1 = arr1.split(",");
String []strNum2 = arr2.split(",");
String []strNum3 = arr3.split(",");
String []strNum4 = arr4.split(",");

double num1[] = new double[2];
double num2[] = new double[2];
double num3[] = new double[2];
double num4[] = new double[2];
num1[0] = Double.parseDouble(strNum1[0]);//x1
num1[1] = Double.parseDouble(strNum1[1]);//y1
num2[0] = Double.parseDouble(strNum2[0]);//x2
num2[1] = Double.parseDouble(strNum2[1]);//y2
num3[0] = Double.parseDouble(strNum3[0]);//x3
num3[1] = Double.parseDouble(strNum3[1]);//y3
num4[0] = Double.parseDouble(strNum4[0]);//x3
num4[1] = Double.parseDouble(strNum4[1]);//y3

if(!strNum(strNum1[0]) || !strNum(strNum1[1]) || !strNum(strNum2[0]) || !strNum(strNum2[1])
|| !strNum(strNum3[0]) || !strNum(strNum3[1])|| !strNum(strNum4[0]) || !strNum(strNum4[1])) {
System.out.println("Wrong Format");
System.exit(0);
}else if(arr1.equals(arr2) || arr3.equals(arr4)) {
System.out.println("points coincide");
System.exit(0);
}

else if(strNum1[0].equals(strNum2[0]) && strNum3[0].equals(strNum4[0])) {
System.out.println("is parallel lines,have no intersection point");
System.exit(0);
}else if((num2[1] - num1[1]) / (num2[0] - num1[0]) ==
(num4[1] - num3[1]) / (num4[0] - num3[0])) {
System.out.println("is parallel lines,have no intersection point");
System.exit(0);
}else {
getPoint(num1[0],num1[1],num2[0],num2[1],num3[0],num3[1],num4[0],num4[1]);

}

}
}

 

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

 

public static void getPoint(double p1x,double p1y,double p2x,double p2y,double p3x,double p3y,double p4x,double p4y) {
double A1=p1y-p2y;
double B1=p2x-p1x;
double C1=A1*p1x+B1*p1y;

 

double A2=p3y-p4y;
double B2=p4x-p3x;
double C2=A2*p3x+B2*p3y;

 

double det_k=A1*B2-A2*B1;

 

// if(Math.abs(det_k)<0.00001){
// return null;
// }

 

double a=B2/det_k;
double b=-1*B1/det_k;
double c=-1*A2/det_k;
double d=A1/det_k;

 

double x=a*C1+b*C2;
double y=c*C1+d*C2;

 

String point = x + "," + y;
String judge;
if((((x p1x) && (y p1y) )
&&((x p3x) && (y p3y)))

||(((x p2x) && (y p2y) )
&&((x p3x) && (y p3y)))

||(((x p1x) && (y p1y) )
&&((x p3x) && (y p3y)))

||(((x p2x) && (y p2y) )
&&((x p3x) && (y p3y)))

||(((x p1x) && (y p2y) )
&&((x p3x) && (y p4y) ))

||(((x p2x) && (y p1y) )
&&((x p3x) && (y p4y)))

||(((x p1x) && (y p2y) )
&&((x p3x) && (y p4y)))

||(((x p2x) && (y p1y) )
&&((x p3x) && (y p4y)))) {
judge = "true";
}else {
judge = "false";
}
System.out.println(x + "," + y + " " + judge);
System.exit(0);

//return System.out.println(x + "," + y);;
}

 

public static boolean strNum(String str) {
try {
Double.parseDouble(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}

public static boolean judge(String num) {
char []arr = num.toCharArray();
if (/* (arr[0] == '0' && arr[1] != ',' )|| */(arr[0] == '0' && arr[1] != '.' )||
(arr[0] == '0' && arr[1] != ',' )||
(arr[0] == '+' && arr[1] == '0') || (arr[0] == '-' && arr[1] == '0') ||
(arr[0] == '+' && arr[1] != '.')) {
return true;
}else {
return false;
}
}
}

 

 

 

 ---------------------------------------------------------------------------------------------------------------------

 

 

 

实验思路及对代码的改进思路

    

 

实验要求较多,对于这样的实验,想要实现其所有要求,使用if else语句是必不可少的,实现多情况要求时,还用到正则公式实现代码,还用split函数将输入数据断开,来实现分段操作

。由于代码长度很长,只能分if else分别实现。

    在实现计算是否为错误输入时,if语句中条件很多。原因是分段很短,需要一段一段判断,故实现较为麻烦。后续判断使用了正则公式,实现就更加方便简单,代码的长度很长是我这次

的疏忽,就实际情况讨论,导致后续代码的维护等等会出现较多问题,是代码质量不良的表现。

    个别要求代码并没有实现,原因是实在不清楚具体是哪里没有实现。代码实现也有些许问题,这个是我本人的疏忽

 

 

---------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

7-3 点线形系列3-三角形的计算

 

    用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
1:输入三个点坐标,判断是否是等腰三角形、等边三角形,判断结果输出true/false,两个结果之间以一个英文空格符分隔。
2:输入三个点坐标,输出周长、面积、重心坐标,三个参数之间以一个英文空格分隔,坐标之间以英文","分隔。
3:输入三个点坐标,输出是钝角、直角还是锐角三角形,依次输出三个判断结果(true/false),以一个英文空格分隔,
4:输入五个点坐标,输出前两个点所在的直线与三个点所构成的三角形相交的交点数量,如果交点有两个,则按面积大小依次输出三角形被直线分割成两部分的面积。若直线与三角形一条线重合,输出"The point is on the edge of the triangle"
5:输入四个点坐标,输出第一个是否在后三个点所构成的三角形的内部(输出in the triangle/outof triangle)。
必须使用射线法,原理:由第一个点往任一方向做一射线,射线与三角形的边的交点(不含点本身)数量如果为1,则在三角形内部。如果交点有两个或0个,则在三角形之外。若点在三角形的某条边上,输出"on the triangle"

    

 

    

import java.util.Scanner;

public class Main
{
public static void main(String[] args)
{
double z,v;
Scanner in=new Scanner(System.in);
String a=in.nextLine();
String []xy=a.split(" ");
String []nm=xy[0].split(",");
String []jk=xy[1].split(",");
if(xy.length>2)
{
System.out.print("wrong number of points");
}
else if(nm[0].charAt(0)=='+'&&nm[0].charAt(1)=='+'||nm[0].charAt(0)=='+'&&nm[0].charAt(1)=='-'||nm[0].charAt(0)=='-'&&nm[0].charAt(1)=='-'||nm[0].charAt(0)=='-'&&nm[0].charAt(1)=='+'||nm[1].charAt(0)=='+'&&nm[1].charAt(1)=='+'||nm[1].charAt(0)=='+'&&nm[1].charAt(1)=='-'||nm[1].charAt(0)=='-'&&nm[1].charAt(1)=='-'||nm[1].charAt(0)=='-'&&nm[1].charAt(1)=='+'||jk[0].charAt(0)=='+'&&jk[0].charAt(1)=='+'||jk[0].charAt(0)=='+'&&jk[0].charAt(1)=='-'||jk[0].charAt(0)=='-'&&jk[0].charAt(1)=='-'||jk[0].charAt(0)=='-'&&jk[0].charAt(1)=='+'||jk[1].charAt(0)=='+'&&jk[1].charAt(1)=='+'||jk[1].charAt(0)=='+'&&jk[1].charAt(1)=='-'||jk[1].charAt(0)=='-'&&jk[1].charAt(1)=='-'||jk[1].charAt(0)=='-'&&jk[1].charAt(1)=='+')
{
System.out.print("Wrong Format");
System.exit(0);
}
else
{
double x1=Double.parseDouble(nm[0]);
double y1=Double.parseDouble(nm[1]);
double x2=Double.parseDouble(jk[0]);
double y2=Double.parseDouble(jk[1]);
z=((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
v=Math.sqrt(z);
System.out.print(v);
}
}
}

 

 

-------------------------------------------------------------------------------------------------------------

 

 

实验思路及对代码的改进思路

    代码的问题还是比较大的,很多方面没有实现。代码有很多不足,问题较大

 

 

 

 

PTA大作业四

7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)

 

背景简介:

“蛟龙号”载人深潜器是我国首台自主设计、自主集成研制的作业型深海载人潜水器,设计最大下潜深度为7000米级,也是目前世界上下潜能力最强的作业型载人潜水器。“蛟龙号”可在占世界海洋面积99.8%的广阔海域中使用,对于我国开发利用深海的资源有着重要的意义。

中国是继美、法、俄、日之后世界上第五个掌握大深度载人深潜技术的国家。在全球载人潜水器中,“蛟龙号”属于第一梯队。目前全世界投入使用的各类载人潜水器约90艘,其中下潜深度超过1000米的仅有12艘,更深的潜水器数量更少,目前拥有6000米以上深度载人潜水器的国家包括中国、美国、日本、法国和俄罗斯。除中国外,其他4国的作业型载人潜水器最大工作深度为日本深潜器的6527米,因此“蛟龙号”载人潜水器在西太平洋的马里亚纳海沟海试成功到达7020米海底,创造了作业类载人潜水器新的世界纪录。

从2009年至2012年,蛟龙号接连取得1000米级、3000米级、5000米级和7000米级海试成功。下潜至7000米,说明蛟龙号载人潜水器集成技术的成熟,标志着我国深海潜水器成为海洋科学考察的前沿与制高点之一。

2012年6月27日11时47分,中国“蛟龙”再次刷新“中国深度”——下潜7062米。6月3日,“蛟龙”出征以来,已经连续书写了5个“中国深度”新纪录:6月15日,6671米;6月19日,6965米;6月22日,6963米;6月24日,7020米;6月27日,7062米。下潜至7000米,标志着我国具备了载人到达全球99%以上海洋深处进行作业的能力,标志着“蛟龙”载人潜水器集成技术的成熟,标志着我国深海潜水器成为海洋科学考察的前沿与制高点之一,标志着中国海底载人科学研究和资源勘探能力达到国际领先水平。

‘蛟龙’号是我国载人深潜发展历程中的一个重要里程碑。它不只是一个深海装备,更代表了一种精神,一种不畏艰险、赶超世界的精神,它是中华民族进军深海的号角。

了解蛟龙号”载人深潜器“的骄人业绩,为我国海底载人科学研究和资源勘探能力达到国际领先水平而自豪,小伙伴们与祖国同呼吸、共命运,一定要学好科学文化知识、提高个人能力,增强创新意识,做事精益求精,立科技报国之志!

请编写程序,实现如下功能:读入关于蛟龙号载人潜水器探测数据的多行字符串,从给定的信息找出数字字符,输出每行的数字之和。

提示 若输入为“2012年2月”,则该行的输出为:2014。若干个连续的数字字符作为一个整体,以十进制形式相加。


输入格式:

读入关于蛟龙号载人潜水器探测数据的多行字符串,每行字符不超过80个字符。

以"end"结束。


输出格式:

与输入行相对应的各个整数之和。

 

代码:


import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner x=new Scanner(System.in);
while(true){
String a=x.nextLine();
if(a.equals("end")){
break;
}
else{
String[] split=a.split("\\D+");
int i;
int sum=0;
for(i=0;i if(!split[i].equals(""))
{
int m=Integer.parseInt(split[i]);
sum+=m;
}
}
System.out.println(sum);
}
}
}

}

 

-----------------------------------------------------------------------------------------------------

 

实验思路及对代码的改进思路

    正则表达式,使用正则表达式,实现方法很简便。使用TRUE和FALSE方式进行判断。

    代码要求较简单,所以改进方案目前没有。

 

 

------------------------------------------------------------------------------------------------------

 

 

 

7-3 设计一个银行业务类

编写一个银行业务类BankBusiness,具有以下属性和方法:
(1)公有、静态的属性:银行名称bankName,初始值为“中国银行”。
(2)私有属性:账户名name、密码password、账户余额balance。
(3)银行对用户到来的欢迎(welcome)动作(静态、公有方法),显示“中国银行欢迎您的到来!”,其中“中国银行”自动使用bankName的值。
(4)银行对用户离开的提醒(welcomeNext)动作(静态、公有方法),显示“请收好您的证件和物品,欢迎您下次光临!”
(5)带参数的构造方法,完成开户操作。需要账户名name、密码password信息,同时让账户余额为0。
(6)用户的存款(deposit)操作(公有方法,需要密码和交易额信息),密码不对时无法存款且提示“您的密码错误!”;密码正确、完成用户存款操作后,要提示用户的账户余额,例如“您的余额有1000.0元。”。
(7)用户的取款(withdraw)操作(公有方法,需要密码和交易额信息)。密码不对时无法取款且提示“您的密码错误!”;密码正确但余额不足时提示“您的余额不足!”;密码正确且余额充足时扣除交易额并提示用户的账户余额,例如“请取走钞票,您的余额还有500.0元。”。

编写一个测试类Main,在main方法中,先后执行以下操作:
(1)调用BankBusiness类的welcome()方法。
(2)接收键盘输入的用户名、密码信息作为参数,调用BankBusiness类带参数的构造方法,从而创建一个BankBusiness类的对象account。
(3)调用account的存款方法,输入正确的密码,存入若干元。密码及存款金额从键盘输入。
(4)调用account的取款方法,输入错误的密码,试图取款若干元。密码及取款金额从键盘输入。
(5)调用account的取款方法,输入正确的密码,试图取款若干元(取款金额大于余额)。密码及取款金额从键盘输入。
(6)调用account的取款方法,输入正确的密码,试图取款若干元(取款金额小于余额)。密码及取款金额从键盘输入。
(7)调用BankBusiness类的welcomeNext()方法。


输入格式:

输入开户需要的姓名、密码
输入正确密码、存款金额
输入错误密码、取款金额
输入正确密码、大于余额的取款金额
输入正确密码、小于余额的取款金额


输出格式:

中国银行(银行名称)欢迎您的到来!
您的余额有多少元。
您的密码错误!
您的余额不足!
请取走钞票,您的余额还有多少元。
请收好您的证件和物品,欢迎您下次光临!

 

代码:

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

String bankname = input.next();
int password = input.nextInt();
BankBusiness account;
account = new BankBusiness(bankname,password);

account.welcome();

int p;
double m;

p = input.nextInt();
m = input.nextDouble();
account.deposit(p,m);

p = input.nextInt();
m = input.nextDouble();
account.deposit(p,m);

p = input.nextInt();
m = input.nextDouble();
account.withdraw(p,m);

p = input.nextInt();
m = input.nextDouble();
account.withdraw(p,m);

BankBusiness.welcomeNext();
}
static class BankBusiness{
public static String bankName = "中国银行";
String name;
int password;
double balance;

static void welcome() {
System.out.println(bankName+"欢迎您的到来!");
}

static void welcomeNext() {
System.out.println("请收好您的证件和物品,欢迎您下次光临!");
}

BankBusiness(String name,int password){
this.name = name;
this.password = password;
balance = 0;
}

public void deposit(int password,double money){
if(password != this.password){
System.out.println("您的密码错误!");
}
else{
this.balance += money;
System.out.println("您的余额有"+this.balance+"元。");
}
}

public void withdraw(int password,double money){
if(password != this.password){
System.out.println("您的密码错误!");
}
else{
if(this.balance System.out.println("您的余额不足!");
}
else{
this.balance -= money;
System.out.println("请取走钞票,您的余额还有"+this.balance+"元。");
}
}
}

}
}

 

-----------------------------------------------------------------------------------------------------------

实验思路及对代码的改进思路

    方法很简单,设置类,设置几个实现代码的类:

银行类:输入银行名,银行类里再实现银行业务类,余额类,取钱类。

对里面的类进行if else语句判读,改进方法可以利用子类父类的方法进行改进。

 

-----------------------------------------------------------------------------------------------------------

 

 

 

期中考试

 

7-1 点与线(类设计)



  • 设计一个类表示平面直角坐标系上的点Point,私有属性分别为横坐标x与纵坐标y,数据类型均为实型数,除构造方法以及属性的getter与setter方法外,定义一个用于显示信息的方法display(),用来输出该坐标点的坐标信息,格式如下:(x,y),数值保留两位小数。为简化题目,其中,坐标点的取值范围设定为(0,200]。若输入有误,系统则直接输出Wrong Format



  • 设计一个类表示平面直角坐标系上的线Line,私有属性除了标识线段两端的点point1、point2外,还有一个字符串类型的color,用于表示该线段的颜色,同样,除构造方法以及属性的getter与setter方法外,定义一个用于计算该线段长度的方法getDistance(),还有一个用于显示信息的方法display(),用来输出线段的相关信息,输出格式如下:

    ```
    The line's color is:颜色值
    The line's begin point's Coordinate is:
    (x1,y1)
    The line's end point's Coordinate is:
    (x2,y2)
    The line's length is:长度值
    ```

     

    其中,所有数值均保留两位小数,建议可用String.format("%.2f", data)方法。

    设计类图如下图所示。

     


1641304523(1).jpg

** 题目要求:在主方法中定义一条线段对象,从键盘输入该线段的起点坐标与终点坐标以及颜色,然后调用该线段的display()方法进行输出。**

 

 

代码:

import java.util.Scanner;

class Point{
private double x;
private double y;

public Point() {
}

public Point(double x, double y) {
this.x = x;
this.y = y;
}

public double getX() {
return x;
}

public void setX(double x) {
this.x = x;
}

public double getY() {
return y;
}

public void setY(double y) {
this.y = y;
}
void display(){
System.out.println(String.format("(%.2f,%.2f)",this.x,this.y));
}
}
class Line{
private Point point1;
private Point point2;
private String color;

public Line() {
}
public Line(Point point1, Point point2, String color) {
this.point1 = point1;
this.point2 = point2;
this.color = color;
}

public Point getPoint1() {
return point1;
}

public void setPoint1(Point point1) {
this.point1 = point1;
}

public Point getPoint2() {
return point2;
}

public void setPoint2(Point point2) {
this.point2 = point2;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}
public double getDistance(){
double d=Math.sqrt(Math.pow((point1.getX()-point2.getX()),2)+Math.pow((point1.getY()-point2.getY()),2));
return d;
}
public void display(){
System.out.println("The line's color is:"+getColor());
System.out.println("The line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.println("The line's length is:"+String.format("%.2f", getDistance()));
}
}
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
double x1,x2,y1,y2;
String color;
x1=in.nextDouble();
y1=in.nextDouble();
x2=in.nextDouble();
y2=in.nextDouble();
color=in.next();
if(check(x1)&&check(x2)&&check(y1)&&check(y2)){
Point point1=new Point(x1,y1);
Point point2=new Point(x2,y2);
Line line=new Line(point1,point2,color);
line.display();
}else{
System.out.println("Wrong Format");
}
}
public static boolean check(double x){
if(x<=0||x>200){
return false;
}else{
return true;
}
}
}

 

--------------------------------------------------------------------------------------------

 

 

实验要求较多,对于这样的实验,想要实现其所有要求,使用if else语句是必不可少的,实现多情况要求时,还用到正则公式实现代码,还用split函数将输入数据断开,来实现分段操作

。由于代码长度很长,只能分if else分别实现。

    在实现计算是否为错误输入时,if语句中条件很多。原因是分段很短,需要一段一段判断,故实现较为麻烦。后续判断使用了正则公式,实现就更加方便简单,代码的长度很长是我这次

的疏忽,就实际情况讨论,导致后续代码的维护等等会出现较多问题,是代码质量不良的表现。

    个别要求代码并没有实现,原因是实在不清楚具体是哪里没有实现。代码实现也有些许问题,这个是我本人的疏忽。

 

 

--------------------------------------------------------------------------------------------------

7-2 点线面问题重构(继承与多态)

 

import java.util.Scanner;
abstract class Element{
abstract void display();
}
class Point extends Element {
private double x;
private double y;

public Point() {
}

public Point(double x, double y) {
this.x = x;
this.y = y;
}

public double getX() {
return x;
}

public void setX(double x) {
this.x = x;
}

public double getY() {
return y;
}

public void setY(double y) {
this.y = y;
}
void display(){
System.out.println(String.format("(%.2f,%.2f)",this.x,this.y));
}
}
class Line extends Element{
private Point point1;
private Point point2;
private String color;

public Line() {
}
public Line(Point point1, Point point2, String color) {
this.point1 = point1;
this.point2 = point2;
this.color = color;
}

public Point getPoint1() {
return point1;
}

public void setPoint1(Point point1) {
this.point1 = point1;
}

public Point getPoint2() {
return point2;
}

public void setPoint2(Point point2) {
this.point2 = point2;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}
public double getDistance(){
double d=Math.sqrt(Math.pow((point1.getX()-point2.getX()),2)+Math.pow((point1.getY()-point2.getY()),2));
return d;
}
public void display(){
System.out.println("The line's color is:"+getColor());
System.out.println("The line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.println("The line's length is:"+String.format("%.2f", getDistance()));
}
}
class Plane extends Element{
private String color;

public Plane() {
}

public Plane(String color) {
this.color = color;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

@Override
void display() {
System.out.println("The Plane's color is:"+getColor());
}
}
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
double x1,x2,y1,y2;
String color;
x1=in.nextDouble();
y1=in.nextDouble();
x2=in.nextDouble();
y2=in.nextDouble();
color=in.next();
if(check(x1)&&check(x2)&&check(y1)&&check(y2)){
Point point1=new Point(x1,y1);
Point point2=new Point(x2,y2);
Line line=new Line(point1,point2,color);
Plane plane=new Plane(color);
Element element;
element = point1;//起点Point
element.display();
element = point2;//终点Point
element.display();
element = line;//线段
element.display();
element = plane;//面
element.display();
}else{
System.out.println("Wrong Format");
}
}
public static boolean check(double x){
if(x<=0||x>200){
return false;
}else{
return true;
}
}
}

 

---------------------------------------------------------------------------------------

7-3 点线面问题再重构(容器类)

import java.util.ArrayList;
import java.util.Scanner;
abstract class Element{
abstract void display();
}
class Point extends Element {
private double x;
private double y;

public Point() {
}

public Point(double x, double y) {
this.x = x;
this.y = y;
}

public double getX() {
return x;
}

public void setX(double x) {
this.x = x;
}

public double getY() {
return y;
}

public void setY(double y) {
this.y = y;
}
void display(){
System.out.println(String.format("(%.2f,%.2f)",this.x,this.y));
}
}
class Line extends Element{
private Point point1;
private Point point2;
private String color;

public Line() {
}
public Line(Point point1, Point point2, String color) {
this.point1 = point1;
this.point2 = point2;
this.color = color;
}

public Point getPoint1() {
return point1;
}

public void setPoint1(Point point1) {
this.point1 = point1;
}

public Point getPoint2() {
return point2;
}

public void setPoint2(Point point2) {
this.point2 = point2;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}
public double getDistance(){
double d=Math.sqrt(Math.pow((point1.getX()-point2.getX()),2)+Math.pow((point1.getY()-point2.getY()),2));
return d;
}
public void display(){
System.out.println("The line's color is:"+getColor());
System.out.println("The line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.println("The line's length is:"+String.format("%.2f", getDistance()));
}
}
class Plane extends Element{
private String color;

public Plane() {
}

public Plane(String color) {
this.color = color;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

@Override
void display() {
System.out.println("The Plane's color is:"+getColor());
}
}
class GeometryObject{
ArrayList list=new ArrayList();

public GeometryObject() {
}
public void add(Element element){
list.add(element);
}
public void remove(int index){
if(index-1 list.remove(index-1);
}
public void getList(){
for (Element e:list) {
if(e==null){
System.out.println("Wrong Format");
}else{
e.display();
}

}
}
}
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
double x1,x2,y1,y2;
String color;
int choice;
Point point1;
Point point2;
Line line;
Plane plane;
Element element;
GeometryObject geoOb=new GeometryObject();
choice = in.nextInt();
while(choice != 0) {
switch(choice) {
case 1://insert Point object into list
x1=in.nextDouble();
y1=in.nextDouble();
point1=new Point(x1,y1);
element=point1;
geoOb.add(element);
break;
case 2://insert Line object into list

x1=in.nextDouble();
y1=in.nextDouble();
x2=in.nextDouble();
y2=in.nextDouble();
color=in.next();
if(check(x1)&&check(x2)&&check(y1)&&check(y2)){
point1=new Point(x1,y1);
point2=new Point(x2,y2);
line=new Line(point1,point2,color);
element=line;
geoOb.add(element);
}else{
geoOb.add(null);
}
break;
case 3://insert Plane object into list
color=in.next();
plane=new Plane(color);
element=plane;
geoOb.add(element);
break;
case 4://delete index - 1 object from list
int index = in.nextInt();
geoOb.remove(index);
}
choice = in.nextInt();
}
geoOb.getList();
}
public static boolean check(double x){
if(x<=0||x>200){
return false;
}else{
return true;
}
}
}

 ---------------------------------------------------------------------------------------

总结:代码改进很重要,通过期中考试,知道了对代码的改进及维护,首先从设计类到对类的封装

继承与多态,最后到容器类。代码的改进很重要。



推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有