1. 程式人生 > 其它 >Java第二次Blog

Java第二次Blog

  •  前言

         1. 習題集四前言

         本次題集共有三題, 第一題是對正則表示式的考查,要求用正則表示式來完成題目,輸入一段話,將每一行中的數字提取出來並相加,最後輸出每一行數字的總和;第二題仍是對點線座標的考查,這次主要考的是凸四邊形的相關計算,題目較難,對數學知識有一定的考量,同時也是對情況多樣性的一種考查,完成情況較差,只拿了30分(滿分是70分);第三題則是要求寫一個銀行業務類,實現設定密碼,存款,取款等一系列操作,同時輸出對應的金額,這道題相對來說是簡單的,得到了滿分。

         2. 期中考試題集前言

         期中考試題集是對點與線(類設計)的一種不斷深入考查,給出相應的類圖,要求寫出對應的程式碼,第一題是簡單類的考查,涉及到私有屬性,方法呼叫和使用的考查;第二題則是加入了抽象類的考查,還有父類子類的關係、抽象方法的考查等;第三題是在原有類設計的基礎上,增加一個GeometryObject容器類,其屬性為ArrayList<Element>

型別的物件,主要考查多型等相關問題。三次題目不是很難,但是未在指定時間內完成,技術上仍有很大的不足,知識點運用不熟悉,前兩題耗費較多的時間。

         3.農夫過河題集前言

        本次題集是對給定程式碼的一個改寫,第一次是將程式程式碼補充完整,實現農夫過河遊戲功能:由使用者選擇角色過河,系統自動判斷遊戲的勝負:當出現有生物被吃掉的時候,遊戲失敗,所有角色都到了河的另一邊,遊戲成功,為了確保結果的正確性,應該進行多次測試;第二次則是增加Boat(船)類,設計船類的相應方法,並修改main方法中相關的程式碼,完善農夫帶東西過河的功能,同時將資料進行封裝,涉及到屬性和方法的使用和呼叫;第三次是繼承和多型的考查,寫入一個父類,通過繼承的方式讓每個子類都可以呼叫父類的方法,也應該進行多次測試,不僅僅是正確的過河方式,還有生物在另外一岸,農夫無法帶的問題,以及生物被吃遊戲結束等問題。

  • 習題集的得分情況:

     習題集四:60分(滿分100分)

  期中考試題集:72分(滿分100分)

  農夫過河問題:86分(滿分100分)

  •   設計與分析

       (1)銀行業務類類圖:

                 

import java.util.Scanner;
import java.util.regex.*;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        
do{ int sum=0; String s=in.nextLine(); if(s.equals("end")){ break; } Pattern a=Pattern.compile("\\d+"); Matcher b=a.matcher(s); while(b.find()) { sum+=Integer.parseInt(b.group()); } System.out.println(sum); }while(true); } }

①設計思路:輸入一行資料時,用空格來間隔,當檢測到空格時轉為下一個資料,將一行輸入的數值存到不同的資料中;

     程式碼分析:第一個資料用input.next()輸入,第二個則採用imput.nextInt();

        String username;
        int key;
        double balance = 0.0;
        username = input1.next();
        key = input1.nextInt();

    第一題的簡單類圖:

    

import java.util.Scanner;
import java.util.regex.*;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        do{
            int sum=0;
            String s=in.nextLine();
            if(s.equals("end")){
                break;
            }
            Pattern a=Pattern.compile("\\d+");
            Matcher b=a.matcher(s);
            while(b.find()) {
                sum+=Integer.parseInt(b.group());
            }
            System.out.println(sum);
        }while(true);
    }
}

①設計思路:用正則表示式來判斷一行中的數字,提取出所有的數字;

     程式碼分析:運用Pattern和Matcher函式將數字分割並從字串中提取,再利用find()函式找到每個數字,強制型別轉化後得到數字;

       Pattern a=Pattern.compile("\\d+");
            Matcher b=a.matcher(s);
            while(b.find()) {
                sum+=Integer.parseInt(b.group());
            }

