Java教程

题目集1~3的总结

本文主要是介绍题目集1~3的总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1) 前言:

     (1) 难度分析:第一次的作业还是挺简单的,基本请教一下同学都能解决,但是后面几次的作业着实加大了难度,特别是第二次作业的第二题和第三次作业的二三题,是又难分数又重,像我两次都没有及格,确实应该好好学。

      (2) 题量分析:虽然后两次各只有三题,但是比起第一次作业花费的时间肯定要更多。

      (3) 知识点总结:一维数组、循环结构、字符函数的应用。

(2)设计与分析:

 题目集二 --(7-2)

7-2 串口字符解析 (40 分)  

RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。

输入格式:

由0、1组成的二进制数据流。例如:11110111010111111001001101111111011111111101111

输出格式:

过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。
如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error

输入样例:

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

1111011101011111111111
 

输出样例:

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

1:11101011
 

输入样例1:

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

11110111010111111001001101111111011111111101111
 

输出样例1:

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

1:11101011
2:01001101
3:validate error
 

输入样例2:

输入数据不足11位。例如:

111101
 

输出样例2:

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

null data
 

输入样例3:

输入数据全1没有起始位。例如:

1111111111111111
 

输出样例3:

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

null data
 

输入样例4:

输入数据全1没有起始位。例如:

111101110101111111101111111101
 

输出样例4:

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

1:11101011
2:parity check error
 

输入样例5:

两组数据结束符和奇偶校验均不合格。例如:

111000000000000011100000000000000
 

输出样例5:

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

1:validate error
2:validate error
 

输入样例6:

两组数据,数据之间无空闲位。例如:

1110000000001100111000001
 

输出样例6:

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

1:00000000
2:01110000
我的代码、

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
int flag1 = 0;
int flag2 = 0;
int m = 0;
int p = 0;
int i, j, n;
String number;
Scanner in = new Scanner(System.in);
number = in.next();
char[] chars1 = number.toCharArray();
for (i = 0; i < chars1.length; i++) {
if (chars1[i] == '0') {
flag1 = 1;
}
}
if (flag1 == 1) {
for (j = 0; j < chars1.length; j++) {
if (chars1[j] == '0') {
p++;
number = number.substring(j);
char[] chars2 = number.toCharArray();
if (chars2.length >= 10) {
flag2 = 1;
for (n = 1; n < 9; n++) {
if (chars2[n] == '1') {
m++;
}
}
if (m % 2 == 0 && chars2[9] != '1') {
System.out.println(p + ":" + "validate error");
j = 0;
m = 0;
n = 1;
} else if (m % 2 != 0 && chars2[9] == '1') {
System.out.println(p + ":" + "parity check error");
j = 0;
m = 0;
n = 1;
} else if (m % 2 != 0 && chars2[9] != '1') {
System.out.println(p + ":" + "validate error");
j = 0;
m = 0;
n = 1;
} else {
System.out.println(p + ":" + number.substring(1, 9));
j = 0;
m = 0;
n = 1;
}
}
}
}
} else {
System.out.println("null data");
}
}
}

分析:

题目分析:刚看这道题是一头雾水,根本不知道讲的是啥,请教了同学很久,才听懂,但是,理解错了意思,导致·只得了十分,但是我想,只要努力写还是能写出来的,

首先,要用到toCharArray把字符串转化为字符数组,然后用substring把字符串提取出来,这样方便提取各个串口,然后分类就行了。

题目集三 --(7-3)

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

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

输入格式:

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

输入样例:

整数输入。例如:

0,0 1,1
 

输出样例:

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

1.4142135623730951
 

输入样例1:

带符号double类型实数输入。例如:

+2,-2.3 0.9,-3.2
 

输出样例1:

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

1.42126704035519
 

输入样例2:

格式非法。例如:

++2,-2.3 0.9,-3.2
 

输出样例2:

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

Wrong Format
 

输入样例3:

点的数量超过两个。例如:

+2,-2.3 0.9,-3.2 +2,-2.3
 

输出样例3:

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

wrong number of points
我的代码

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
String a;
Scanner in = new Scanner(System.in);
a = in.nextLine();
String[] number = a.split(" ");
if (number.length <= 1 || number.length >= 3) {
System.out.print("wrong number of points");
} else {
String[] b1 = number[0].split(",");
String[] b2 = number[1].split(",");
if (number[0].contains("++") == true
|| number[1].contains("++") == true
|| b1.length != 2
|| b2.length != 2) {
System.out.print("Wrong Format");
} else {
double x1 = Double.parseDouble(b1[0]);
double y1 = Double.parseDouble(b1[1]);
double x2 = Double.parseDouble(b2[0]);
double y2 = Double.parseDouble(b2[1]);
double p1 = Math.abs(x1 - x2);
double p2 = Math.abs(y1 - y2);
System.out.print(Math.sqrt(p1 * p1 + p2 * p2));
}
}
}
}

代码分析:

首先用String[] b1 = number[0].split(",");String[] b2 = number[1].split(",");把其分割成两个坐标,再用同样的方法分割一次就行,在进行相应的分析,解析就行。

