6.oop-类和对象

一.如何抽象对象
1.创建一个类
2.给该描述属性
属性就是java中所有的数据类型
3.给该类定义行为方法
方法的签名是:public void 方法名(){方法体}
公共的 无返回类型

二.如何使用类和对象
1.创建类的对象实例
Student stu = new Student();
2.访问对象的属性和方法:通过对象名.属性名或者方法名
例如:stu.name = "张三";
stu.study();

三.构造方法
1.定义:构建一个类的对象的方法
2.特点:和类名一致,没有返回类型
3.调用:通过new关键字来调用

四.带参数和返回类型的方法
1.方法的签名:访问修饰符 返回类型 方法名(形参数列表){方法体}
例如:public double calculate(double num1,double num2){}
2.返回类型:是方法执行完后返回的数据类型,在方法体中必须出现return关键字
3.return关键字除了返回数据之外还可以结束当前方法
4.在void的方法中也可以使用return关键字,但不能返回数据,只是结束方法
5.在调用带参数的方法时注意实参要和形参的个数,顺序,类型完全一致
6.调用带返回类型的方法,一般都用变量来接收返回值

五.例子

1.抽象出一个老师类,描述其属性和方法
测试类中,创建老师类对象,给其属性赋值,然后调用其方法

2.完成一个景区售票机的案例,游客如果年龄在8岁以下是全免,8-15岁是半票,15以上是成人票。
要求写一个程序完成买票过程。要求是用类和对象来实现
a.分析该案例中有哪些对象
b.完成对象的抽象(描述属性和方法)
c.编写测试类,测试数据

业务修改:除了年龄,根据性别有了新的业务需求:
1.性别为女,15岁以下 全免,60岁以上也是全免 15--60都是成人票
2。性别为男买票规则不变

3.编写一个计算器的程序,完成各项运算。完成一次运算
要求:面向对象的编程思想

4.编写一个榨汁器:根据用户输入的不同水果,榨出不同的饮料。
要求,用带返回值和参数的方法完成

package com.demo1102;
/**
 * 类和对象的案例
 * @author allen
 *
 */
public class Demo1 {
	public static void main(String[] args) {
		Student stu = new Student();//创建了一个学员实例对象
		//新构建出来的对象中的属性全部为默认初始值
		//访问属性和方法
		stu.name = "张三";
		stu.age = 18;
		stu.sex = "女";
		stu.phone = "110";
		
		//访问方法
		stu.study();
		stu.intrduce();
	}
}
//一个类中可以由多个类,但是public修饰的类必须和文件名相同
class Student{
	String name;
	String sex;
	int age;
	String phone;
	double height;
	
	public Student() {
		//此方法为构造方法,含义是创建该类的对象时被调用
	}
	
	public void study(){
		System.out.println("我好好学员,天天向上");
		System.out.println("偶尔抽空撸两把");
	}
	
	public void intrduce(){
		System.out.println("我的名字是:"+name+",我今年"+age+"岁,我的手机号码是:"+phone+",欢迎骚扰");
	}
}

  

package com.demo1102;

import java.util.Scanner;
/**
 * 买票案例
 * @author allen
 *
 */
public class Demo2 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("请输入您的年龄:");
		Guest g = new Guest();
		g.age = s.nextInt();
		
		System.out.println("请输入性别:");
		g.sex = s.next();
		g.ticket();
	}
}

class Guest{
	int age;
	String sex;
	
	public void ticket(){
		if("男".equals(sex)){
			if(age<8){
				System.out.println("全免");
			}else if(age>=8&&age<15){
				System.out.println("半票");
			}else if(age>=15){
				System.out.println("成人票");
			}
		}else if("女".equals(sex)){
			if(age<=15){
				System.out.println("全免");
			}else if(age>15&&age<=60){
				System.out.println("成人票");
			}else if(age>60){
				System.out.println("全免");
			}
		}else{
			System.out.println("你可以上天了");
		}
		
		
		
	}
}

  

package com.demo1102;

import java.util.Scanner;

import javax.security.sasl.SaslClient;
/**
 * 计算器案例
 * @author allen
 *
 */
public class Calculate {
	double num1;
	double num2;
	String type;
	double result;
	