(2

import java.util.Scanner;
public class Main{
    public static void main(String[] agrs){
        Scanner input = new Scanner(System.in);
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();
        double x2= input.nextDouble();
        double y2 = input.nextDouble();
        String s = input.next();
        
        Point point1 = new Point(x1,y1);
        Point point2 = new Point(x2,y2);
            
        Line b = new Line(point1,point2,s);
        
        if(x1>0 && x1<=200 && x2>0 && x2<=200 && y1>0 && y1<=200 && y2>0 && y2<=200) {
            System.out.println("The line's color is:" + b.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.print("The line's length is:");
            b.display();
        }
        else {
            System.out.println("Wrong Format");
        }
        
    }
}
    
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;
    }
    public void display(){
        System.out.printf("(%.2f,%.2f)\n",this.x,this.y);
    }
}
class Line{
    private Point point1;
    private Point point2;
    private String color;
    public Line(){
       this.point1 = point1;
       this.point2 = point2;
       this.color = color;
    }
    public Line(Point p1,Point p2,String s){
        this.point1 = p1;
        this.point2 = p2;
        this.color = s;
    }
    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(){
        return getDistance();
    }
    public void display(){
        double distance = Math.sqrt(Math.pow((point1.getX()-point2.getX()),2)+Math.pow((point1.getY()-point2.getY()),2));
        System.out.printf("%.2f",distance);
    }
}
import java.util.Scanner;
public class Main{
    public static void main(String[] agrs){
        Scanner input = new Scanner(System.in);
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();
        double x2= input.nextDouble();
        double y2 = input.nextDouble();
        String s = input.next();
        
        Point point1 = new Point(x1,y1);
        Point point2 = new Point(x2,y2);
            
        Line b = new Line(point1,point2,s);
        
        Plane colour = new Plane(s);
        
        Element element = new Element(){
            public void display()
        };
        if(x1>0 && x1<=200 && x2>0 && x2<=200 && y1>0 && y1<=200 && y2>0 && y2<=200) {
            element = point1;
            element.display();
            element = point2;
            element.display();
            System.out.println("The line's color is:" + b.getColor());
            System.out.println("The line's begin point's Coordinate is:");
            element = point1;
            element.display();
            System.out.println("The line's end point's Coordinate is:");
            element = point2;
            element.display();
            System.out.print("The line's length is:");
            element = b;
            element.display();
            System.out.println("");
            System.out.print("The Plane's color is:");
            element = colour;
            element.display();
        }
        else {
            System.out.println("Wrong Format");
        }
        
    }
}

abstract class Element{
    public 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;
    }
    public void display(){
        
        System.out.printf("(%.2f,%.2f)\n",this.x,this.y);
    }
}

class Line extends Element{
    private Point point1;
    private Point point2;
    private String color;
    public Line(){
       this.point1 = point1;
       this.point2 = point2;
       this.color = color;
    }
    public Line(Point p1,Point p2,String s){
        this.point1 = p1;
        this.point2 = p2;
        this.color = s;
    }
    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(){
        return getDistance();
    }
    public void display(){
        double distance = Math.sqrt(Math.pow((point1.getX()-point2.getX()),2)+Math.pow((point1.getY()-point2.getY()),2));
        System.out.printf("%.2f",distance);
    }
}

class Plane extends Element{
    private String color;
    Plane(){
        
    }
    Plane(String color){
        this.color = color; 
    }
    public String getColor(){
        return color;
    }
    public void setColor(String color){
        this.color = color;
    }
    public void display(){
        System.out.print(this.color);
    }
}

(3)農夫過河問題中的部分程式碼分析和思路

①設計思路:當使用private時,需要用get()來進行對資料的訪問,用set()來進行資料的使用;

     程式碼分析:在get()函式中return需要訪問的值,set()對訪問的值進行修改;

class object{
    private boolean isAlive = true;
    private boolean crossRiver = false;
    private String name;
    public String getname() {
        return name;
    }public void setname(String name) {
        this.name = name;
    }
    public boolean getcrossRiver() {
        return crossRiver;
    }
    public void setcrossRiver() {
        crossRiver=!crossRiver;
    }
    public boolean getisAlive() {
        return isAlive;
    }
    public void setisAlive() {
        isAlive=!isAlive;
    }
}

 設計思路:當使用private時,需要用get()來進行對資料的訪問,用set()來進行資料的使用;

     程式碼分析:在get()函式中return需要訪問的值,set()對訪問的值進行修改;

