面向物件程式設計A第一次blog
阿新 • • 發佈:2022-04-11
一、前言
第一次題目集總結——
- 題量:較多
- 難度:較低
- 知識點:
- 簡單的輸入輸出
- 一些簡單的運算和型別轉換
- 一些簡單的迴圈、選擇、字串、陣列的使用
- 總結:題目比較簡單,題量較多,內容就是一些簡單的輸入輸出和簡單的數學運算。
第二次題目集總結——
- 題量:較少
- 難度:較高
- 知識點:
- 輸入格式判斷
- 輸出格式控制
- 字串的應用
- 迴圈
- 總結:題目數量少,難度較高,需對字串進行遍歷、查詢。
第三次題目集總結——
- 題量:較少
- 難度:高
- 知識點:
- 判斷多種輸入格式並對應不同的輸出
- 從字串中獲取資料
- 字串的應用
- 數學運算
二、設計與分析
題目集2——
7-2 串列埠字元解析
1 import java.util.Scanner; 2 3 public class Main { 4 5 6 public static void main(String[] args) { 7 try (// TODO Auto-generated method stub 8 Scanner scanf = new Scanner(System.in)) { 9 String shuru= scanf.next(); 10 int i=0; 11 inttime=0; 12 int no=1; 13 int k=1; 14 for( i=0;i<=shuru.length();i+=k) 15 { 16 k=1; 17 if(shuru.length()<11||(time==0&&i==shuru.length())) 18 {System.out.println("null data"); 19 break; 20 } 21 if(shuru.charAt(i)==0) 22 { 23 time=time+1; 24 int jiou=0; 25 26 27 28 29 for(int j=1;j<=8;j++) 30 { 31 if(shuru.charAt(i+j)==1) 32 { 33 jiou=jiou+1; 34 } 35 36 } 37 if(jiou%2!=0&&shuru.charAt(i+8+1)!=1&&shuru.charAt(i+8+2)==1) 38 { 39 System.out.println(no+":"+"parity check error"); 40 no=no+1; 41 k=11; 42 } 43 else if(jiou%2!=0&&shuru.charAt(i+8+1)!=1&&shuru.charAt(i+8+2)!=1) 44 { 45 System.out.println(no+":"+"validate error"); 46 no=no+1; 47 k=11; 48 } 49 else { 50 System.out.print(no+":"); 51 for(int j=1;j<=8;j++) 52 { 53 if(j==7) 54 { 55 System.out.println(shuru.charAt(i+j)); 56 k=11; 57 } 58 else 59 { 60 System.out.print(shuru.charAt(i+j)); 61 k=11; 62 } 63 64 } 65 } 66 67 68 69 70 71 } 72 73 74 } 75 } 76 } 77 78 }
完成度低,實現功能少,沒有完成對字串的多次檢索,不知道怎麼實現迴圈多次對字串進行查詢。
題目集3——
7-1 點線形系列1-計算兩點之間的距離
1 import java.util.Scanner; 2 public class Main { 3 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 double x1,x2,y1,y2; 9 String str; 10 str=sc.nextLine(); 11 String[] StrArray = str.split(",| "); 12 13 try 14 { 15 x1=Double.valueOf(StrArray[0]); 16 y1=Double.valueOf(StrArray[1]); 17 x2=Double.valueOf(StrArray[2]); 18 y2=Double.valueOf(StrArray[3]); 19 for (int i = 4; i < StrArray.length; i++) { 20 double t=Double.valueOf(StrArray[i]); 21 } 22 if(StrArray.length>4) 23 { 24 System.out.println("wrong number of points"); 25 } 26 else 27 { 28 double d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); 29 d=Math.sqrt(d); 30 System.out.println(d); 31 } 32 }catch(Exception e) 33 { 34 System.out.println("Wrong Format"); 35 } 36 37 } 38 39 }
使用try catch 錯誤處理,首先執行try中的程式碼,如果丟擲異常會由catch去捕獲並執行,如果沒有發生異常catch會被忽略掉。try語句中測試程式碼中的錯誤,而catch語句處理錯誤。valueof()函式用於返回指定物件的原始值。split將字串按“,”或“ ”分割為子字串,然後將結果作為字串陣列返回。
7-2 點線形系列2-線的計算
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 // TODO code application logic here 7 Scanner sc = new Scanner(System.in); 8 int op; 9 double x1, x2, y1, y2, x3, y3, x4, y4; 10 String str; 11 str = sc.nextLine(); 12 String[] StrArray = str.split(":|,| "); 13 try { 14 op = Integer.valueOf(StrArray[0]); 15 x1 = Double.valueOf(StrArray[1]); 16 y1 = Double.valueOf(StrArray[2]); 17 x2 = Double.valueOf(StrArray[3]); 18 y2 = Double.valueOf(StrArray[4]); 19 for (int i = 5; i < StrArray.length; i++) { 20 double t = Double.valueOf(StrArray[i]); 21 } 22 if (op == 1) { 23 if (StrArray.length > 5) { 24 System.out.println("wrong number of points"); 25 } else if (x1 == x2 && y1 == y2) { 26 System.out.println("points coincide"); 27 } else if (x1 == x2) { 28 System.out.println("Slope does not exist"); 29 } else { 30 double k = (y2 - y1) / (x2 - x1); 31 System.out.println(k); 32 } 33 34 } else if (op == 2) { 35 x3 = Double.valueOf(StrArray[5]); 36 y3 = Double.valueOf(StrArray[6]); 37 if (StrArray.length >=7) { 38 System.out.println("wrong number of points"); 39 } else if (x1 == x2 && y1 == y2 || x1 == x3 && y1 == y3 || x2 == x3 && y2 == y3) { 40 System.out.println("points coincide"); 41 } else if (x1 == x2) { 42 double d = Math.abs(x3 - x1); 43 System.out.println(d); 44 } else { 45 46 double k = (y2 - y1) / (x2 - x1); 47 double d = Math.abs(y3 - k * x3 + k * x1 - k * y1); 48 d = d / Math.sqrt(1 + k * k); 49 /* 50 double s1=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 51 double s2=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); 52 double s3=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); 53 double s=(s1+s2+s3)/2; 54 double d=Math.sqrt(s*(s-s1)*(s-s2)*(s-s3)); 55 d=2*d/s1;*/ 56 System.out.println(d); 57 } 58 59 } else if (op == 3) { 60 x3 = Double.valueOf(StrArray[5]); 61 y3 = Double.valueOf(StrArray[6]); 62 if (StrArray.length > 7) { 63 System.out.println("wrong number of points"); 64 } else if (x1 == x2 && y1 == y2 || x1 == x3 && y1 == y3 || x2 == x3 && y2 == y3) { 65 System.out.println("points coincide"); 66 } else { 67 68 double k1 = (y3 - y2) * (x2 - x1); 69 double k2 = (y2 - y1) * (x3 - x2); 70 if (k1 == k2) { 71 System.out.println("true"); 72 } else { 73 System.out.println("false"); 74 } 75 } 76 } else if (op == 4) { 77 x3 = Double.valueOf(StrArray[5]); 78 y3 = Double.valueOf(StrArray[6]); 79 x4 = Double.valueOf(StrArray[7]); 80 y4 = Double.valueOf(StrArray[8]); 81 if (StrArray.length > 9) { 82 System.out.println("wrong number of points"); 83 } else if (x1 == x2 && y1 == y2 || x1 == x3 && y1 == y3 || x2 == x3 && y2 == y3) { 84 System.out.println("points coincide"); 85 } else { 86 double k1 = (y2 - y1) / (x2 - x1); 87 double k2 = (y3 - y4) / (x3 - x4); 88 if (k1 == k2) { 89 System.out.println("true"); 90 } else { 91 System.out.println("false"); 92 } 93 } 94 } else if (op == 5) { 95 x3 = Double.valueOf(StrArray[5]); 96 y3 = Double.valueOf(StrArray[6]); 97 x4 = Double.valueOf(StrArray[7]); 98 y4 = Double.valueOf(StrArray[8]); 99 if (StrArray.length > 9) { 100 System.out.println("wrong number of points"); 101 } else if (x1 == x2 && y1 == y2 || x1 == x3 && y1 == y3 || x2 == x3 && y2 == y3) { 102 System.out.println("points coincide"); 103 } else { 104 double k1 = (y2 - y1) / (x2 - x1); 105 double k2 = (y3 - y4) / (x3 - x4); 106 if (k1 == k2) { 107 System.out.println("is parallel lines,have no intersection point"); 108 } else { 109 double b=y1-k1*x1; 110 double d=y3-k2*x3; 111 double x0=(d-b)/(k1-k2); 112 double y0=k1*(d-b)/(k1-k2)+b; 113 System.out.println(x0+","+y0); 114 d=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1); 115 b=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); 116 if(d<b) 117 System.out.println("true"); 118 else 119 System.out.println("false"); 120 } 121 } 122 123 } 124 125 } catch (Exception e) { 126 System.out.println("Wrong Format"); 127 } 128 129 } 130 131 }
同7-1一樣使用try catch 錯誤處理,首先執行try中的程式碼,如果丟擲異常會由catch去捕獲並執行,如果沒有發生異常catch會被忽略掉。try語句中測試程式碼中的錯誤,而catch語句處理錯誤。split將字串按“,”或“ ”分割為子字串,然後將結果作為字串陣列返回。valueof()函式用於返回指定物件的原始值。數學運算不合理,有幾處運算錯誤,對輸入格式的判斷不充分,很多錯誤輸入格式的測試點沒過。沒有類的建立,直接一個Main函式寫完所有功能,導致程式碼繁瑣以及不易閱讀。
7-3 點線形系列3-三角形的計算
1 import java.util.Scanner; 2 public class Main { 3 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 String str; 9 str=sc.nextLine(); 10 11 System.out.println("Wrong Format"); 12 13 } 14 15 }
該題目未完成。
三、踩坑心得
1 Scanner input = new Scanner(System.in); 2 float kg = input.nextFloat(); 3 float m = input.nextFloat(); 4 double newkg,newm; 5 newkg = kg/(0.45359237); 6 newm = m/(0.0254); 7 System.out.println((float)newkg+" "+(float)newm);
- 資料浮點數型別不同時,需看輸出需求進行強制轉換。
- 要注意題目要求,充分理解題目再做,對於題目中的一些不理解的名詞要查詢,比如第二次作業中的7-2中的奇偶校驗。
- 要建立類來完成程式碼所需要的功能,只用一個main來完成所有功能的話會造成程式碼非常冗雜,並且可讀性較低
1 import java.util.Scanner; 2 public class Main { 3 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 double x1,x2,y1,y2; 9 String str; 10 str=sc.nextLine(); 11 String[] StrArray = str.split(",| "); 12 13 try 14 { 15 x1=Double.valueOf(StrArray[0]); 16 y1=Double.valueOf(StrArray[1]); 17 x2=Double.valueOf(StrArray[2]); 18 y2=Double.valueOf(StrArray[3]); 19 for (int i = 4; i < StrArray.length; i++) { 20 double t=Double.valueOf(StrArray[i]); 21 } 22 if(StrArray.length>4) 23 { 24 System.out.println("wrong number of points"); 25 } 26 else 27 { 28 double d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); 29 d=Math.sqrt(d); 30 System.out.println(d); 31 } 32 }catch(Exception e) 33 { 34 System.out.println("Wrong Format"); 35 } 36 37 } 38 39 }
4.要多注意細節,很多條件的判斷經常出錯。
四、總結
- 通過這三次題目集,對Java的實際應用在書本知識之外有了一些初步的認識,同時,通過實際練習,對於Java的一些簡單的輸入輸出、簡單的邏輯應用、一些數學運算以及一些特殊的函式和方法的應用更加熟練。
- 在做題目的過程中,通過查詢資料,發現了許多新的方法,比如try catch。
- 同時,在做題過程中也更加清楚的瞭解到自己的不足之處,在哪一方面不太清楚,比如正則表示式就不會用,查詢資料一時也不會用,需要多加學習。
- 希望老師在每次題目集時間截止之後能把題目集中比較難的題目集的答案或者思路發出來讓我們自己進行對照。