	public void count(){
		 switch(type){
		 case "+":
			 result = num1+num2;
			 break;
		 case "-":
			 result = num1-num2;
			 break;
		 case "*":
			 result = num1*num2;
			 break;
		 case "/":
			 result = num1/num2;
			 break;
		 case "%":
			 result = num1%num2;
			 break;
		 }
		 System.out.println("result="+result);
	}
	
	
	
	public void test(){
		int a=1;
		if(a!=1){
			return;//return在此处的作用就是结束当前方法
		}
		System.out.println("程序结束");
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Calculate c = new Calculate();
		System.out.println("请输入第一个数:");
		c.num1 = sc.nextDouble();
		System.out.println("请输入运算符号:");
		c.type = sc.next();
		System.out.println("请输入第二个数:");
		c.num2 = sc.nextDouble();
		
		c.count();
	}
}
package com.demo1102;

import java.util.Scanner;

/**
 * 榨汁器案例
 * @author allen
 *
 */
public class Demo4 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要榨汁的水果:");
		String shuiguo = sc.next();
		
		Juicer j = new Juicer();
		String result = j.juicing(shuiguo);
		System.out.println("您炸的"+result+"已经好了");
	}
}

class Juicer{
	public String juicing(String fruit){
		System.out.println("正在榨汁.....");
		try {
			Thread.sleep(5000);//模拟一个5秒的等待过程
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return fruit+"汁";
	}
}

 

/*
 * 3.编写一个计算器的程序,完成各项运算。
要求:面向对象的编程思想
 */
package com.class1102;

import java.util.Scanner;

public class Class03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		Operate o=new Operate();
		System.out.println("请输入第一个数");
		o.a=sc.nextDouble();
		System.out.println("请输入第二个数");
		o.b=sc.nextDouble();
		System.out.println("请输入操作符");
		o.sign=sc.next();
		o.js();
	}

}

class Operate{
	double a,b,result;
	String sign;
	
	public Operate(){
		
	}
	
	public void js(){
		if(sign.equals("+"))
		{
			result=a+b;
		}else if(sign.equals("-"))
		{
			result=a-b;
		}else if(sign.equals("*"))
		{
			result=a*b;
		}else if(sign.equals("/"))
		{
			result=a/b;
		}
		System.out.println("计算结果为:"+result);
	}
}

 

/*
 * 1.写一个类描述笔记本电脑:
属性有:品牌,重量,cpu型号,内存大小,硬盘大小,显卡型号
方法有:显示笔记本基本信息 showInfo()
编写测试类:给笔记本对象属性赋值,调用显示笔记本基本信息方法展示给客户
 */
package com.class1102;

import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Notebook nt=new Notebook();
		nt.sign="宏碁(acer)";
		nt.weight=1.3;
		nt.cpu="N3450";
		nt.memory=4;
		nt.hdisk=128;
		nt.dcard="集成显卡";
		nt.showInfo();	
	}

}

class Notebook{
	String sign;
	double weight;
	String cpu;
	int memory;
	int hdisk;
	String dcard;
	public void showInfo()
	{
		System.out.println("该笔记本品牌是:"+sign+",");
		System.out.println("该笔记本重量是:"+weight+"kg,");
		System.out.println("该笔记本cpu型号是:"+cpu+",");
		System.out.println("该笔记本内存大小是:"+memory+"G,");
		System.out.println("该笔记本硬盘大小是:"+hdisk+"G,");
		System.out.println("该笔记本显卡型号是:"+dcard+",");
	}
	
}

  

/*
 * 2.写一个个人所得税计算器,用户输入税前工资,计算得到税后工资
要求用带参数和返回类型的方法
规则:个税起征点为3500
    超过部分		税点
  1500以内        5%
  1500-3000 10%
  3000-5000 15%
  5000-8000 20%
  8000以上        25%
 */
package com.class1102;

import java.util.Scanner;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		TaxCalculator tc=new TaxCalculator();
		System.out.println("请输入税前工资");
		tc.count(sc.nextDouble());
	}

}

