實驗二 Java簡單類與對象java
1.寫一個名爲Rectangle的類表示矩形。其屬性包括寬width、高height和顏色color,width和height都是double型的,
而color則是String類型的。要求該類具備:
(1) 使用構造函數完成各屬性的初始賦值框架
(2) 使用get…()和set…()的形式完成屬性的訪問及修改函數
(3) 提供計算面積的getArea()方法和計算周長的getLength()方法優化
1 package java實驗報告二; 2 3 class Rectangle{ 4 private double width,height; //聲明屬性 5 private String color; //聲明屬性 6 public Rectangle(String color,double width,double height){ //定義構造方法爲各屬性賦值 7 this.setColor(color); //爲屬性賦值 8 this.setWidth(width); 9 this.setHeight(height); 10 } 11 public void getArea(){ //計算面積的方法 12 System.out.println("面積:"+getWidth()*getHeight()); 13 } 14 public void getLength(){ //計算周長的方法 15 System.out.println("周長:"+2*(getWidth()+getHeight())); 16 } 17 public void getColor1(){ //定義顏色方法 18 System.out.println("顏色:"+getColor()); 19 } 20 public String getColor(){ //取得color 21 return color; 22 } 23 public void setColor(String n){ //設置color 24 color=n; 25 } 26 public double getWidth(){ //取得width 27 return width; 28 } 29 public void setWidth(double w){ //設置width 30 width=w; 31 } 32 public double getHeight(){ //取得height 33 return height; 34 } 35 public void setHeight(double h){ //設置height 36 height=h; 37 } 38 } 39 public class classdemo2 { 40 41 public static void main(String[] args) { 42 Rectangle re=new Rectangle("yellow",15.01,22.22); 43 re.getArea(); //調用Rectangle類的方法 44 re.getLength(); 45 re.getColor1(); 46 } 47 }
實驗過程:這道題很簡單,理解了類與對象的關係,就以爲很簡單,基本操做。ui
2.銀行的帳戶記錄Account有帳戶的惟一性標識(11個長度的字符和數字的組合),用戶的姓名,開戶日期,
帳戶密碼(六位的數字,能夠用0開頭),當前的餘額。銀行規定新開一個帳戶時,銀行方面提供一個標
識符、帳戶初始密碼123456,客戶提供姓名,開戶時客戶能夠直接存入一筆初始帳戶金額,不提供時初始
餘額爲0。定義該類,並要求該類提供以下方法:存款、取款、變動密碼、能夠分別查詢帳戶的標識、姓名、
開戶日期、當前餘額等信息。this
1 package java實驗報告二; 2 3 import java.text.DecimalFormat; 4 import java.util.Scanner; 5 6 class Account{ 7 private String id,name; //聲明屬性 8 private int time,key; 9 private double balance; 10 public Account(String id,String name,int time,int key,int balance){ //定義構造方法爲各屬性賦值 11 this.setId(id); //爲屬性賦值 12 this.setName(name); 13 this.setTime(time); 14 this.setKey(key); 15 this.setBalance(balance); 16 } 17 public void deposit(){ //存取款方法 18 System.out.println("1.存款 2.取款"); 19 System.out.print("再次輸入你要進行的操做的序號:"); 20 DecimalFormat df=new DecimalFormat("0.00"); //控制餘額輸出精度 21 Scanner sc=new Scanner(System.in); 22 int a1=sc.nextInt(); 23 if(a1==1){ 24 System.out.println("當前餘額:"+df.format(+getBalance())+"元"); 25 System.out.print("請輸入要存入的錢數:"); 26 double money1=sc.nextDouble(); 27 setBalance(getBalance()+money1); //把輸入的錢數賦值給getBalance 28 System.out.println("成功!當前餘額:"+df.format(+getBalance())+"元"); 29 } 30 else if(a1==2){ 31 System.out.println("當前餘額:"+df.format(+getBalance())+"元"); 32 System.out.print("請輸入要取出的錢數:"); 33 double money2=sc.nextDouble(); 34 setBalance(getBalance()-money2); 35 if(getBalance()<0){ 36 System.out.println("餘額不足!"); 37 } 38 else{ 39 System.out.println("成功!當前餘額:"+df.format(+getBalance())+"元"); 40 } 41 } 42 43 } 44 public void change(){ //更改密碼方法 45 System.out.print("請設置新密碼:"); 46 Scanner sc=new Scanner(System.in); 47 int key1=sc.nextInt(); 48 System.out.print("請再次確認密碼:"); 49 int key2=sc.nextInt(); 50 if(key1==key2){ 51 setKey(key1); //把新設置的密碼值賦給getKey() 52 System.out.println("設置成功!你的密碼爲:"+getKey()); 53 } 54 else{ 55 System.out.println("兩次輸入的密碼不一樣!"); 56 } 57 58 } 59 public void inquire(){ //查詢信息方法 60 System.out.print("輸入六位數密碼查詢信息:"); 61 Scanner sc=new Scanner(System.in); 62 int data=sc.nextInt(); 63 if(data==getKey()){ 64 DecimalFormat df=new DecimalFormat("0.00"); //控制餘額輸出精度 65 System.out.println("標識:"+getId()); 66 System.out.println("姓名:"+getName()); 67 System.out.println("開戶日期:"+getTime()); 68 System.out.println("餘額:"+df.format(+getBalance())+"元"); 69 } 70 else{ 71 System.out.println("密碼錯誤"); 72 } 73 } 74 public String getId(){ 75 return id; 76 } 77 public void setId(String i){ 78 id=i; 79 } 80 public String getName(){ 81 return name; 82 } 83 public void setName(String n){ 84 name=n; 85 } 86 public int getTime(){ 87 return time; 88 } 89 public void setTime(int t){ 90 time=t; 91 } 92 public int getKey(){ 93 return key; 94 } 95 public void setKey(int k){ 96 key=k; 97 } 98 public double getBalance(){ 99 return balance; 100 } 101 public void setBalance(double b){ 102 balance=b; 103 } 104 } 105 public class classdemo3 { 106 107 public static void main(String[] args) { 108 boolean R=false; 109 Account ac=new Account("yanzi404123","張晏子",20190917,123456,0); 110 while(!R) 111 { 112 System.out.println("1.存取款"); 113 System.out.println("2.修改密碼"); 114 System.out.println("3.查詢信息"); 115 System.out.println("4.退出程序"); 116 System.out.print("請輸入你要進行的操做的序號:"); 117 Scanner sc=new Scanner(System.in); 118 int a=sc.nextInt(); 119 if(a==1){ 120 ac.deposit(); //存取款 121 } 122 else if(a==2){ 123 ac.change(); //修改密碼 124 125 } 126 else if(a==3){ 127 ac.inquire(); //信息查詢 128 } 129 else if(a==4){ 130 System.out.println(" 感謝使用!"); 131 break; 132 } 133 } 134 } 135 }
作這道題花的時間比較多,大概3個小時,首先跟第一題同樣,先作個框架。我提供了3個方法:存取款、修改密碼、查詢信息。
最早遇到的問題是,人民幣餘額得保留小數點後兩位,而我直接經過get輸出它的時候,默認保留的是後一位即0.0,而後仿造C
的方法失敗,最後找了個b站教程知道了DecimalFormat的用法,一般經過這樣一句話DecimalFormat df=new DecimalFormat("0.00");
來設置保留幾位小數。
第二個問題是寫修改密碼的代碼時,由於我設置了要輸入兩次密碼,因此須要把新密碼int key1值賦值給getKey();很明顯 getKey()=key1;
是錯誤的,在網上也搜不到辦法,而後我亂寫了半個小時,各類排列組合方法都試過了,最後套出了setKey(key1); 這個辦法,徹底ok。
還有由於使用while循環沒有設置break,致使陷入了死循環,下次注意。還有此程序是beta版 還有不少小細節沒有完善,好比密碼暫時spa
還不能以0開始,標識也不是隨機生成,也沒有優化程序。以後再改吧我先提交。code