题目集三 --(7-2)

7-2 点线形系列2-线的计算 (42 分)  

用户输入一组选项和数据,进行与直线有关的计算。选项包括:
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",

输出格式:

见题目描述。

输入样例1:

选项1,两点重合。例如:

1:-2,+5 -2,+5
 

输出样例:

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

points coincide
 

输入样例2:

选项1,斜率无穷大的线。例如:

1:-2,3 -2,+5
 

输出样例:

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

Slope does not exist
 

输入样例3:

选项1,斜率无穷大。例如:

1:-2,3 -2,+5
 

输出样例:

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

Slope does not exist
 

输入样例4:

选项1,符合格式输入,带符号/不带符号数混合。例如:

1:-2.5,3 -2,+5.3
 

输出样例:

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

4.6
 

输入样例5:

选项2,计算第一个点到另外两点连线的垂直距离。例如:

2:0,1 1,0 2,0
 

输出样例:

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

1.0
 

输入样例6:

选项3,判断三个点是否在一条线上。例如:

3:0,1 2,2 5,3
 

输出样例:

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

false
 

输入样例7:

选项4,判断两条线是否平行。例如:

4:0,1 0,2 2,1 3,0 
 

输出样例:

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

false
 

输入样例8:

选项5,判断两条线的交点。例如:

5:0,0 -1,-1 0,2 3,-1
 

输出样例:

在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:

1.0,1.0 true
 

输入样例9:

选项5,判断两条线的交点。但两条线平行例如:

5:0,0 -1,-1 2,3 3,4
 

输出样例:

在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:

is parallel lines,have no intersection point
我的代码是

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
String a;
double p;
Scanner in = new Scanner(System.in);
a = in.nextLine();
String[] b = a.split(":");
switch (b[0]) {
case "1":
String[] c = b[1].split(" ");
if (c.length != 2) {
System.out.println("wrong number of points");
} else {
String[] d1 = c[0].split(",");
String[] d2 = c[1].split(",");
double x1 = Double.parseDouble(d1[0]);
double y1 = Double.parseDouble(d1[1]);
double x2 = Double.parseDouble(d2[0]);
double y2 = Double.parseDouble(d2[1]);
p = (y1 - y2) / (x1 - x2);
if (x1 == x2 && y1 == y2) {
System.out.println("points coincide");
} else {
if (p == Double.MAX_VALUE) {
System.out.println("Slope does not exist");
} else {
System.out.println(p);
}
}
}
break;
case "2":
String[] e = b[1].split(" ");
if (e.length != 3) {
System.out.println("wrong number of points");
} else {
String[] d1 = e[0].split(",");
String[] d2 = e[1].split(",");
String[] d3 = e[2].split(",");
double x1 = Double.parseDouble(d1[0]);
double y1 = Double.parseDouble(d1[1]);
double x2 = Double.parseDouble(d2[0]);
double y2 = Double.parseDouble(d2[1]);
double x3 = Double.parseDouble(d3[0]);
double y3 = Double.parseDouble(d3[1]);
p = (y1 - y2) / (x1 - x2);
if ((x1 == x2 && y1 == y2) || (x1 == x3 && y1 == y3) || (y2 == y3 && x2 == 3)) {
System.out.println("points coincide");
} else {
System.out.println(p);
}
}
break;

}
}
}

题目分析

我觉得本提用对象交互更好,但是我没想到,所以很多测试点不会,但是我想,今后长个记性,用更好的方法解决,其实题目跟题目一挺相似的,基本用到高中的就行了。

题目集三 --(7-3)

 

true false false
 

输入样例6:

选项4,直线与三角形交点的数量等于2,输出数量值以及三角形被分割的两部分面积。例如:

4:1,0 0,2 0,0 0,2 4,0
 

输出样例:

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

2 1.0 3.0
 

输入样例7:

选项4,直线与三角形交点的数量少于两个,只输出数量值。例如:

4:-1,0 1,2 0,1 0,-1 2,0
 

输出样例:

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

1
 

输入样例8:

选项5,用射线法判断点是否在三角形内部。例如:

5:0.5,0.5 0,0 0,2 4,0
 

输出样例:

在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:

in the triangle
 

输入样例9:

选项5,用射线法判断点是否在三角形内部。例如:

5:0,0 -1,-1 2,3 3,4
 

输出样例:

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

outof the triangle
   题目分析
用split把字符分割开,然后用Double.parseDouble把字符变为double类型,这样通过一些事方法实现其要达到的功能。
(3)采坑心得:字符串之间不能直接比较,需要用到equals,但是放在case里的能相比较比如第一次的作业的第六题if (a.equals("01") || a.equals("02") || a.equals("03") || a.equals("20")) ,其次可以用parse来将字符转换为想要的类型。
(4)改进建议:需要跟多的时间来完成这项作业,要完成每个知识点,这样,作业才跟好完成。
(5)总结:解决Java作业是非常非常重要的,需要自己多花时间,不能懒惰。
这篇关于题目集1~3的总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!