class TaxCalculator{
	public double count(double i)
	{
		double result=0;
		if(i<=3500)
		{
			result=i;
		}else if(i>3500&&i<5000)
		{
			result=3500+(i-3500)*(1-0.05);
		}else if(i>=5000&&i<6500)
		{
			result=3500+1500*(1-0.05)+(i-5000)*(1-0.1);
		}else if(i>=6500&&i<8500)
		{
			result=3500+1500*(1-0.05)+1500*(1-0.1)+(i-6500)*(1-0.15);
		}else if(i>=8500&&i<11500)
		{
			result=3500+1500*(1-0.05)+1500*(1-0.1)+2000*(1-0.15)+(i-8500)*(1-0.2);
		}else{
			result=3500+1500*(1-0.05)+1500*(1-0.1)+2000*(1-0.15)+3000*(1-0.2)+(i-11500)*(1-0.25);
		}
		System.out.println("税后工资为:"+result);
		return result;
	}
	
}

  

 

/*
 * 3.完成一个自动摇奖机
摇奖机可以由工作人员设置奖品,然后随机抽奖
思路:
设计一个摇奖机类
属性:是一个奖品数组
方法: 
	方法一 :设置奖品方法
	方法二:随机抽出奖品
测试类:
第一步工作人员设置奖品,第二步,工作人员完成抽奖
 */
package com.class1102;

import java.util.Random;
import java.util.Scanner;

public class Test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		Random r=new Random();
		
		Ernie e=new Ernie();
		String s[]=new String[7];
		for(int j=0;j<e.prize.length;j++)
		{
			System.out.println("请输入第"+j+"个奖品");
			s[j]=sc.nextLine();
		}
		e.setErnie(s);
		
		System.out.println("开始抽奖");
		String j=e.getERnie(r.nextInt(8));
		System.out.println("奖品是"+j);

		
	}

}

class Ernie{
	String prize[]=new String[7];;
	public void setErnie(String s[])
	{
		for(int i=0;i<prize.length;i++)
		{
			prize[i]=s[i];
		}
	}
	public String getERnie(int t)
	{
		String p=null;
		for(int i=0;i<prize.length;i++)
		{
			if(t==i)
			{
				p=prize[i];
			}
		}
		return p;
	}

}

  

 

 

 

六.小游戏  

/*
 * 1.猜数字游戏:
系统会自动生成0-9的不重复的4个数字 例如:8350
用户有8次机会来猜这些数字的,不仅要数字正确,顺序也要正确才为答对
每次用户都是输入4个数字,系统给出相应的提示:
提示规则:数字和位置正确的提示A   数字正确但位置不正确的提示B
例如:用户输入1234  系统提示:0A1B
           用户第二次:5678   系统提示:0A2B
           用户第三次:0912   系统提示:0A1B
           用户第四次:1203   系统提示:0A2B
           用户第五次:3051   系统提示:1A2B
           用户第六次:
 Random r = new Random();
 r.nextInt(10);0-9       
 */
package com.class1101;

import java.util.Random;
import java.util.Scanner;

public class Class01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[]=new int[4];
		Random r=new Random();
		
		for(int i=0;i<arr.length;i++)
		{
			arr[i]=r.nextInt(10);
			for(int j=0;j<i;j++)
			{
				while(arr[i]==arr[j])
				{
				    arr[i]=r.nextInt(10);
				}
			}
			//System.out.print(arr[i]+" ");
		}
		
		Scanner sc=new Scanner(System.in);
		int num;
		int arr2[]=new int[4];
		for(int i=1;i<9;i++)
		{
			System.out.print("请输入第"+i+"个数:");
			num=sc.nextInt();
			arr2[0]=num/1000;
			arr2[1]=(num%1000)/100;
			arr2[2]=(num%1000)%100/10;
			arr2[3]=(num%1000)%100%10;
			int a=0;
			int b=0;
			for(int j=0;j<arr2.length;j++)
			{
				//System.out.print(arr2[j]+" ");
				if(arr2[j]==arr[j])
				{
					a++;
				}else{
					for(int k=0;k<arr.length;k++)
					{
						if(arr2[j]==arr[k])
						{
							b++;
						}
					}
				}
			}
			if(a==4)
			{
				System.out.println("恭喜猜中数字");
				break;
			}else
			{
				System.out.println("提示:"+a+"A"+b+"B");
			}
		}
		
	}

}

  