class Wolf extends object{

    public String getname() {
        return super.getname();
    }
    public boolean getcrossRiver() {
        return super.getcrossRiver();
    }
    public boolean getisAlive() {
        return super.getisAlive();
    }
    Wolf(String name){        
        
        super.setname(name);
        System.out.println("啊嗚~~~我" + super.getname() + "狼又回來了");
    }
    public void setcrossRiver() {
        super.setcrossRiver();
    }
    public void eatSheep(object sheep,object farmer){
        if(super.getcrossRiver() == sheep.getcrossRiver() && super.getcrossRiver()!=farmer.getcrossRiver()){
            sheep.setisAlive();
        }
    }
    public void showStatus(){
        System.out.printf("Wolf " + super.getname() + " is alive  :%s  Wolf "+ super.getname() +" has Cross  :%s\n",super.getisAlive(),super.getcrossRiver());
    }
    public void setisAlive() {
        super.setisAlive();
    }
}

設計思路:父類與子類的繼承關係,用extends來連線,子類中採用super關鍵字;

     程式碼分析:super表示通過當前子類的構造方法呼叫父類的無引數構造方法。所以必須保證父類的無引數構造方法是存在的

class Sheep extends object{

    public String getname() {
        return super.getname();
    }
    public boolean getcrossRiver() {
        return super.getcrossRiver();
    }
    public boolean getisAlive() {
        return super.getisAlive();
    }
    Sheep(String name){
        super.setname(name);
        System.out.println("咩咩,我是可愛的小羊" + super.getname());
    }
    public void eatCabbage(object cabbage,object farmer){
        if(super.getcrossRiver() == cabbage.getcrossRiver() && super.getcrossRiver() != farmer.getcrossRiver()) {
            cabbage.setisAlive();
        }
    }
    public void showStatus(){
        System.out.printf("Sheep " + super.getname() +  " is alive :%s  Sheep " + super.getname() + " has Cross :%s\n",super.getisAlive(),super.getcrossRiver());
    }
    public void setcrossRiver() {
        super.setcrossRiver();
    }
    public void setisAlive() {
        super.setisAlive();
    }
}

                      

    

  •   踩坑心得

①正則表示式預設進行貪婪匹配,可以用?來實現非貪婪匹配;

②字串的直接比較可以採用equals連線前後兩者,沒必要依次比較每一個字元;

③Find函式用來對原始資料中某個字串進行定位,以確定其位置,可以簡化程式程式碼,使程式更加簡潔明瞭;

④不應該空定義抽象方法,切記切記切記!!!本次期中考試題集第二題因此導致0分;

⑤Java中想要在一行輸入兩個資料時,可以採用input.next()方式來進行輸入

⑥不斷優化實現功能的程式碼演算法,實現對程式碼的凝練和昇華,不斷熟悉程式碼和知識,加快做題速度。

  •  改進建議

①程式碼儘可能融入新的知識,一個功能一個類,避免一個類複用,導致程式碼的容錯率降低,後期應逐步加入繼承等新知識。

②順序結構不夠簡潔,邏輯較為混亂,應在設計程式碼時提前用流程圖進行規劃,使程式清晰易讀。

③不斷考慮可能會出現的情況,不僅僅侷限於測試點的通過。

④正則表示式的學習還不到位,仍然需要繼續在網上查詢資料來學習。

⑤在一些程式碼的關鍵節點,我應該加上一些註釋,方便之後的查閱和修改。

⑥在進行繼承關係描述時,需要注意格式問題,用super關鍵字來呼叫父類中的方法。

  • 總結

①深入瞭解了正則表示式後學會了簡單運用正則表示式。

②這幾周學會了類圖和流程圖的製作。

③學會了繼承和多型等知識點,對程式碼之間的聯絡理解進一步加深。

