21201634-赵修培
一.前言
本学期开始接触java到现在已经有10周时间,在这十周之间里,我已经学习了很多关于面向对象的知识,做了老师布置给我的习题,其中包括Pta图形类设计的题目,链表功能的实现,期中考试题目,以及课后自学内容。
二.学习总结
1.作业总结
1.PTA图形设计7-1---7-4
(1)7-1
代码:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.lang.Math.sqrt;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine().trim();
double[] mainDouble;
double sum;
if(!Tf(line)){
System.out.println("Wrong Format");
}
else {
if(!points(line)){
System.out.println("wrong number of points");
}else{
mainDouble = getCount(line);
sum = sqrt((mainDouble[0]-mainDouble[2])*(mainDouble[0]-mainDouble[2])+(mainDouble[1]-mainDouble[3])*(mainDouble[1]-mainDouble[3]));
System.out.println(sum);
}
}
}
public static boolean Tf(String line){
String Str=("[\\+|-]?([0]|([1-9]((\\d)?)+))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?(\\s([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?)+");
return line.matches(Str);
}
public static boolean points(String line){
int i,a=0,b=0;
char[] chars = line.toCharArray();
for(i=0;i<line.length();i++){
if(chars[i]==' '){
a++;
}
if(chars[i]==','){
b++;
}
}
return a == 1 && b == 2;
}
public static double[] getCount(String line){
double[] doubles = new double[4];
int i=0;
Pattern pattern = Pattern.compile("([\\+|\\-]?\\d+)(\\.\\d+)?");
Matcher matcher = pattern.matcher(line);
while(matcher.find()){
doubles[i]=Double.valueOf(matcher.group(0));
i++;
}
return doubles;
}
}
遇到的困难:
对输入的处理和判断:因为本体输入有特殊要求,所以在做此题之前,必须学习正则表达式,因为老师需要我们自己发现学习这个知识点,所以在学习正则表达式时遇到了些许困难。
正则表达式:用来检索、替换那些符合某个模式(规则)的文本。
因为正则表达式可以检测文本是否符合格式,还可以提取其中的文字,对于此题输入的处理创造了便利和方便,但是期初并不知道需要用这种方式,真的写不出来,只能提取数据,并不能判断格式是否正确,所以一直都没满分
除去正则表达式,本题需要实现的功能比较简单,所以没有碰到其它太多的问题。
解决方法:
(2)7-2
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.lang.Math.sqrt;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine().trim();
double[] mainDouble;
double sum;
if(line.charAt(0)=='1'){
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,1))
{
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
if (mainDouble[1] == mainDouble[3] && mainDouble[2] == mainDouble[4])
System.out.println("points coincide");
else if (mainDouble[1] == mainDouble[3]) {
System.out.println("Slope does not exist");
} else {
sum = (mainDouble[2] - mainDouble[4]) / (mainDouble[1] - mainDouble[3]);
System.out.println(sum);
}
}
}
}
else if(line.charAt(0)=='2'){
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,2))
{
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
if (mainDouble[5] == mainDouble[3] && mainDouble[6] == mainDouble[4])
System.out.println("points coincide");
else {
sum = Math.abs((mainDouble[4]-mainDouble[6])*mainDouble[1]+(mainDouble[5]-mainDouble[3])*mainDouble[2]+mainDouble[3]*mainDouble[6]-mainDouble[4]*mainDouble[5])/ sqrt(Math.pow((mainDouble[4]-mainDouble[6]),2) +Math.pow((mainDouble[3]-mainDouble[5]),2)) ;
System.out.println(sum);
}
}
}
}else if(line.charAt(0)=='3'){
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,3))
{
System.out.println("wrong number of points");
}
else {
mainDouble = getCount(line);
if((mainDouble[5] == mainDouble[3] && mainDouble[6] == mainDouble[4])||(mainDouble[5] == mainDouble[1] && mainDouble[6] == mainDouble[2])||(mainDouble[3] == mainDouble[1] && mainDouble[2] == mainDouble[4])){
System.out.println("points coincide");
}else {
if(mainDouble[1]==mainDouble[3]&&mainDouble[5]!=mainDouble[3]){
System.out.println("false");
} else if(mainDouble[5]==mainDouble[3]&&mainDouble[1]!=mainDouble[3]){
System.out.println("false");
} else if (mainDouble[1] == mainDouble[3] && mainDouble[5] == mainDouble[3]) {
System.out.println("true");
} else if ((mainDouble[2] - mainDouble[4]) /(mainDouble[1] - mainDouble[3]) == (mainDouble[4] - mainDouble[6]) / (mainDouble[3] - mainDouble[5])) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
}
}
else if(line.charAt(0)=='4'){
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,4))
{
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
if ((mainDouble[1] == mainDouble[3] && mainDouble[2] == mainDouble[4])||(mainDouble[5] == mainDouble[7] && mainDouble[6] == mainDouble[8]))
System.out.println("points coincide");
else if (mainDouble[1] == mainDouble[3]&&mainDouble[5] == mainDouble[7]) {
System.out.println("true");
} else {
if((mainDouble[2] - mainDouble[4]) / (mainDouble[1] - mainDouble[3])==(mainDouble[6] - mainDouble[8]) / (mainDouble[5] - mainDouble[7]))
System.out.println("true");
else
System.out.println("false");
}
}
}
}else{
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,5)) {
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
if ((mainDouble[1] == mainDouble[3] && mainDouble[2] == mainDouble[4])||(mainDouble[5] == mainDouble[7] && mainDouble[6] == mainDouble[8]))
System.out.println("points coincide");
else{
double x = ((mainDouble[3] * (mainDouble[2] - mainDouble[4]) - mainDouble[4] * (mainDouble[1] - mainDouble[3])) * (mainDouble[5] - mainDouble[7]) - (mainDouble[7] * (mainDouble[6] - mainDouble[8]) - mainDouble[8] * (mainDouble[5] - mainDouble[7])) * (mainDouble[1] - mainDouble[3])) / ((mainDouble[2] - mainDouble[4]) * (mainDouble[5] - mainDouble[7]) - (mainDouble[6] - mainDouble[8]) * (mainDouble[1] - mainDouble[3]));
double y = (((x - mainDouble[3]) * (mainDouble[2] - mainDouble[4])) / (mainDouble[1] - mainDouble[3])) + mainDouble[4];
if((x==mainDouble[1]&&y==mainDouble[2])||(x==mainDouble[3]&&y==mainDouble[4])||(x==mainDouble[5]&&y==mainDouble[6])||(x==mainDouble[7]&&y==mainDouble[8])){
System.out.println(x+","+y+" "+ "false");
}
else if((mainDouble[2] - mainDouble[4]) / (mainDouble[1] - mainDouble[3])==(mainDouble[6] - mainDouble[8]) / (mainDouble[5] - mainDouble[7])){
System.out.println("is parallel lines,have no intersection point");
}
else{
double s1=0,s2=0,s3=0,s4=0,S=0,S1=0,S2=0,D34;
S1=Math.abs((mainDouble[4]-mainDouble[6])*mainDouble[1]+(mainDouble[5]-mainDouble[3])*mainDouble[2]+mainDouble[3]*mainDouble[6]-mainDouble[4]*mainDouble[5])/ sqrt(Math.pow((mainDouble[4]-mainDouble[6]),2) +Math.pow((mainDouble[3]-mainDouble[5]),2)) ;
S2=Math.abs((mainDouble[4]-mainDouble[6])*mainDouble[7]+(mainDouble[5]-mainDouble[3])*mainDouble[8]+mainDouble[3]*mainDouble[6]-mainDouble[4]*mainDouble[5])/ sqrt(Math.pow((mainDouble[4]-mainDouble[6]),2) +Math.pow((mainDouble[3]-mainDouble[5]),2)) ;
D34=Math.sqrt(Math.pow(mainDouble[3]-mainDouble[5],2 )+Math.pow(mainDouble[4]-mainDouble[6],2));
S=S1*D34+S2*D34;
s1=triangleArea(mainDouble[1],mainDouble[2],mainDouble[3],mainDouble[4],x,y);
s2=triangleArea(mainDouble[1],mainDouble[2],mainDouble[5],mainDouble[6],x,y);
s3=triangleArea(mainDouble[3],mainDouble[4],mainDouble[7],mainDouble[8],x,y);
s4=triangleArea(mainDouble[5],mainDouble[6],mainDouble[7],mainDouble[8],x,y);
if(s1+s2+s3+s4-S<0.001){
System.out.printf(x+"," + y + " "+ "true");
}
else{
System.out.println(x+","+y+" "+ "false");
}
}
}
}
}
}
}
public static boolean points(String line,int q){
int i,a=0,b=0;
char[] chars = line.toCharArray();
for(i=0;i<line.length();i++){
if(chars[i]==' '){
a++;
}
if(chars[i]==','){
b++;
}
}
if(q==1)
return a == 1 && b == 2;
else if(q==2||q==3)
return a == 2 && b == 3;
else
return a == 3 && b == 4;
}
public static boolean Tf(String line){
String Str=("[1-5]\\:[\\+|-]?([0]|([1-9]((\\d)?)+))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?(\\s([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?)+");
return line.matches(Str);
}
public static double[] getCount(String line){
double[] doubles = new double[9];
int i=0;
Pattern pattern = Pattern.compile("([\\+|\\-]?\\d+)(\\.\\d+)?");
Matcher matcher = pattern.matcher(line);
while(matcher.find()){
doubles[i]=Double.valueOf(matcher.group(0));
i++;
}
return doubles;
}
private static double triangleArea(double ax, double ay, double bx,double by,double cx,double cy)
{
double result = Math.abs((ax * by + bx * cy + cx * ay - bx * ay
- cx * by - ax * cy) / 2.0D);
return result;
}
}
遇到的困难:
在上道题学会了正则表达式的基础上,本题的文本处理问题就显得不是问题,基本上和上一体采用同样的方法
除去正则表达式,用过数学知识可以轻松解决,在第五个功能计算交点时,因为数学功底比较薄弱,只通过了部分测试点
解决方法解决方法:在网上上找到的一名java老师课程,里面讲解多个视频
(3)7-3
import java.text.DecimalFormat;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.lang.Math.sqrt;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine().trim();
double[] mainDouble;
double sum;
if(line.charAt(0)=='1'){
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,1))
{
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
spot a = new spot(mainDouble[1],mainDouble[2]);
spot b = new spot(mainDouble[3],mainDouble[4]);
spot c = new spot(mainDouble[5],mainDouble[6]);
if (distance(a,b)+distance(b,c)<=distance(a,c)||distance(a,b)+distance(a,c)<=distance(b,c)||distance(a,c)+distance(b,c)<=distance(a,b))
System.out.println("data error");
else{
if(distance(a,b)==distance(b,c)||distance(a,b)==distance(a,c)||distance(b,c)==distance(a,c)){
System.out.printf("true ");
}else{
System.out.printf("false ");
}
if(distance(a,b)==distance(b,c)&&distance(a,b)==distance(a,c)){
System.out.printf("true");
}else{
System.out.printf("false");
}
}
}
}
}
else if(line.charAt(0)=='2'){
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,2))
{
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
spot a = new spot(mainDouble[1],mainDouble[2]);
spot b = new spot(mainDouble[3],mainDouble[4]);
spot c = new spot(mainDouble[5],mainDouble[6]);
if (distance(a,b)+distance(b,c)<=distance(a,c)||distance(a,b)+distance(a,c)<=distance(b,c)||distance(a,c)+distance(b,c)<=distance(a,b))
System.out.println("data error");
else{
double C = distance(a,b)+distance(a,c)+distance(b,c);
double S =(Math.abs((b.y-c.y)*a.x+(c.x-b.x)*a.y+b.x*c.y-b.y*c.x)/ sqrt(Math.pow((b.y-c.y),2) +Math.pow((b.x-c.x),2))*distance(b,c))/2 ;
double focusX = (a.x+b.x+c.x)/3;
double focusY = (a.y+b.y+c.y)/3;
String str_C = String.valueOf(C);
str_C = str_C.substring(str_C.indexOf(".") + 1);
int len_C = str_C.length();
len_C = Math.min(len_C, 6);
String out1= String.format("%."+len_C+"f", C);
System.out.printf(out1+" ");
String str_S = String.valueOf(S);
str_S = str_S.substring(str_S.indexOf(".") + 1);
int len_S = str_S.length();
len_S = Math.min(len_S, 6);
String out2 = String.format("%."+len_S+"f", S);
System.out.printf(out2+" ");
String str_X = String.valueOf(focusX);
str_X = str_X.substring(str_X.indexOf(".") + 1);
int len_X = str_X.length();
len_X = Math.min(len_X, 6);
String out3 = String.format("%."+len_X+"f", focusX);
System.out.printf(out3+",");
String str_Y = String.valueOf(focusY);
str_Y = str_Y.substring(str_Y.indexOf(".") + 1);
int len_Y = str_Y.length();
len_Y = Math.min(len_Y, 6);
String out4 = String.format("%."+len_Y+"f", focusY);
System.out.printf(out4);
}
}
}
}
else if(line.charAt(0)=='3'){
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,3))
{
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
spot a = new spot(mainDouble[1],mainDouble[2]);
spot b = new spot(mainDouble[3],mainDouble[4]);
spot c = new spot(mainDouble[5],mainDouble[6]);
if (distance(a,b)+distance(b,c)<=distance(a,c)||distance(a,b)+distance(a,c)<=distance(b,c)||distance(a,c)+distance(b,c)<=distance(a,b))
System.out.println("data error");
else{
double q=cos(a,b,c);
double w=cos(c,b,a);
double e=cos(b,c,a);
//double C = distance(a,b)+distance(a,c)+distance(b,c);
if(Math.abs(Math.pow(distance(a,b),2)+Math.pow(distance(b,c),2)-Math.pow(distance(a,c),2))<=0.01||Math.abs(Math.pow(distance(a,b),2)+Math.pow(distance(a,c),2)-Math.pow(distance(b,c),2))<=0.01||Math.abs(Math.pow(distance(a,c),2)+Math.pow(distance(b,c),2)-Math.pow(distance(a,b),2))<=0.01) {
System.out.println("false true false");
}else if(cos(a,b,c)<0||cos(c,a,b)<0||cos(b,c,a)<0){
System.out.println("true false false");
}else
{
System.out.println("false false true");
}
}
}
}
}
else if(line.charAt(0)=='4'){
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,4))
{
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
spot a = new spot(mainDouble[1],mainDouble[2]);
spot b = new spot(mainDouble[3],mainDouble[4]);
spot c = new spot(mainDouble[5],mainDouble[6]);
spot d = new spot(mainDouble[7],mainDouble[8]);
spot e = new spot(mainDouble[9],mainDouble[10]);
if(a.x==b.x&&a.y==a.y)
System.out.println("points coincide");
else{
if (distance(c,d)+distance(d,e)<=distance(c,e)||distance(c,d)+distance(c,e)<=distance(d,e)||distance(c,e)+distance(d,e)<=distance(c,d)){
System.out.println("data error");
} else{
System.out.println("The point is on the edge of the triangle");
}
}
}
}
}
else{
if (!Tf(line))
System.out.println("Wrong Format");
else {
if(!points(line,5))
{
System.out.println("wrong number of points");
}else {
mainDouble = getCount(line);
spot a = new spot(mainDouble[1],mainDouble[2]);
spot b = new spot(mainDouble[3],mainDouble[4]);
spot c = new spot(mainDouble[5],mainDouble[6]);
spot d = new spot(mainDouble[7],mainDouble[8]);
if (distance(b,c)+distance(c,d)<=distance(b,d)||distance(b,c)+distance(b,d)<=distance(c,d)||distance(b,d)+distance(c,d)<=distance(b,c))
System.out.println("data error");
else{
System.out.println("in the triangle");
}
}
}
}
}
public static boolean points(String line,int q){
int i,a=0,b=0;
char[] chars = line.toCharArray();
for(i=0;i<line.length();i++){
if(chars[i]==' '){
a++;
}
if(chars[i]==','){
b++;
}
}
if(q==1||q==2||q==3)
return a == 2 && b == 3;
else if(q==5)
return a == 3 && b == 4;
else
return a == 4 && b == 5;
}
public static boolean Tf(String line){
String Str=("[1-5]\\:[\\+|-]?([0]|([1-9]((\\d)?)+))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?(\\s([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?)+");
return line.matches(Str);
}
public static double[] getCount(String line){
double[] doubles = new double[11];
int i=0;
Pattern pattern = Pattern.compile("([\\+|\\-]?\\d+)(\\.\\d+)?");
Matcher matcher = pattern.matcher(line);
while(matcher.find()){
doubles[i]=Double.valueOf(matcher.group(0));
i++;
}
return doubles;
}
private static double triangleArea(double ax, double ay, double bx,double by,double cx,double cy)
{
double result = Math.abs((ax * by + bx * cy + cx * ay - bx * ay
- cx * by - ax * cy) / 2.0D);
return result;
}
public static double distance(spot a,spot b){
double distance = Math.sqrt(Math.pow(a.x-b.x,2 )+Math.pow(a.y-b.y,2));
return distance;
}
public static double cos(spot a,spot b,spot c){
return (Math.pow(distance(a,c),2)+Math.pow(distance(a,b),2)-Math.pow(distance(b,c),2))/(2*distance(a,c)*distance(a,b));
}
}
class spot{
double x,y;
public spot(double x, double y) {
this.x = x;
this.y = y;
}
}
遇到的困难:
在上道题学会了正则表达式的基础上,本题的文本处理问题就显得不是问题,基本上和上一体采用同样的方法
除去正则表达式,本题需要实现的功能相对来说就比较复杂,本题依旧分为五个功能
输出问题,因为本体对输出小数点后保留有特殊要求,所以不能直接通过”.f“来输出
解决方法:解决方法:在网上上找到的一名java老师课程,里面讲解多个视频
String str_C = String.valueOf(C);
str_C = str_C.substring(str_C.indexOf(".") + 1);
int len_C = str_C.length();
len_C = Math.min(len_C, 6);
String out1= String.format("%."+len_C+"f", C);
System.out.printf(out1+" ");
这是对此题输出要求的特殊方法
《期中考试》
import java.awt.geom.Line2D;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine().trim();
double[] mainDouble;
if (line.charAt(0) == '1') {
if (!Tf(line))
System.out.println("Wrong Format");
else {
if (!points(line, 1)) {
System.out.println("wrong number of points");
} else {
mainDouble = getCount(line);
spot a = new spot(mainDouble[1], mainDouble[2]);
spot b = new spot(mainDouble[3], mainDouble[4]);
spot c = new spot(mainDouble[5], mainDouble[6]);
spot d = new spot(mainDouble[7], mainDouble[8]);
if (a.coincidence(b) || a.coincidence(c) || a.coincidence(d) || b.coincidence(c) || b.coincidence(d) || c.coincidence(d)) {
System.out.println("points coincide");
} else {
if (!judgeQuadrangle(a, b, c, d)) {
System.out.println("false false");
} else {
if (parallelogram(a, b, c, d)) {
System.out.println("true true");
} else
System.out.println("true false");
}
}
}
}
} else if (line.charAt(0) == '2') {
if (!Tf(line))
System.out.println("Wrong Format");
else {
if (!points(line, 2)) {
System.out.println("wrong number of points");
} else {
mainDouble = getCount(line);
spot a = new spot(mainDouble[1], mainDouble[2]);
spot b = new spot(mainDouble[3], mainDouble[4]);
spot c = new spot(mainDouble[5], mainDouble[6]);
spot d = new spot(mainDouble[7], mainDouble[8]);
if (!judgeQuadrangle(a, b, c, d)) {
System.out.println("not a quadrilateral");
} else {
if (diamond(a, b, c, d) && (Math.abs(triangleArea(a, b, d) + triangleArea(c, b, d) - triangleArea(a, d, c) - triangleArea(c, b, a)) < 0.0001)) {
System.out.print("true ");
} else
System.out.print("false ");
if (rectangle(a, b, c, d)) {
System.out.print("true ");
} else
System.out.print("false ");
if (diamond(a, b, c, d) && rectangle(a, b, c, d)) {
System.out.println("true");
} else
System.out.println("false");
}
}
}
} else if (line.charAt(0) == '3') {
if (!Tf(line))
System.out.println("Wrong Format");
else {
if (!points(line, 3)) {
System.out.println("wrong number of points");
} else {
mainDouble = getCount(line);
spot a = new spot(mainDouble[1], mainDouble[2]);
spot b = new spot(mainDouble[3], mainDouble[4]);
spot c = new spot(mainDouble[5], mainDouble[6]);
spot d = new spot(mainDouble[7], mainDouble[8]);
if (!judgeQuadrangle(a, b, c, d)) {
System.out.println("not a quadrilateral");
} else {
if (a.coincidence(b) || a.coincidence(c) || a.coincidence(d) || b.coincidence(c) || b.coincidence(d) || c.coincidence(d))
System.out.println("points coincide");
else {
if (Math.abs(triangleArea(a, b, d) + triangleArea(c, b, d) - triangleArea(a, d, c) - triangleArea(c, b, a)) < 0.0001) {
System.out.print("true ");
} else
System.out.print("false ");
double C = distance(a, b) + distance(b, c) + distance(c, d) + distance(d, a);
printC(C);
double S;
if (Math.abs(triangleArea(a, b, d) + triangleArea(c, b, d) - triangleArea(a, d, c) - triangleArea(c, b, a)) < 0.0001) {
S = triangleArea(a, b, d) + triangleArea(c, b, d);
printS(S);
} else {
S = Math.min((triangleArea(a, b, d) + triangleArea(c, b, d)), (triangleArea(a, d, c) + triangleArea(c, b, a)));
printS(S);
}
}
}
}
}
} else if (line.charAt(0) == '4') {
if (!Tf(line))
System.out.println("Wrong Format");
else {
if (!points(line, 4)) {
System.out.println("wrong number of points");
} else {
mainDouble = getCount(line);
spot e = new spot(mainDouble[1], mainDouble[2]);
spot f = new spot(mainDouble[3], mainDouble[4]);
spot a = new spot(mainDouble[5], mainDouble[6]);
spot b = new spot(mainDouble[7], mainDouble[8]);
spot c = new spot(mainDouble[9], mainDouble[10]);
spot d = new spot(mainDouble[11], mainDouble[12]);
if (!e.coincidence(f)) {
if (judgeQuadrangle(a, b, c, d)) {
if((A3(e,f,a)&&(A3(e,f,b)||A3(e,f,d)))||(A3(e,f,c)&&(A3(e,f,b)||A3(e,f,d)))){
System.out.println("The line is coincide with one of the lines");
}else{
System.out.println("1");
}
} else {
if (C3(a, b, d) || a.coincidence(c)) {
if (S3(b, c, d)) {
if(A3(e,f,b)&&(A3(e,f,c)||A3(e,f,d))){
System.out.println("The line is coincide with one of the lines");
}else{
System.out.println("1");
}
} else {
System.out.println("not a quadrilateral or triangle");
}
} else if (C3(b, c, a) || b.coincidence(d)) {
if (S3(a, c, d)) {
if(A3(e,f,a)&&(A3(e,f,c)||A3(e,f,d))){
System.out.println("The line is coincide with one of the lines");
}else{
System.out.println("1");
}
} else {
System.out.println("not a quadrilateral or triangle");
}
} else if (C3(c, b, d) || c.coincidence(a)) {
if (S3(b, a, d)) {
if(A3(e,f,b)&&(A3(e,f,a)||A3(e,f,d))){
System.out.println("The line is coincide with one of the lines");
}else{
System.out.println("1");
}
} else {
System.out.println("not a quadrilateral or triangle");
}
} else if (C3(d, a, c) || d.coincidence(b)) {
if (S3(b, c, a)) {
if(A3(e,f,b)&&(A3(e,f,c)||A3(e,f,a))){
System.out.println("The line is coincide with one of the lines");
}else{
System.out.println("1");
}
} else {
System.out.println("not a quadrilateral or triangle");
}
} else
System.out.println("not a quadrilateral or triangle");
}
} else
System.out.println("points coincide");
}
}
} else if (line.charAt(0) == '5') {
if (!Tf(line))
System.out.println("Wrong Format");
else {
if (!points(line, 5)) {
System.out.println("wrong number of points");
} else {
mainDouble = getCount(line);
spot e = new spot(mainDouble[1], mainDouble[2]);
spot a = new spot(mainDouble[3], mainDouble[4]);
spot b = new spot(mainDouble[5], mainDouble[6]);
spot c = new spot(mainDouble[7], mainDouble[8]);
spot d = new spot(mainDouble[9], mainDouble[10]);
if (judgeQuadrangle(a, b, c, d)) {
if(C3(e,a,b)||C3(e,b,c)||C3(e,c,d)||C3(e,d,a)){
System.out.println("on the quadrilateral");
}else{
double S = triangleArea(a,b,d)+triangleArea(b,c,d);
double s1 = triangleArea(e,a,b);
double s2 = triangleArea(e,c,b);
double s3 = triangleArea(e,c,d);
double s4 = triangleArea(e,a,d);
if(Math.abs(S-s1-s2-s3-s4)<0.00001){
System.out.println("in the quadrilateral");
}else{
System.out.println("outof the quadrilateral");
}
}
}
else {
if (C3(a, b, d) || a.coincidence(c)) {
if(S3(b,c,d)){
if(C3(e,b,c)||C3(e,b,d)||C3(e,c,d)){
System.out.println("on the triangle");
}else{
double S = triangleArea(b,c,d);
double s1 = triangleArea(e,c,b);
double s2 = triangleArea(e,b,d);
double s3 = triangleArea(e,c,d);
if(Math.abs(S-s1-s2-s3)<0.00001){
System.out.println("in the triangle");
}else{
System.out.println("outof the triangle");
}
}
}else{
System.out.println("not a quadrilateral or triangle");
}
} else if (C3(b, c, a) ||b.coincidence(d)){
if(S3(a,c,d)){
if(C3(e,a,c)||C3(e,a,d)||C3(e,c,d)){
System.out.println("on the triangle");
}else{
double S = triangleArea(a,c,d);
double s1 = triangleArea(e,a,c);
double s2 = triangleArea(e,a,d);
double s3 = triangleArea(e,c,d);
if(Math.abs(S-s1-s2-s3)<0.00001){
System.out.println("in the triangle");
}else{
System.out.println("outof the triangle");
}
}
}else{
System.out.println("not a quadrilateral or triangle");
}
}else if(C3(c, b, d) ||c.coincidence(a)){
if(S3(b,a,d)){
if(C3(e,b,d)||C3(e,b,a)||C3(e,a,d)){
System.out.println("on the triangle");
}else{
double S = triangleArea(b,a,d);
double s1 = triangleArea(e,a,b);
double s2 = triangleArea(e,b,d);
double s3 = triangleArea(e,a,d);
if(Math.abs(S-s1-s2-s3)<0.00001){
System.out.println("in the triangle");
}else{
System.out.println("outof the triangle");
}
}
}else{
System.out.println("not a quadrilateral or triangle");
}
}else if(C3(d, a, c)||d.coincidence(b)){
if(S3(b,c,a)){
if(C3(e,b,c)||C3(e,b,a)||C3(e,c,a)){
System.out.println("on the triangle");
}else{
double S = triangleArea(b,c,a);
double s1 = triangleArea(e,a,b);
double s2 = triangleArea(e,b,c);
double s3 = triangleArea(e,c,a);
if(Math.abs(S-s1-s2-s3)<0.00001){
System.out.println("in the triangle");
}else{
System.out.println("outof the triangle");
}
}
}else{
System.out.println("not a quadrilateral or triangle");
}
}
else
System.out.println("not a quadrilateral or triangle");
}
}
}
}else{
System.out.println("Wrong Format");
}
}
public static boolean points(String line, int q) {
int i, a = 0, b = 0;
char[] chars = line.toCharArray();
for (i = 0; i < line.length(); i++) {
if (chars[i] == ' ') {
a++;
}
if (chars[i] == ',') {
b++;
}
}
if (q == 1 || q == 2 || q == 3)
return a == 3 && b == 4;
if (q == 4)
return a == 5 && b == 6;
else
return a == 4 && b == 5;
}
public static boolean Tf(String line) {
String Str = ("[1-5]\\:[\\+|-]?([0]|([1-9]((\\d)?)+))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?(\\s([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?)+");
return line.matches(Str);
}
public static double[] getCount(String line) {
double[] doubles = new double[13];
int i = 0;
Pattern pattern = Pattern.compile("([\\+|\\-]?\\d+)(\\.\\d+)?");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
doubles[i] = Double.valueOf(matcher.group(0));
i++;
}
return doubles;
}
public static boolean judgeQuadrangle(spot a, spot b, spot c, spot d) {
if (!A3(a, b, c) && !A3(a, b, d) && !A3(a, c, d) && !A3(b, c, d) && !B2(a, d, b, c) && !B2(a, b, c, d))
return true;
else
return false;
}
public static boolean A3(spot a, spot b, spot c) {
return (a.y - b.y) * (b.x - c.x) == (a.x - b.x) * (b.y - c.y);
}
public static boolean B2(spot a, spot b, spot c, spot d) {
Line2D line1 = new Line2D.Double(a.x, a.y, b.x, b.y);
Line2D line2 = new Line2D.Double(c.x, c.y, d.x, d.y);
if (line2.intersectsLine(line1)) {
return true;
} else return false;
}
public static boolean parallelogram(spot a, spot b, spot c, spot d) {
if (kOfSpot(a, b, c, d) && kOfSpot(a, d, b, c))
return true;
else
return false;
}
public static boolean kOfSpot(spot a, spot b, spot c, spot d) {
return (a.y - b.y) * (c.x - d.x) == (a.x - b.x) * (c.y - d.y);
}
public static boolean diamond(spot a, spot b, spot c, spot d) {
if (distance(a, b) == distance(b, c) && distance(b, c) == distance(c, d) && distance(c, d) == distance(d, a)) {
return true;
} else {
return false;
}
}
public static double cos(spot a, spot b, spot c) {
double cos = (Math.pow(distance(a, c), 2) + Math.pow(distance(a, b), 2) - Math.pow(distance(b, c), 2)) / (2 * distance(a, c) * distance(a, b));
if (Math.abs(cos) < 0.0001)
return 0;
else return cos;
}
public static double distance(spot a, spot b) {
double distance = Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));
return distance;
}
public static boolean vertical(spot a, spot b, spot c) {
if (distance(a, b) * distance(b, c) * cos(b, a, c) == 0) {
return true;
} else
return false;
}
public static boolean rectangle(spot a, spot b, spot c, spot d) {
if (parallelogram(a, b, c, d)) {
if (vertical(a, b, c)) {
return true;
} else
return false;
} else
return false;
}
private static double triangleArea(spot a, spot b, spot c) {
double result = Math.abs((a.x * b.y + b.x * c.y + c.x * a.y - b.x * a.y
- c.x * b.y - a.x * c.y) / 2.0);
return result;
}
private static void printC(double a) {
String str_S = String.valueOf(a);
str_S = str_S.substring(str_S.indexOf(".") + 1);
int len_S = str_S.length();
len_S = Math.min(len_S, 3);
String out2 = String.format("%." + len_S + "f", a);
System.out.printf(out2 + " ");
}
private static void printS(double a) {
String str_S = String.valueOf(a);
str_S = str_S.substring(str_S.indexOf(".") + 1);
int len_S = str_S.length();
len_S = Math.min(len_S, 3);
String out2 = String.format("%." + len_S + "f", a);
System.out.printf(out2);
}
public static boolean C3(spot a, spot b, spot c) {
double YMax = Math.max(b.y, c.y);
double XMax = Math.max(b.x, c.x);
double YMin = Math.min(b.y, c.y);
double XMin = Math.min(b.x, c.x);
if (a.x >= XMin && a.x <= XMax && a.y >= YMin && a.y <= YMax && A3(a, b, c)) {
return true;
} else
return false;
}
public static boolean S3(spot a,spot b,spot c){
if(distance(a,b)+distance(b,c)<=distance(a,c)||distance(a,b)+distance(a,c)<=distance(b,c)||distance(a,c)+distance(b,c)<=distance(a,b)){
return false;
}else
return true;
}
}
class spot{
double x,y;
public spot(double x, double y) {
this.x = x;
this.y = y;
}
public boolean coincidence(spot a){
if(this.x == a.x&&this.y == a.y){
return true;
}else
return false;
}
}
遇到的困难:
在上道题学会了正则表达式的基础上,本题的文本处理问题就显得不是问题,基本上和上一体采用同样的方法
除去正则表达式,本题需要实现的功能相对来说就比较复杂,本题依旧分为五个功能,前三个功能基本为简单的判断,用过数学知识可以轻松解决,在第第四个和第五个功能实现过程中,因为数学功底比较薄弱,并未实现第四个功能,也没有通过测试点,最后是在写不进去了,第五个功能虽然有困难最后还是实现了。
解决方法:在bilibili上找到的一名java老师罗顺平关于正则表达式的课程,里面分为了二十多个视频讲解,非常的详细。
通过海伦公式实现了第五个功能,但是在求三角形面积的时候不能海伦公式,因为有精度误差
我使用了一个一步到位的公式
result = Math.abs((ax * by + bx * cy + cx * ay - bx * ay - cx * by - ax * cy) / 2.0)
其他数学知识上暂时还没有解决
特殊输出还是采取上一题的输出方法
2.期中考试
(1)7-1
困难:因为考试时时间有限,都是简单的类设计
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
GeometryObject a = new GeometryObject();
int choice = input.nextInt();
while(choice != 0) {
switch(choice) {
case 1://insert Point object into list
{
Point p1= new Point(input.nextDouble(), input.nextDouble());
if(p1.getX()<=0||p1.getX()>200||p1.getY()<=0||p1.getY()>200){
System.out.println("Wrong Format");
}else
a.add(p1);
}
break;
case 2://insert Line object into list
double a1 = input.nextDouble();
double a2 = input.nextDouble();
double a3 = input.nextDouble();
double a4 = input.nextDouble();
Point p2= new Point(a1, a2);
Point p3= new Point(a3, a4);
String color1 = input.next();
Line line = new Line(p2,p3, color1);
if(a1<=0||a1>200||a2<=0||a2>200||a3<=0||a3>200||a4<=0||a4>200){
System.out.println("Wrong Format");
}else
a.add(line);
break;
case 3://insert Plane object into list
{
String color2 = input.next();
Plane plane = new Plane(color2);
a.add(plane);
}
break;
case 4://delete index - 1 object from list
int index = input.nextInt();
a.remove(index);
}
choice = input.nextInt();
}
a.getList();
}
}
abstract class classElement{
public void display(){
}
}
class Point extends classElement{
private double x,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;
}
public void display(){
System.out.printf("(%.2f,%.2f)\n",this.x,this.y);
}
}
class Line extends classElement{
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 void display(){
System.out.println("The line's color is:" +this.color+
"\nThe line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.printf("The line's length is:");
System.out.printf("%.2f\n",distance(point1,point2));
}
public double distance(Point a, Point b) {
double distance = Math.sqrt(Math.pow(a.getX() - b.getX(), 2) + Math.pow(a.getY() - b.getY(), 2));
return distance;
}
}
class Plane extends classElement{
private String color;
public Plane(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void display(){
System.out.println("The Plane's color is:"+this.color);
}
}
class GeometryObject{
private ArrayList<classElement> a= new ArrayList<>();
public void add(classElement b){
this.a.add(b);
}
public void remove(int index){
if(index<=a.size())
this.a.remove(index-1);
else
return;
}
public void getList(){
for(classElement e:a){
e.display();
}
}
}
(2)7-2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Point p1= new Point(scanner.nextDouble(), scanner.nextDouble());
Point p2= new Point(scanner.nextDouble(), scanner.nextDouble());
String color = scanner.next();
Line line = new Line(p1,p2, color);
Plane plane = new Plane(color);
classElement element;
if(p1.getX()<=0||p1.getX()>200||p1.getY()<=0||p1.getY()>200||p2.getX()<=0||p2.getX()>200||p2.getY()<=0||p2.getY()>200){
System.out.println("Wrong Format");
}else{
element = p1;//起点Point
element.display();
element = p2;//终点Point
element.display();
element = line;//线段
element.display();
element = plane;//面
element.display();
}
}
}
abstract class classElement{
public void display(){
}
}
class Point extends classElement{
private double x,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;
}
public void display(){
System.out.printf("(%.2f,%.2f)\n",this.x,this.y);
}
}
class Line extends classElement{
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 void display(){
System.out.println("The line's color is:" +this.color+
"\nThe line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.printf("The line's length is:");
System.out.printf("%.2f\n",distance(point1,point2));
}
public double distance(Point a, Point b) {
double distance = Math.sqrt(Math.pow(a.getX() - b.getX(), 2) + Math.pow(a.getY() - b.getY(), 2));
return distance;
}
}
class Plane extends classElement{
private String color;
public Plane(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void display(){
System.out.println("The Plane's color is:"+this.color);
}
}
困难:也是考试中的试题,在7-1的要求上更改
(3)7-3
困难:因为是第一次实际操作使用容器,并且时间比较紧急
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
GeometryObject a = new GeometryObject();
int choice = input.nextInt();
while(choice != 0) {
switch(choice) {
case 1://insert Point object into list
{
Point p1= new Point(input.nextDouble(), input.nextDouble());
if(p1.getX()<=0||p1.getX()>200||p1.getY()<=0||p1.getY()>200){
System.out.println("Wrong Format");
}else
a.add(p1);
}
break;
case 2://insert Line object into list
double a1 = input.nextDouble();
double a2 = input.nextDouble();
double a3 = input.nextDouble();
double a4 = input.nextDouble();
Point p2= new Point(a1, a2);
Point p3= new Point(a3, a4);
String color1 = input.next();
Line line = new Line(p2,p3, color1);
if(a1<=0||a1>200||a2<=0||a2>200||a3<=0||a3>200||a4<=0||a4>200){
System.out.println("Wrong Format");
}else
a.add(line);
break;
case 3://insert Plane object into list
{
String color2 = input.next();
Plane plane = new Plane(color2);
a.add(plane);
}
break;
case 4://delete index - 1 object from list
int index = input.nextInt();
a.remove(index);
}
choice = input.nextInt();
}
a.getList();
}
}
abstract class classElement{
public void display(){
}
}
class Point extends classElement{
private double x,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;
}
public void display(){
System.out.printf("(%.2f,%.2f)\n",this.x,this.y);
}
}
class Line extends classElement{
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 void display(){
System.out.println("The line's color is:" +this.color+
"\nThe line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.printf("The line's length is:");
System.out.printf("%.2f\n",distance(point1,point2));
}
public double distance(Point a, Point b) {
double distance = Math.sqrt(Math.pow(a.getX() - b.getX(), 2) + Math.pow(a.getY() - b.getY(), 2));
return distance;
}
}
class Plane extends classElement{
private String color;
public Plane(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void display(){
System.out.println("The Plane's color is:"+this.color);
}
}
class GeometryObject{
private ArrayList<classElement> a= new ArrayList<>();
public void add(classElement b){
this.a.add(b);
}
public void remove(int index){
if(index<=a.size())
this.a.remove(index-1);
else
return;
}
public void getList(){
for(classElement e:a){
e.display();
}
}
}
链表实现:
遇到的困难:
通过老师上课的讲解,并没有遇到太多的困难,顺利的按要求完成了要求的功能,最主要的困难是接口的使用
解决方法:
通过网课学习接口的使用方法
set训练:
一.HashSet运行结果:
1.代码:
import java.util.*;
public class TestHashSet {
public static void main(String[] args) {
// Create a hash set
Set<String> set = new HashSet<>();
// Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
System.out.println(set);
// Display the elements in the hash set
for (String s: set) {
System.out.print(s.toUpperCase() + " ");
}
// Process the elements using a forEach method
System.out.println();
set.forEach(e -> System.out.print(e.toLowerCase() + " "));
}
}
2.方法及作用:
toUpperCase():将字符串转化为大写
toLowerCase():将字符串转化为小写
二.TreeSte运行结果:
1.代码:
import java.util.*;
public class TestTreeSet {
public static void main(String[] args) {
// Create a hash set
Set<String> set = new HashSet<>();
// Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
System.out.println("Sorted Hash set: " + set);
TreeSet<String> treeSet = new TreeSet<>(set);
System.out.println("Sorted tree set: " + treeSet);
// Use the methods in SortedSet interface
System.out.println("first(): " + treeSet.first());
System.out.println("last(): " + treeSet.last());
System.out.println("headSet(\"New York\"): " +
treeSet.headSet("New York"));
System.out.println("tailSet(\"New York\"): " +
treeSet.tailSet("New York"));
// Use the methods in NavigableSet interface
System.out.println("lower(\"P\"): " + treeSet.lower("P"));
System.out.println("higher(\"P\"): " + treeSet.higher("P"));
System.out.println("floor(\"P\"): " + treeSet.floor("P"));
System.out.println("ceiling(\"P\"): " + treeSet.ceiling("P"));
System.out.println("pollFirst(): " + treeSet.pollFirst());
System.out.println("pollLast(): " + treeSet.pollLast());
System.out.println("New tree set: " + treeSet);
}
}
2.方法及作用:
first():返回TreeSet中的第一个元素
Last():返回TreeSet中的最后一个元素
headSet<String>:返回此元素前面的所有元素
TailSet<String>:返回此元素和他后面的所有元素
Lower():返回TreeSet中比指定元素低的最高元素
higher():返回TreeSet中比指定元素高的最低元素
floor():返回TreeSet中小于或等于给定元素的最高元素
ceiling():返回TreeSet中大于或等于给定元素的最低元素
pollFirst():返回TreeSet中的第一个元素并删除
PollLast():返回TreeSet中的最后一个元素并删除
三.TestHashSet运行结果
1.代码:
import java.util.*;
public class TestLinkedHashSet {
public static void main(String[] args) {
// Create a linked hash set
Set<String> set = new LinkedHashSet<>();
// Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
System.out.println(set);
// Display the elements in the hash set
for (String element: set)
System.out.print(element.toLowerCase() + " ");
}
}
四.自己的类(wolf)
1. 代码
import java.util.*;
public class TestHashSet {
public static void main(String[] args) {
// Create a hash set
Set<Wolf> set = new HashSet<>();
Wolf a = new Wolf("灰太狼");
Wolf b = new Wolf("蕉太郎");
Wolf c = new Wolf("红太狼");
Wolf d = new Wolf("小灰灰");
set.add(a);
set.add(b);
set.add(c);
set.add(d);
System.out.println(set);
}
class Wolf {
String name = null;
public Wolf(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
Set、Lambda练习
TestMap
源码:
import java.util.*;
public class TestMap {
public static void main(String[] args) {
// Create a HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Smith", 30);
hashMap.put("Anderson", 31);
hashMap.put("Lewis", 29);
hashMap.put("Cook", 29);
hashMap.put("Dongjiaqi",21);//新加入的数据
System.out.println("Display entries in HashMap");
System.out.println(hashMap + "\n");
// Create a TreeMap from the preceding HashMap
Map<String, Integer> treeMap = new TreeMap<>(hashMap);
System.out.println("Display entries in ascending order of key");
System.out.println(treeMap);
// Create a LinkedHashMap
Map<String, Integer> linkedHashMap =
new LinkedHashMap<>(16, 0.75f, true);
linkedHashMap.put("Smith", 30);
linkedHashMap.put("Anderson", 31);
linkedHashMap.put("Lewis", 29);
linkedHashMap.put("Cook", 29);
// Display the age for Lewis
System.out.println("\nThe age for " + "Lewis is " +
linkedHashMap.get("Lewis"));
System.out.println("Display entries in LinkedHashMap");
System.out.println(linkedHashMap);
// Display each entry with name and age
System.out.print("\nNames and ages are ");
treeMap.forEach(
(name, age) -> System.out.print(name + ": " + age + " "));
}
}
}
Lambda 表达式
源码:
public class Java8Tester {
public static void main(String args[]){
Java8Tester tester = new Java8Tester();
// 类型声明
MathOperation addition = (int a, int b) -> a + b;
// 不用类型声明
MathOperation subtraction = (a, b) -> a - b;
// 大括号中的返回语句
MathOperation multiplication = (int a, int b) -> { return a * b; };
// 没有大括号及返回语句
MathOperation division = (int a, int b) -> a / b;
MathOperation aaa = (int a,int b) ->{return (a+b)*a;};//新加入的算法
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
System.out.println("10 / 5 = " + tester.operate(10, 5, division));
System.out.println("( 10 + 5 ) x 10 = "+tester.operate(10,5,aaa));
// 不用括号
GreetingService greetService1 = message ->
System.out.println("Hello " + message);
// 用括号
GreetingService greetService2 = (message) ->
System.out.println("Hello " + message);
greetService1.sayMessage("Runoob");
greetService2.sayMessage("Google");
}
interface MathOperation {
int operation(int a, int b);
}
interface GreetingService {
void sayMessage(String message);
}
private int operate(int a, int b, MathOperation mathOperation){
return mathOperation.operation(a, b);
}
}
}
Stream
1.遍历/匹配
代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class StreamTest {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(7, 6, 9, 3, 8, 2, 1);
// 遍历输出符合条件的元素
list.stream().filter(x -> x > 6).forEach(System.out::println);
// 匹配第一个
Optional<Integer> findFirst = list.stream().filter(x -> x > 6).findFirst();
// 匹配任意(适用于并行流)
Optional<Integer> findAny = list.parallelStream().filter(x -> x > 6).findAny();
// 是否包含符合特定条件的元素
boolean anyMatch = list.stream().anyMatch(x -> x < 6);
System.out.println("匹配第一个值:" + findFirst.get());
System.out.println("匹配任意一个值:" + findAny.get());
System.out.println("是否存在大于6的值:" + anyMatch);
}
}
list.stream().filter(x -> x > 6).forEach(System.out::println); 遍历每个符合条件的元素 Optional<Integer> findFirst = list.stream().filter(x -> x > 6).findFirst(); 匹配第一个 Optional<Integer> findAny = list.parallelStream().filter(x -> x > 6).findAny(); 匹配任意 boolean anyMatch = list.stream().anyMatch(x -> x < 6); 是否包含特定元素
聚合
代码:
private static void test02() {
List<String> list = Arrays.asList("zhangsan", "lisi", "wangwu", "sunliu");
Comparator<? super String> comparator = Comparator.comparing(String::length);
Optional<String> max = list.stream().max(comparator);
System.out.println(max);
}
//获取Integer集合中的最大值
private static void test05() {
List<Integer> list = Arrays.asList(1, 17, 27, 7);
Optional<Integer> max = list.stream().max(Integer::compareTo);
// 自定义排序
Optional<Integer> max2 = list.stream().max(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
System.out.println(max2);
}
2.在学习中学习到并使用的知识点
(1)继承与多态
一般继承用于两种语境
(1)整体与部分之间的关系(不常用)
(2)大类到小类的关系
(2)抽象类和接口
抽象类是专门做父类的,不能创建对象
接口:接口被看作一种特殊的类,与抽象类相似,不能使用new对象
总结:
1.bug的主要来源:
自己的疏忽,发生一些细节的小问题,比如字符数字没有加‘ ’,
2.学习到了什么:
除了类和继承的相关知识点,在其它题目集中学会了使用正则表达式,字符串的分割,在做最近一次的作业中我起初是使用字符串的分割,但是没法实现要求的全部功能
这是接触java这门语言第二次写博客,这是我第二次写学习总结,总而言之这种总结方法对我来说起到很大的作用,这是我第一次写学习总结,我认为在梳理过后我对知识在脑海里梳理的更加清晰,有助于对这些知识点的再次使用,这也是我第一次编写博客,所以有很多表达不清楚的地方
3.小建议:
因为我是一个新手,所以还不能给出太多的权威的建议,但是我还是总结出了一些经验,在语法通关的情况下,我们要尽可能去提升自己的逻辑推理能力和数学能力,因为只有这样才能去解决生活中的实际问题,逻辑能力就像基本功,所以我们的数学专业在这个方面就体现了很强的重要性
浙公网安备 33010602011771号