1. 程式人生 > 其它 >面向物件程式設計A第一次blog

面向物件程式設計A第一次blog

 

一、前言

第一次題目集總結——

  • 題量:較多
  • 難度:較低
  • 知識點
  1. 簡單的輸入輸出
  2. 一些簡單的運算和型別轉換
  3. 一些簡單的迴圈、選擇、字串、陣列的使用
  • 總結:題目比較簡單,題量較多,內容就是一些簡單的輸入輸出和簡單的數學運算。

第二次題目集總結——

  • 題量:較少
  • 難度:較高
  • 知識點
  1. 輸入格式判斷
  2. 輸出格式控制
  3. 字串的應用
  4. 迴圈
  • 總結:題目數量少,難度較高,需對字串進行遍歷、查詢。

第三次題目集總結——

 

  • 題量:較少
  • 難度:高
  • 知識點

 

  1. 判斷多種輸入格式並對應不同的輸出
  2. 從字串中獲取資料
  3. 字串的應用
  4. 數學運算

二、設計與分析

題目集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             int
time=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);
  1. 資料浮點數型別不同時,需看輸出需求進行強制轉換。
  2. 要注意題目要求,充分理解題目再做,對於題目中的一些不理解的名詞要查詢,比如第二次作業中的7-2中的奇偶校驗。
  3. 要建立類來完成程式碼所需要的功能,只用一個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.要多注意細節,很多條件的判斷經常出錯

 

 

四、總結

 

  1. 通過這三次題目集,對Java的實際應用在書本知識之外有了一些初步的認識,同時,通過實際練習,對於Java的一些簡單的輸入輸出、簡單的邏輯應用、一些數學運算以及一些特殊的函式和方法的應用更加熟練。
  2. 在做題目的過程中,通過查詢資料,發現了許多新的方法,比如try catch。
  3. 同時,在做題過程中也更加清楚的瞭解到自己的不足之處,在哪一方面不太清楚,比如正則表示式就不會用,查詢資料一時也不會用,需要多加學習。
  4. 希望老師在每次題目集時間截止之後能把題目集中比較難的題目集的答案或者思路發出來讓我們自己進行對照。