/*
 *  2.穿越火线
 用二维数组生成一个15*15的地图,全部用方块表示□
 随机生成用户位置用三角形△表示,随机生成目的位置用五角星☆表示,在地图上随机生成20个地雷用户不可见。
用户选择上下左右移动位置,每次移动一格,移动后要显示用户走过的路程用○表示。踩上地雷身亡,顺利到达目标则为胜利!
 */
package com.class1101;

import java.util.Random;
import java.util.Scanner;

public class Class02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		char arr[][]=new char[15][15];
		Random r=new Random();
		
		//1、随机生成起点和终点的坐标,并使两点不重复
		int r1=r.nextInt(arr.length);
		int r2=r.nextInt(arr[0].length);
		int s1=r.nextInt(arr.length);
		int s2=r.nextInt(arr[0].length);
		while(r1==s1&&r2==s2)
		{
		    r1=r.nextInt(arr.length);
		}
		
		//2、生产20个地雷的坐标,并使其本身不重复,和起点、终点也不重复
		int d1[]=new int[20];
		int d2[]=new int[20];
		for(int i=0;i<d1.length;i++)
		{
			d1[i]=r.nextInt(arr.length);
			d2[i]=r.nextInt(arr.length);
			for(int j=0;j<i;j++)
			{
				while(d1[i]==d1[j]&&d2[i]==d2[j]||d1[i]==r1&&d2[i]==r2||d1[i]==s1&&d2[i]==s2)
				{
					d1[i]=r.nextInt(arr.length);
					d2[i]=r.nextInt(arr.length);
				}
			}
		}
		
	    int t1[]=new int[arr.length];
	    int t2[]=new int[arr.length];
	    int t3=0;
		//int t1=-1,t2=-1;
		while(true)
		{
			//3.通过键盘输入移动用户位置
			String key=sc.nextLine();
		    if(key.equals("w")){
			    if(r1>0)
			    {
			    	r1--;
			    }
		    }else if(key.equals("s"))
		    {
		    	if(r1<arr.length-1)
			    {
			    	r1++;			 
			    }
		    }else if(key.equals("a"))
		    {
		    	if(r2>0)
			    {
			    	r2--;			 
			    }
		    }else if(key.equals("d"))
		    {
		    	if(r2<arr.length-1)
			    {
			    	r2++;			 
			    }
		    }
		    
		    //4.判断用户是否踩到地雷,如果踩到,游戏失败。
			boolean b=false;
		    for(int i=0;i<d1.length;i++)
		    {
		    	if(r1==d1[i]&&r2==d2[i])
		    	{
		    		b=true;
		    		System.out.println("踩到地雷,游戏失败");
		    		break;
		    	}
		    }
		    if(b)
		    {break;}


		    //5.输出游戏界面
		    int i,j=0;
		    for(i=0;i<arr.length;i++)
		    {
			    for(j=0;j<arr[i].length;j++)
			    {
				    if(i==r1&&j==r2)
				    {
				    	arr[i][j]='△';
				    }else if(i==s1&&j==s2){
				    	arr[i][j]='☆';
				    }else{
				    	arr[i][j]='□';
				    	for(int k=0;k<t3;k++ )
				    	{
					    	arr[t1[k]][t2[k]]='○';	
				    	}

				    	
				    	/*if(i==t1&&j==t2)
				    	{
				    		arr[i][j]='○';
				    	}else{
				    		arr[i][j]='□';
					    	}*/
				    }
				    System.out.print(arr[i][j]+"\t");

				    
			    }
			    System.out.println();
		    }
		    t1[t3]=r1;
		    t2[t3]=r2;
		    t3++;
		    //t1=r1;
		    //t2=r2;

		    //6.当用户成功到达终点时,游戏胜利。
		    if(r1==s1&&r2==s2){
		    	System.out.println("胜利!");
		    	break;
		    }
		}
		

	}

}

  

 

  

 

posted @ 2019-02-05 22:40  五柳先生柳三变  阅读(310)  评论(0编辑  收藏  举报