④對知識點的運用不熟悉,導致期中考試的成績很低,最後一道題甚至沒有做完,值得反思,要在題目中不斷加入新學到的知識,加快做題速度。

  •  前言

         1. 習題集四前言

         本次題集共有三題, 第一題是對正則表示式的考查,要求用正則表示式來完成題目,輸入一段話,將每一行中的數字提取出來並相加,最後輸出每一行數字的總和;第二題仍是對點線座標的考查,這次主要考的是凸四邊形的相關計算,題目較難,對數學知識有一定的考量,同時也是對情況多樣性的一種考查,完成情況較差,只拿了30分(滿分是70分);第三題則是要求寫一個銀行業務類,實現設定密碼,存款,取款等一系列操作,同時輸出對應的金額,這道題相對來說是簡單的,得到了滿分。

         2. 期中考試題集前言

         期中考試題集是對點與線(類設計)的一種不斷深入考查,給出相應的類圖,要求寫出對應的程式碼,第一題是簡單類的考查,涉及到私有屬性,方法呼叫和使用的考查;第二題則是加入了抽象類的考查,還有父類子類的關係、抽象方法的考查等;第三題是在原有類設計的基礎上,增加一個GeometryObject容器類,其屬性為ArrayList<Element>型別的物件,主要考查多型等相關問題。三次題目不是很難,但是未在指定時間內完成,技術上仍有很大的不足,知識點運用不熟悉,前兩題耗費較多的時間。

         3.農夫過河題集前言

        本次題集是對給定程式碼的一個改寫,第一次是將程式程式碼補充完整,實現農夫過河遊戲功能:由使用者選擇角色過河,系統自動判斷遊戲的勝負:當出現有生物被吃掉的時候,遊戲失敗,所有角色都到了河的另一邊,遊戲成功,為了確保結果的正確性,應該進行多次測試;第二次則是增加Boat(船)類,設計船類的相應方法,並修改main方法中相關的程式碼,完善農夫帶東西過河的功能,同時將資料進行封裝,涉及到屬性和方法的使用和呼叫;第三次是繼承和多型的考查,寫入一個父類,通過繼承的方式讓每個子類都可以呼叫父類的方法,也應該進行多次測試,不僅僅是正確的過河方式,還有生物在另外一岸,農夫無法帶的問題,以及生物被吃遊戲結束等問題。

  • 習題集的得分情況:

     習題集四:60分(滿分100分)

  期中考試題集:72分(滿分100分)

  農夫過河問題:86分(滿分100分)

  •   設計與分析

       (1)銀行業務類類圖:

                 

import java.util.Scanner;
import java.util.regex.*;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        do{
            int sum=0;
            String s=in.nextLine();
            if(s.equals("end")){
                break;
            }
            Pattern a=Pattern.compile("\\d+");
            Matcher b=a.matcher(s);
            while(b.find()) {
                sum+=Integer.parseInt(b.group());
            }
            System.out.println(sum);
        }while(true);
    }
}

①設計思路:輸入一行資料時,用空格來間隔,當檢測到空格時轉為下一個資料,將一行輸入的數值存到不同的資料中;

     程式碼分析:第一個資料用input.next()輸入,第二個則採用imput.nextInt();

        String username;
        int key;
        double balance = 0.0;
        username = input1.next();
        key = input1.nextInt();

    第一題的簡單類圖:

    

import java.util.Scanner;
import java.util.regex.*;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        do{
            int sum=0;
            String s=in.nextLine();
            if(s.equals("end")){
                break;
            }
            Pattern a=Pattern.compile("\\d+");
            Matcher b=a.matcher(s);
            while(b.find()) {
                sum+=Integer.parseInt(b.group());
            }
            System.out.println(sum);
        }while(true);
    }
}

①設計思路:用正則表示式來判斷一行中的數字,提取出所有的數字;

     程式碼分析:運用Pattern和Matcher函式將數字分割並從字串中提取,再利用find()函式找到每個數字,強制型別轉化後得到數字;

       Pattern a=Pattern.compile("\\d+");
            Matcher b=a.matcher(s);
            while(b.find()) {
                sum+=Integer.parseInt(b.group());
            }

