慕课网翁恺老师《面向对象程序设计——Java语言》第一周课程笔记及作业题(设计一个表示分数的Fraction类)
一、类与对象
1.1 用类制造对象
- 对象变量是对象的管理者而非所有者,所以涉及到赋值、函数参数传递和比较都与普通变量有所不同。
- 本节尝试自己定义类,然后用自己定义的类来创建对象;
- 类定义了对象长什么样,对象则是按照类的定义所制造出来的实体,一个类可以创建很多对象。每个对象都有自己的数据。
下载 shapes.zip文件
- 对象是实体,需要被创建,可以为我们做事情;
- 类是规范,根据类的定义来创建对象。
- 对象=属性+服务,数据表示属性或形态,例如画圆时的圆心和半径,
- 把数据和对数据的操作放在一起,称为封装。
1.2 定义类
- 类由两种东西构成:1.表示对象有什么成员变量;2.表示对象能做什么成员函数;
- 一旦定义了类,我们就可以创建这个类的多个对象,这些对象就会做那个类所定义的动作(函数),但是各自具有不同的数据。
举例说明:
package vendingmachine;
public class VendingMachine {int price =80;int balance;int total;void showPrompt(){System.out.println("Welcome");}void insertMorney(int amount){balance = balance +amount;}void showBalance(){System.out.println(balance);}void getFood(){if (balance >= price){System.out.println("Here you are");balance = balance -price;total=total +price;}}//设计了这样的类,三个属性四个动作;public static void main(String[] args) {// TODO Auto-generated method stubVendingMachine vm= new VendingMachine();//创建对象vm.showPrompt();//让对象做事情,变量名字.方法。vm.showBalance();vm.insertMorney(100);vm.getFood();vm.showBalance();}
}
1.3 成员变量和成员函数
1.成员
类才具有成员,包括”成员变量“和**“成员函数”**。
理解对象中的成员变量是怎么来的,怎么就能让成员函数明白自己在和哪个对象打交道;
写在类里的成员变量只是一个声明,变量并不在那里,变量不在类里,变量在每一个对象里;
一定要正确且充分的理解这里面的关系!!!
2.本地变量:
定义在类的函数内部的变量;
本地变量的作用域和生存期在函数的内部。
3.成员变量:
类定义了对象中所具有的变量,这些变量称作成员变量;
写在类里的变量,生存期是对象的生存期,作用域是类内部的成员函数。
每个对象都有自己的变量,和同一个类的其他对象是分开的。
4.函数与成员变量
- 在函数中,可以直接写成员变量的名字来访问成员变量;
v.insertMoney();
//这次调用临时建立了insertMoney()和v之间的关系,让insertMoney()内部的成员变量指的是v的成员变量;
- this是成员函数特殊的(固有的)本地变量,它表达了调用这个函数时的那个对象;
//比如说定义了一个类veningmachine
//我想定义个函数给balance赋值,便可以用到this
public class VendingMachine {int price =80;int balance;//成员变量int total;void setBalance(int balance){this.balance=balance//this.balance是类中的成员变量balance;//等号后面的balance是成员函数setBalance()中的本地变量;}
}
1.4 对象初始化
变量初始化是程序安全很重要的一环。
Java提供了多种手段来保障对象创建时的初始化,包括给每个成员变量默认的“0”值、定义初始化和构造函数。
本课时还涉及了函数重载和用this()来调用其他构造函数的方式。
1.成员变量定义和初始化
- 成员变量在定义的地方就可以给出初始值;
- 未给出初始值的成员变量会自动获得0值;
2.构造函数:
如果有一个成员函数的名字和类的名字完全相同,则在创建这个类的每一个对象的时候会自动调用这个函数——》构造函数
在构造(对象)的时候会自动调用的函数叫作:构造函数。
构造函数不能有返回类型;
public class VendingMachine {int price =80;int balance;//成员变量int total;VendingMachine()//构造函数,在构造的时候会被自动调用的函数{total=0;}VendingMachine(int price)//构造函数2,我们可以有多个构造函数,但是二者的参数应该不同;{this.price=price;} } //至于定义对象时调用何种构造函数,主要看定义对象时参数的选择; //两个构造函数的关系叫做重载
3.函数重载
一个类可以有多个构造函数,只要它们的参数表不同;它们构成了重载关系(overload)
创建对象的时候给出不同的参数值,就会自动调用不同的构造函数;
通过this()还可以调用其它构造函数;
一个类里的同名但参数表不同的函数构成了重载关系。
作业题
题目内容
设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。
这个类的构造函数是:
Fraction(int a, int b)
构造一个a/b的分数。
这个类要提供以下的功能:
double toDouble();
将分数转换为double
Fraction plus(Fraction r);
将自己的分数和r的分数相加,产生一个新的Fraction的对象。注意小学四年级学过两个分数如何相加的哈。
Fraction multiply(Fraction r);
将自己的分数和r的分数相乘,产生一个新的Fraction的对象。
void print();
将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。
注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。
你写的类要和以下的代码放在一起,并请勿修改这个代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {Scanner in = new Scanner(System.in);Fraction a = new Fraction(in.nextInt(), in.nextInt());Fraction b = new Fraction(in.nextInt(),in.nextInt());a.print();b.print();a.plus(b).print();a.multiply(b).plus(new Fraction(5,6)).print();a.print();b.print();in.close();}
}
注意,你的类的定义应该这样开始:
class Fraction {
也就是说,在你的类的class前面不要有public。
输入格式:
程序运行时会得到四个数字,分别构成两个分数,依次是分子和分母。
输出格式:
输出一些算式。这些输入和输出都是由Main类的代码完成的,你的代码不要做输入和输出。
输入样例:
2 4 1 3
输出样例:
1/2
1/3
5/6
1
1/2
1/3
代码实现
//作业提交时拷贝以下的代码
import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner in = new Scanner(System.in);Fraction a = new Fraction(in.nextInt(),in.nextInt());Fraction b = new Fraction(in.nextInt(),in.nextInt());a.print();b.print();a.plus(b).print();a.multiply(b).plus(new Fraction(5,6)).print();a.print();b.print();in.close();}}
class Fraction{int n;int d;//分子和分母两个属性//4个动作Fraction(int n, int d)//建立构造函数{this.n=n;this.d=d;}double toDouble()//表示返回double的类型{return n/(double)d;//将分数转换为double}Fraction plus(Fraction r)//表示返回Fraction的类型{Fraction x= new Fraction(1,1);x.n=r.n*d+r.d*n;x.d=r.d*d;return x;}Fraction multiply(Fraction r){Fraction x=new Fraction(1,1);x.n=n*r.n;x.d=d*r.d;return x;}void print(){if (n==d){System.out.println(1);}else{if (d==0){System.out.println("分母不能为0");}else{//判断分子分母之间是否有公约数int a=n;int b=d;int max=1;if (n>d){int temp=a;a=b;b=temp;}for (int i=2;i<=a;i++){if(a%i==0 && b%i==0){max=i;}}n=n/max;d=d/max;System.out.println(n+"/"+d);}}}
}
慕课网翁恺老师《面向对象程序设计——Java语言》第一周课程笔记及作业题(设计一个表示分数的Fraction类)相关推荐
- 四十八.面向对象程序设计——Java语言第一周编程题:分数
题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要 ...
- 【Java】《面向对象程序设计——Java语言》Castle代码修改整理
前言 最近闲来无事刷刷MOOC,找到以前看的浙大翁凯老师的<面向对象程序设计--Java语言>课程,重新过一遍仍觉受益颇深. 其中有一个Castle的例子,思路很Nice但代码很烂,翁凯老 ...
- 面向对象程序设计——Java语言 第3周编程题 查找里程(10分)
面向对象程序设计--Java语言 第3周编程题 查找里程(10分) 题目内容 下图为国内主要城市之间的公路里程: 你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程. ...
- 201871010115——马北《面向对象程序设计JAVA》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 《面向对象程序设计——Java语言·翁恺》第3周编程题 查找里程
题目概述: 已知国内主要城市之间的公路里程表.读入这样的一张表城市里程表(部分数据),然后根据输入的两个城市的名称,给出这两个城市之间的里程. 题目链接: https://www.icourse163 ...
- java isprime函数_翁恺老师零基础java课程函数章第一题分解质因数
分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在 ...
- 两个多精度十进制数加法程序设计_翁恺老师的程序设计入门——C语言 第四周习题...
第一题 奇偶个数 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据.程序输出读到的数据中的奇数和偶数的个数.输入格式: 一系列正整数,整数的范围是(0,1000 ...
- 程序设计入门——C语言(翁恺老师)我的作业
程序设计入门--C语言(翁恺老师)我的作业 第一周 程序设计与C语言 1 输出"Hello World"(5分) 题目内容: 请输出一行,内容为 Hello World 请注意大小 ...
- 面向对象程序设计-C++(视频) 浙江大学 翁恺老师
网易云课堂视频转存:面向对象程序设计-C++(视频) 浙江大学 翁恺老师 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012183487/art ...
- 翁恺老师Java进阶城堡游戏源码
刚开始学习Java,在比站发现了翁恺老师的课程,讲的很不错.Castle源码我找了很久都没有找到老师课上自己讲的那个程序,于是我决定做一回搬运工,自己敲了出来,现在也方便一下大家,大家一起学习,一起进 ...
最新文章
- 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发
- python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>
- Global Average Pooling对全连接层的可替代性分析
- Arduino教程:MPU6050的数据获取、分析与处理
- Apahce的虚拟用户认证及server-status页
- usb接口多少钱_工控机一般有多少个串口
- mysql导出表数据
- 这10个实用的Javascript调试技巧,你知道吗?
- oracle同机单实例加入集群,将oracle同机单实例加入rac集群的操作步骤
- 数学与计算机教学设计,数学和信息技术整合的思考 教案教学设计
- 丢人丢到国外去了,国内定制版Flash被国外安全厂商撕开了面纱!
- VJC案例-查找最大值
- 如何书写软件应用发明专利说明书(实例)
- jsp js弹出网页对话框
- 汇总报表与合并报表之如何汇总报表
- Android 虚拟机EditText键盘无法输入解决方法
- mysql mmm优缺点_mysql之MMM总结
- 滴滴Logi-KafkaManager对接夜莺实现告警配置
- Windows AD证书服务系列---部署CA(1)
- Halcon 《ML_MLP》网格缺陷检测
热门文章
- snapchat中国使用_如何在不共享位置的情况下使用Snapchat
- 相机模型(针孔模型+畸变模型)
- tcl怎么实现从服务器拷贝文件夹,如何在TCL中二进制读取文件并通过XMLRPC将其发送到用Python编写的服务器?...
- 计算机网络的对学生的利弊英语作文,关于电脑利弊的英语作文
- 7-12 分解质因数 (10分)
- 麦子学院视频教程笔记
- 嵌入式系统开发-麦子学院(11)——ARM Cortex A8 硬件基础(1)
- C语言编程 - 推箱子小游戏源码分享 (含过关)
- promise跟ajax区别,Promise和AJAX有什么区别?
- java-阴历日期和阳历日期互相转换