zoukankan      html  css  js  c++  java
  • 第四周学习总结和实验报告(二)

    实验报告(二)

    1,写一个名为Rectangle的类表示矩形。其属性包括宽width、高height和颜色color,width和height都是double型的,而color则是String类型的。要求该类具有:

    (1) 使用构造函数完成各属性的初始赋值

    (2) 使用get…()和set…()的形式完成属性的访问及修改

    (3) 提供计算面积的getArea()方法和计算周长的getLength()方法

     

    一,实验源码:

      1 import java.util.*;
      2 
      3 class Rectangle{
      4 
      5     private double width;
      6 
      7     private double height;
      8 
      9     private String color;
     10 
     11     public void out() {
     12 
     13         System.out.println("宽度:"+width+", 高度:"+height+", 颜色:"+color);
     14 
     15     }
     16 
     17     public Rectangle(double width,double height,String color){
     18 
     19         this.setWidth(width);
     20 
     21         this.setHeight(height);
     22 
     23         this.setColor(color);
     24 
     25     }
     26 
     27     public double getWidth() {
     28 
     29         return width;
     30 
     31     }
     32 
     33     public void setWidth(double width) {
     34 
     35         this.width = width;
     36 
     37     }
     38 
     39     public double getHeight() {
     40 
     41         return height;
     42 
     43     }
     44 
     45     public void setHeight(double height) {
     46 
     47         this.height = height;
     48 
     49     }
     50 
     51     public String getColor() {
     52 
     53         return color;
     54 
     55     }
     56 
     57     public void setColor(String color) {
     58 
     59         this.color = color;
     60 
     61     }
     62 
     63     public double getArea(){
     64 
     65         double area;
     66 
     67         area=getHeight()*getWidth();
     68 
     69         return area;
     70 
     71     }
     72 
     73     public double getLength() {
     74 
     75         double length;
     76 
     77         length=2*(getHeight()+getWidth());
     78 
     79         return length;
     80 
     81     }
     82 
     83    
     84 
     85 }
     86 
     87 public class Text1
     88 
     89 {
     90 
     91  
     92 
     93     public static void main(String[] args) {
     94 
     95         Rectangle re=new Rectangle(15,20,"black");
     96 
     97         re.out();
     98 
     99         System.out.println("面积:"+re.getArea()+"周长:"+re.getLength());
    100 
    101     }
    102 
    103 }

     

    二,编程思路

    首先建立一个Rectangle类,然后在其中声明width,height,color变量,用于之后的程序步骤,同时将这三个变量封装。在Rectangle中建立构造方法,用于初始化之前声明的三个变量。建立一个out方法用于输出三个变量的值,再然后就是建立三个变量的setter和getter方法,用于取出被封存的三个变量。然后分别建立两个普通方法getArea()getLength(),用于求出面积和周长。

    最后进入主类Text1,首先声明Rectangle的实例对象re,并同时引用构造方法对之前的三个变量初始化。最后用re.outSystem.ouy.println()将三个变量的值以及面积,周长输出。

    三,实验结果

    四,遇到的问题及解决方案:

    这道题是很基础的一道题,我在编译过程中没有出现什么问题。但值得一提的是,我在建立构造方法时,其内部的程序语句使用的格式是this.width=width这一种格式。程序并没有报错,所以,我在setWidth()中设置了一个只有width小于10时才会写入width的if语句。结果使用了this.width=width的写法在收到大于10时的值时依然会将其写入width变量中。结论就是这种写法会导致系统跳过setter中的判断直接将值写入相应变量。以下为截图:

     

     

     1-1,this.width=width的写法直接跳过了setter方法的将值赋给了对应变量

     

     

    1-2,this.setWidth(width)的写法没有跳过setter方法,大于10的没有赋给对应变量。

     

    2,银行的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,开户日期,账户密码(六位的数字,可以用0开头),当前的余额。银行规定新开一个账户时,银行方面提供一个标识符、账户初始密码123456,客户提供姓名,开户时客户可以直接存入一笔初始账户金额,不提供时初始余额为0。定义该类,并要求该类提供如下方法:存款、取款、变更密码、可以分别查询账户的标识、姓名、开户日期、当前余额等信息。

    1,实验源码:

      1 import java.util.*;
      2 import java.text.DecimalFormat;
      3 class Account {
      4     private double money;          //声明成员属性并封装
      5     private String id,key,time,name;
      6     
      7     public void Inoroutmoney() {    //存钱与取钱操作
      8         int a=0,sum=0;
      9         System.out.println("1,存款   2,取款");
     10         System.out.print("请输入需要操作的序号:");
     11         Scanner input=new Scanner(System.in);       //引入Scanner,用于输入操作,对象名input,下同
     12         a=input.nextInt();
     13         DecimalFormat df=new DecimalFormat("0.00");  //控制输出数额的小数点
     14         if(a==1) {
     15             System.out.print("请输入需要存入的金额:");
     16             double money1=input.nextInt();    //输入存入的金额
     17             setMoney(getMoney()+money1);      //将存入的金额保存到money变量中
     18             System.out.println("存款成功! 当前余额:"+df.format(getMoney()));    //输出当前余额,formant()用于控制输出的小数点,下同
     19             System.out.println("******************************************************");
     20         }
     21         if(a==2) {
     22             System.out.print("请输入需要取出的金额:");
     23             double money2=input.nextInt();
     24             if(getMoney()-money2>=0) {    //判断取出的金额是否高于原有的金额
     25             setMoney(getMoney()-money2);
     26             System.out.println("取款成功! 当前余额:"+df.format(getMoney()));
     27             System.out.println("******************************************************");
     28             }
     29             else {
     30                 System.out.println("取款失败! 当前余额为:"+df.format(getMoney()));
     31                 System.out.println("******************************************************");
     32             }
     33         }
     34     }
     35     public void Changekey() {            //修改密码操作
     36         String key1,key2;    //建立两个变量用于保存两次输入的新密码
     37         Scanner input=new Scanner(System.in);
     38         System.out.print("请输入原密码:");
     39         key1=input.nextLine();
     40         if(key1.equals(getKey())) {      //判断输入的密码是否与原密码相同
     41             System.out.print("请输入新密码:");
     42             key1=input.nextLine();     //输入新密码
     43             System.out.print("请再次输入新密码:");
     44             key2=input.nextLine();     //输入新密码
     45             if(key1.equals(key2)) {     //比较两次输入的新密码是否相同
     46                 setKey(key1);          //将新密码赋予key变量
     47                 System.out.println("成功!当前密码为:"+getKey());
     48                 System.out.println("******************************************************");
     49             }
     50             else {
     51                 System.out.println("两次密码不相同!修改失败!");
     52                 System.out.println("******************************************************");
     53             }
     54         }
     55         else {
     56             System.out.println("密码错误!");
     57             System.out.println("******************************************************");
     58         }
     59     }
     60     public void Serchinfo() {                 //查看用户信息操作
     61         System.out.println("账户标识:"+getId());
     62         System.out.println("姓名:"+getName());
     63         System.out.println("开户日期:"+getTime());
     64         System.out.println("当前余额:"+getMoney());
     65         System.out.println("******************************************************");
     66     }
     67     public Account(int money,String id,String name,String key,String time) {   //声明构造方法用于变量初始化
     68         this.setMoney(money);
     69         this.setId(id);
     70         this.setTime(time);
     71         this.setKey(key);
     72         this.setName(name);
     73     }
     74     
     75     public double getMoney() {                 //建立getter和setter方法,用于取出封装的函数
     76         return money;
     77     }
     78     public void setMoney(double money) {
     79         this.money = money;
     80     }
     81     public String getId() {
     82         return id;
     83     }
     84     public void setId(String id) {
     85         this.id = id;
     86     }
     87     public String getKey() {
     88         return key;
     89     }
     90     public void setKey(String key) {
     91         this.key = key;
     92     }
     93     public String getTime() {
     94         return time;
     95     }
     96     public void setTime(String time) {
     97         this.time = time;
     98     }
     99     public String getName() {
    100         return name;
    101     }
    102     public void setName(String name) {
    103         this.name = name;
    104     }
    105     
    106 }
    107 public class Text1 {
    108     public static void main(String[] args) {
    109         int a=0;
    110         Account pr=new Account(0,"031925","三玖","123456789","2019.9.19");  //引用构造方法,并使变量初始化
    111         while(a!=4) {                               //建立循环便于用户多次使用
    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 input=new Scanner(System.in);  
    118             a=input.nextInt();                        //输入序号
    119             if(a==1) {                            //进入对应序号的方法
    120                 pr.Inoroutmoney();
    121             }
    122             if(a==2) {
    123                 pr.Changekey();
    124             }
    125             if(a==3) {
    126                 pr.Serchinfo();
    127             }
    128             if(a==4) {
    129                 System.out.println("感谢使用!");   //结束使用
    130                 break;
    131             }
    132         }
    133     }
    134     
    135 }

     

    2,编程思路:

    首先,需要将我将程序的功能分为五个,分别是显示序号界面和选择序号的操作存款与取款修改密码查询信息用户信息初始化。显示序号界面可以在主类中实现,同时还需要建立while循环以实现重复输入。用户信息初始化的可以建立Account类。然后在其内部声明多个成员变量用于保存用户的各个信息(当然,每个成员变量都是经过封装处理的)同时在Account中声明构造函数,它可以用在之后的用户信息初始化操作,最后,在主类中创建一个Account的实例化对象pr,同时调用构造函数对Account中的成员变量初始化。

    在完成了以上操作后,我们就可以着手程序运行的编程了。首先是选择序号的操作,我们可以在主类中声明一个变量a,并初始化0。在显示完序号选择界面时就输入对应序号至a,然后用if分支结构进行操作的选择,每个if分支中都有一个对应操作的方法。当a为4时就跳出循环并结束使用。

     最后的存取款,改密码和查信息的思路就不在此赘述,都在实验源码的注释中。

    3,实验结果;

     

    一,存款与取款:

     

    1-1,存款操作成功,初始的余额为5000元。

     

    1-2,取款操作成功,显示相应界面。

     

    1-3,取款失败,取出的金额多于余额,同时显示相应界面。

    二,修改密码

     

    2-1,修改密码成功,输入的原密码正确,且两次输入的新密码相同。显示修改成功后的密码。

     

    2-2,密码修改失败,输入的原密码错误。

     

    2-3,密码修改错误,输入的两次新密码不相同。

    三,查询信息

    3-1,查询信息界面。

    四,结束使用

     

    4-1,结束使用界面。

    4,遇到的问题及解决方法:

    本题就结果来说并不算难,但是由于代码量比较大,容易出现细节问题。我平常由于不怎么做练习,所以在做这题时总是出现细节问题,导致延长了做题时间。因此以后需要安排自己做练习的时间。以上是第一点。

    第二点,我在实现存取款功能时出现了两个问题——该如何将存入的钱存入已封装的money变量中和如何在java中控制浮点型变量的小数点后的位数?在参考了网上一些方法后,发现问题一可以用  set变量名1(get变量名1()+变量2+……+变量n)  的格式对已封装的money变量赋值。问题二可以引用DecimalFormat 对象名1=new DecimalFormat(),然后在输出时用   对象名1.format(变量名2)   的格式控制小数点后的位数。

    第四周学习总结

    本周主要学习三个知识点:1,String类  2,数组   3,包的运用

    一,String类

     

    1,String类的常见操作方法

    方法

    作用

    语法示例

    返回值

    split()

    拆分字符串

    String.split(" ")

    子串的数组

    replace()

     将匹配的子串替换为指定的字符串

    String.replace("hi!","hello!")

    替换后的字符串

    search()

     查找特定的文本段

    String.search("hello")

     

    子串在字符串中的第一次出现的位置;

    未找到返回-1。

    match() 

     匹配文本段

    String.match("hello")

    包含所有找到的匹配子串的数组

    toUpperCase()

     转大写

    String.toUpperCase()

    转换后的字符串

     toLowerCase()

    转小写 

    String.toLowerCase()

    转换后的字符串

    charAt() 

    获得指定位置的字符

    String.charAt(0)

    指定位置的字符

    indexOf() 

     获取指定字符串首次出现的位置

    String.indexOf("Hello")

    字符串首次出现的位置

    substring() 

     提取字符串

    String.substring(startPos,stopPos)

    提取到的字符串

    substr()

    提取指定长度的字符串

    String.substr(startPos,length)

    提取到的字符串

    charCodeAt()

    获得指定位置的字符的 Unicode 编码

    "a".charCodeAt(0)

    返回值是 0 - 65535 之间的整数

                                                                                           

     

     

     

     

     

     

    2,String对象的比较

    通常有两种比较方法,用“==”或equals()方法。两种方法的区别是:“==”比较双方的地址,equals()方法比较双方的内容。当地址相同时,内容一定相同,而内容相同时,地址不一定相同。由于字符串的地址不好确定,所以当我们在对字符串进行比较时不要使用“==”比较,而是用equals()方法比较。

     

    3,String类对象实例化方式的区别

    String有两种实例化方式,一种是通过直接赋值,一种是使用标椎的new调用构造方法完成实例。两种方法的区别是:前者是在堆内存空间中开辟好的空间的使用权给了变量,后者是在堆内存中开辟新的空间并将使用权赋予对象。前者在空间利用率方面优于后者,因此教材建议我们对字符串的操作采用直接赋值的方式。

     

    4,字符串的内容不可改变

    这是字符串特别重要的特性,字符串的内容一旦声明则不可改变。

    我们在对一个String对象的内容进行的改变实际上是通过内存地址的“断开”和“连接”变化完成的,而字符串中的内容没有任何变化。

     

     

    二,数组

    1,数组的声明

    数据类型 数组名称[]=null;

    数组名称=new 数据类型[长度];

     

    2,数组的静态初始化

    数据类型 数组名[]={初值0,初值1,……,初值n};

     

    三,包

    包如同文件夹一样,可以将功能相似的类或接口组织在同一个包中。

    语法格式:package pkg1[.pkg2[.pkg3…]];

     

  • 相关阅读:
    <!--[if IE 9]>....<!end if-->
    背景颜色设置
    UIImageView 响应UIButton的点击事件
    响应键盘return事件
    iOS 封装数据请求,解析数据(异步)
    UIImageView 圆角
    JS 控制文本框必须输入值才能查询
    MVC4 @Html.Raw()
    JS加成显示
    随机生成人物名称
  • 原文地址:https://www.cnblogs.com/noacgnnolife/p/11556462.html
Copyright © 2011-2022 走看看