(2

import java.util.Scanner;
public class Main{
    public static void main(String[] agrs){
        Scanner input = new Scanner(System.in);
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();
        double x2= input.nextDouble();
        double y2 = input.nextDouble();
        String s = input.next();
        
        Point point1 = new Point(x1,y1);
        Point point2 = new Point(x2,y2);
            
        Line b = new Line(point1,point2,s);
        
        if(x1>0 && x1<=200 && x2>0 && x2<=200 && y1>0 && y1<=200 && y2>0 && y2<=200) {
            System.out.println("The line's color is:" + b.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.print("The line's length is:");
            b.display();
        }
        else {
            System.out.println("Wrong Format");
        }
        
    }
}
    
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;
    }
    public void display(){
        System.out.printf("(%.2f,%.2f)\n",this.x,this.y);
    }
}
class Line{
    private Point point1;
    private Point point2;
    private String color;
    public Line(){
       this.point1 = point1;
       this.point2 = point2;
       this.color = color;
    }
    public Line(Point p1,Point p2,String s){
        this.point1 = p1;
        this.point2 = p2;
        this.color = s;
    }
    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(){
        return getDistance();
    }
    public void display(){
        double distance = Math.sqrt(Math.pow((point1.getX()-point2.getX()),2)+Math.pow((point1.getY()-point2.getY()),2));
        System.out.printf("%.2f",distance);
    }
}
import java.util.Scanner;
public class Main{
    public static void main(String[] agrs){
        Scanner input = new Scanner(System.in);
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();
        double x2= input.nextDouble();
        double y2 = input.nextDouble();
        String s = input.next();
        
        Point point1 = new Point(x1,y1);
        Point point2 = new Point(x2,y2);
            
        Line b = new Line(point1,point2,s);
        
        Plane colour = new Plane(s);
        
        Element element = new Element(){
            public void display()
        };
        if(x1>0 && x1<=200 && x2>0 && x2<=200 && y1>0 && y1<=200 && y2>0 && y2<=200) {
            element = point1;
            element.display();
            element = point2;
            element.display();
            System.out.println("The line's color is:" + b.getColor());
            System.out.println("The line's begin point's Coordinate is:");
            element = point1;
            element.display();
            System.out.println("The line's end point's Coordinate is:");
            element = point2;
            element.display();
            System.out.print("The line's length is:");
            element = b;
            element.display();
            System.out.println("");
            System.out.print("The Plane's color is:");
            element = colour;
            element.display();
        }
        else {
            System.out.println("Wrong Format");
        }
        
    }
}

abstract class Element{
    public 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;
    }
    public void display(){
        
        System.out.printf("(%.2f,%.2f)\n",this.x,this.y);
    }
}

class Line extends Element{
    private Point point1;
    private Point point2;
    private String color;
    public Line(){
       this.point1 = point1;
       this.point2 = point2;
       this.color = color;
    }
    public Line(Point p1,Point p2,String s){
        this.point1 = p1;
        this.point2 = p2;
        this.color = s;
    }
    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(){
        return getDistance();
    }
    public void display(){
        double distance = Math.sqrt(Math.pow((point1.getX()-point2.getX()),2)+Math.pow((point1.getY()-point2.getY()),2));
        System.out.printf("%.2f",distance);
    }
}

class Plane extends Element{
    private String color;
    Plane(){
        
    }
    Plane(String color){
        this.color = color; 
    }
    public String getColor(){
        return color;
    }
    public void setColor(String color){
        this.color = color;
    }
    public void display(){
        System.out.print(this.color);
    }
}

(3)農夫過河問題中的部分程式碼分析和思路

①設計思路:當使用private時,需要用get()來進行對資料的訪問,用set()來進行資料的使用;

     程式碼分析:在get()函式中return需要訪問的值,set()對訪問的值進行修改;

class object{
    private boolean isAlive = true;
    private boolean crossRiver = false;
    private String name;
    public String getname() {
        return name;
    }public void setname(String name) {
        this.name = name;
    }
    public boolean getcrossRiver() {
        return crossRiver;
    }
    public void setcrossRiver() {
        crossRiver=!crossRiver;
    }
    public boolean getisAlive() {
        return isAlive;
    }
    public void setisAlive() {
        isAlive=!isAlive;
    }
}

 設計思路:當使用private時,需要用get()來進行對資料的訪問,用set()來進行資料的使用;

     程式碼分析:在get()函式中return需要訪問的值,set()對訪問的值進行修改;

