下载 shapes.zip文件
举例说明:
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 stub
VendingMachine vm= new VendingMachine();//创建对象
vm.showPrompt();//让对象做事情,变量名字.方法。
vm.showBalance();
vm.insertMorney(100);
vm.getFood();
vm.showBalance();
}
}
1.成员
类才具有成员,包括”成员变量“和**“成员函数”**。
理解对象中的成员变量是怎么来的,怎么就能让成员函数明白自己在和哪个对象打交道;
写在类里的成员变量只是一个声明,变量并不在那里,变量不在类里,变量在每一个对象里;
一定要正确且充分的理解这里面的关系!!!
2.本地变量:
定义在类的函数内部的变量;
本地变量的作用域和生存期在函数的内部。
3.成员变量:
类定义了对象中所具有的变量,这些变量称作成员变量;
写在类里的变量,生存期是对象的生存期,作用域是类内部的成员函数。
每个对象都有自己的变量,和同一个类的其他对象是分开的。
4.函数与成员变量
v.insertMoney();
//这次调用临时建立了insertMoney()和v之间的关系,让insertMoney()内部的成员变量指的是v的成员变量;
//比如说定义了一个类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()中的本地变量;
}
}
变量初始化是程序安全很重要的一环。
Java提供了多种手段来保障对象创建时的初始化,包括给每个成员变量默认的“0”值、定义初始化和构造函数。
本课时还涉及了函数重载和用this()来调用其他构造函数的方式。
1.成员变量定义和初始化
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 stub
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{
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);
}
}
}
}