class Wolf extends object{

    public String getname() {
        return super.getname();
    }
    public boolean getcrossRiver() {
        return super.getcrossRiver();
    }
    public boolean getisAlive() {
        return super.getisAlive();
    }
    Wolf(String name){        
        
        super.setname(name);
        System.out.println("啊嗚~~~我" + super.getname() + "狼又回來了");
    }
    public void setcrossRiver() {
        super.setcrossRiver();
    }
    public void eatSheep(object sheep,object farmer){
        if(super.getcrossRiver() == sheep.getcrossRiver() && super.getcrossRiver()!=farmer.getcrossRiver()){
            sheep.setisAlive();
        }
    }
    public void showStatus(){
        System.out.printf("Wolf " + super.getname() + " is alive  :%s  Wolf "+ super.getname() +" has Cross  :%s\n",super.getisAlive(),super.getcrossRiver());
    }
    public void setisAlive() {
        super.setisAlive();
    }
}

設計思路:父類與子類的繼承關係,用extends來連線,子類中採用super關鍵字;

     程式碼分析:super表示通過當前子類的構造方法呼叫父類的無引數構造方法。所以必須保證父類的無引數構造方法是存在的

class Sheep extends object{

    public String getname() {
        return super.getname();
    }
    public boolean getcrossRiver() {
        return super.getcrossRiver();
    }
    public boolean getisAlive() {
        return super.getisAlive();
    }
    Sheep(String name){
        super.setname(name);
        System.out.println("咩咩,我是可愛的小羊" + super.getname());
    }
    public void eatCabbage(object cabbage,object farmer){
        if(super.getcrossRiver() == cabbage.getcrossRiver() && super.getcrossRiver() != farmer.getcrossRiver()) {
            cabbage.setisAlive();
        }
    }
    public void showStatus(){
        System.out.printf("Sheep " + super.getname() +  " is alive :%s  Sheep " + super.getname() + " has Cross :%s\n",super.getisAlive(),super.getcrossRiver());
    }
    public void setcrossRiver() {
        super.setcrossRiver();
    }
    public void setisAlive() {
        super.setisAlive();
    }
}

                      

    

  •   踩坑心得

①正則表示式預設進行貪婪匹配,可以用?來實現非貪婪匹配;

②字串的直接比較可以採用equals連線前後兩者,沒必要依次比較每一個字元;

③Find函式用來對原始資料中某個字串進行定位,以確定其位置,可以簡化程式程式碼,使程式更加簡潔明瞭;

④不應該空定義抽象方法,切記切記切記!!!本次期中考試題集第二題因此導致0分;

⑤Java中想要在一行輸入兩個資料時,可以採用input.next()方式來進行輸入

⑥不斷優化實現功能的程式碼演算法,實現對程式碼的凝練和昇華,不斷熟悉程式碼和知識,加快做題速度。

  •  改進建議

①程式碼儘可能融入新的知識,一個功能一個類,避免一個類複用,導致程式碼的容錯率降低,後期應逐步加入繼承等新知識。

②順序結構不夠簡潔,邏輯較為混亂,應在設計程式碼時提前用流程圖進行規劃,使程式清晰易讀。

③不斷考慮可能會出現的情況,不僅僅侷限於測試點的通過。

④正則表示式的學習還不到位,仍然需要繼續在網上查詢資料來學習。

⑤在一些程式碼的關鍵節點,我應該加上一些註釋,方便之後的查閱和修改。

⑥在進行繼承關係描述時,需要注意格式問題,用super關鍵字來呼叫父類中的方法。

  • 總結

①深入瞭解了正則表示式後學會了簡單運用正則表示式。

②這幾周學會了類圖和流程圖的製作。

③學會了繼承和多型等知識點,對程式碼之間的聯絡理解進一步加深。

④對知識點的運用不熟悉,導致期中考試的成績很低,最後一道題甚至沒有做完,值得反思,要在題目中不斷加入新學到的知識,加快做題速度。