前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第八天 自定义类型方法集合混合使用【悟空教程】

第八天 自定义类型方法集合混合使用【悟空教程】

作者头像
Java帮帮
发布2018-06-11 11:59:36
7320
发布2018-06-11 11:59:36
举报

第08天 自定义类型&方法&集合混合使用

第1章 引用类型作为参数与返回值

1.1 引用类型是一种数据类型

自定义引用类型与int、double等数据类型相同,均是一种数据类型。当方法定义参数与返回值类型时,可以定位基本数据类型,也可以定义为引用数据类型,二者在定义上没有任何差别。

基本类型与引用类型传参过程中,仅仅是值的数据类型不同。

如:

基本类型int传参时,赋值为10,是一个具体数值

引用类型Person传参时,赋值为new Person(),是一个地址值,如0x8372

1.2 引用类型定义方法与返回值为参数练习

1.定义方法,基本类型作为参数 如:求两个数的和

/*

定义方法,基本类型作为参数 如:求两个整数的和

*/

public class Test1

{

public static void main(String[] args)

{

int a = 10;

int b = 20;

int he = sum(a,b);

System.out.println(he);

System.out.println(a);

System.out.println(b);

}

//求两个整数的和 参数 两个整数 返回值 一个整数

public static int sum(int a, int b){

a = 2 * a;

b = 2 * b;

int he = a + b;

return he;

}

}

2.定义方法,数组作为参数 如:打印数组中所有偶数

/*

定义方法,数组作为参数 如:打印数组中所有偶数

*/

public class Test2

{

public static void main(String[] args)

{

int[] arr ={3,8,2,5,0};

showOuShu(arr);

}

//打印数组中所有偶数 参数 一个整数数组 返回值 无

public static void showOuShu(int[] arr){

int count = 0;

//遍历数组,依次获取数组中每个数值,判断这个数值是否为偶数,如果是则打印

for(int i = 0 ;i<arr.length;i++){

//依次获取数组中每个数值

int number = arr[i];

//判断这个数值是否为偶数

if(number % 2 ==0){

//如果是则打印

System.out.println(number);

count++;

}

}

System.out.println("偶数个数:"+count);

}

}

3.定义方法,集合作为参数 如:打印集合中所有偶数

/*

定义方法,集合作为参数 如:打印集合中所有偶数

*/

//导入ArrayList

import java.util.ArrayList;

public class Test3

{

public static void main(String[] args)

{

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(3);

list.add(8);

list.add(2);

list.add(5);

list.add(0);

showOuShu(list);

}

//打印集合中所有偶数 参数 一个存储整数的集合 返回值 void

/*

遍历集合

依次获取集合中所有的数据

判断数据是否为偶数

如果是 则打印

*/

public static void showOuShu(ArrayList<Integer> list){

//遍历集合

for(int i = 0 ;i < list.size();i++){

//依次获取集合中所有的数据

int number = list.get(i);

//判断数据是否为偶数

if(number % 2 == 0){

System.out.println(number);

}

}

}

}

4.定义方法,自定义数据类型作为参数 如:将一个人的年龄增长10岁

public class Person

{

String name;

int age;

}

/*

定义方法,自定义数据类型作为参数 如:将一个人的年龄增长10岁

*/

public class Test4

{

public static void main(String[] args)

{

Person p = new Person();

addAge(p);

System.out.println("---------------------------");

System.out.println(p.age);

}

//将一个人的年龄增长10岁 参数 一个人 返回值 void

public static void addAge(Person p){

p.age+=10;

System.out.println(p.age);

}

}

同样,我们也可以尝试各种数据类型作为返回值使用。

1.3 引用类型传参与基本类型传参区别

  • 当基本类型传参时,栈内存中,各个方法内的变量互不相关,仅存在一个相互赋值的动作。
  • 当引用类型传参时,各个方法内的引用变量指向同一个堆内存中的对象,任何一个引用修改了对象,其他引用再使用时,均访问的是修改后的变量。

/*

自定义数据类型 Animal类

属性

姓名 String

年龄 int

种类 String

*/

public class Animal

{

String name;

int age;

String kind;

}

/*

定义一个方法 从一群小动物中,找出所有年龄大于3的小动物,将这些小动物放在一个集合中,并返回,在main方法中遍历返回的集合,打印所有年龄大于3的小动物的信息

*/

//导入ArrayList

import java.util.ArrayList;

public class Test5

{

public static void main(String[] args)

{

//存储所有动物的集合

ArrayList<Animal> list = new ArrayList<Animal>();

//向集合中添加动物

Animal a1 = new Animal();

a1.name = "柳岩";

a1.age = 38;

a1.kind = "女人";

Animal a2 = new Animal();

a2.name = "点点";

a2.age = 3;

a2.kind = "斑点狗";

Animal a3 = new Animal();

a3.name = "小白";

a3.age = 2;

a3.kind = "白痴猫";

Animal a4 = new Animal();

a4.name = "小金";

a4.age = 4;

a4.kind = "金丝猴";

//将所有动物存储到集合中

list.add(a1);

list.add(a2);

list.add(a3);

list.add(a4);

//调用检查年龄的方法 返回一个年龄大于3的动物的集合

ArrayList<Animal> checkList = checkAnimals(list);

//遍历返回的集合,打印所有年龄大于3的小动物的信息

for(int i = 0 ;i < checkList.size();i++){

//依次获取每个年龄大于3的小动物

Animal thisA = checkList.get(i);

System.out.println("姓名:"+thisA.name);

System.out.println("年龄:"+thisA.age);

System.out.println("品种:"+thisA.kind);

System.out.println("------------------------");

}

}

/*

1.定义一个动物类

2.定义方法 方法参数 一个存储所有动物的集合 返回值 一个存储所有年龄大于三的动物的集合

a.定义一个集合用来存储年龄大于3的动物

b.遍历所有动物的集合,依次获取每个动物

c.判断每个动物的年龄是否大于3

d.如果大于3,将当前这个动物存储到年龄大于三的动物的集合

e.返回 年龄大于3的动物的集合

*/

public static ArrayList<Animal> checkAnimals(ArrayList<Animal> list){

//定义一个存储年龄大于3动物的集合

ArrayList<Animal> checkList = new ArrayList<Animal>();

//遍历所有动物的集合 list

for(int i = 0 ;i < list.size();i++){

//依次获取每个动物

Animal thisA = list.get(i);

//判断每个动物的年龄是否大于3

if(thisA.age >3){

//将当前这个动物存储到年龄大于三的动物的集合

checkList.add(thisA);

}

}

//返回 年龄大于3的动物的集合

return checkList;

}

}

第2章 综合案例---超市购物小票封装自定义类

2.0.1 案例介绍与演示

将超市购物小票案例中零散数据(名称、货号、单价、计价单位等)封装为货物对象。

2.0.2 案例分析

a) 案例回顾

在超市购物小票案例中,我们封装了三个方法,在switch中为3个case执行用户选择的三个不同的操作:1输入购买数量 2打印购物小票 3退出系统

而所有的变量均”零散地”定义在成员位置。

b) 重构内容分析

1:将原来的成员位置零散定义的变量,封装为商品项GoodsItem对象。

2:将所有使用变量值的地方全部改为使用GoodsItem对象

c) 实现步骤

  • 定义Person类

定义Person类,包含成员变量名称、年龄、地址

  • 重构使用到变量的逻辑

将所有使用到成员位置商品属性的代码处,均由直接使用改为通过对象名访问对象属性的方式。

/*

自定义数据类型 商品项类

属性

商品名称 String

商品id String

商品单价 double

商品数量 int

商品金额 double

*/

public class GoodsItem

{

//商品名称

String name;

//商品id

String id;

//商品单价

double price ;

//商品数量

int number;

//商品金额

double money;

}

/*

使用switch语句完成三个分支的代码逻辑

当用户输入1时,让用户输入所要购买的商品数量

当用户输入2时,给用户打印出对应的购物小票

当用户输入3时,退出系统

1.定义商品数据

2.提示用户输入相对应的操作 1.输入商品数量 2.打印小票 3.退出系统

3.接收用户输入的选择

4.使用switch进行判断

5.整体是一个死循环

代码重构

1.定义一个商品项类

2.在成员位置创建两个商品对象

3.给两个商品对象的属性赋值

定义一个方法为商品对象初始化属性的方法 方法名 init 参数 无 返回值 无

4.修改购买方法和打印小票方法 因为里边访问的变量都不存在了 需要改成商品对象去访问属性的方式

*/

//导入Scanner

import java.util.Scanner;

public class Supermarket

{

//定义少林寺酥饼核桃商品对象

static GoodsItem sls = new GoodsItem();

//定义然光Q移商品对象

static GoodsItem rg = new GoodsItem();

public static void main(String[] args)

{

//调用init方法 用来初始化数据

init();

while(true){

//提示用户输入相对应的操作 1.输入商品数量 2.打印小票 3.退出系统

System.out.println("请输入您的操作:1.输入商品数量 2.打印购物小票 3.退出系统");

//接收用户输入的选择 使用Scanner完成

// Scanner sc = new Scanner(System.in);

//调用nextInt方法 接收用户的选择

// int choose = sc.nextInt();

//调用键盘录入整数方法enterNumber接收用户输入的选择

int choose = enterNumber();

//使用switch进行判断用户的选择

switch(choose){

case 1:

//调用buy方法 完成用户输入商品数量

buy();

break;

case 2:

//调用printTicket方法 打印购物小票

printTicket();

break;

case 3:

System.out.println("爱买不买,下次带钱来!!");

System.exit(0);

break;

default:

System.out.println("你瞎啊!");

break;

}

}

}

//定义一个方法为商品对象初始化属性的方法 方法名 init 参数 无 返回值 无

public static void init(){

//给少林寺对象赋值

sls.name = "少林寺酥饼核桃";

sls.id = "090115";

sls.price = 15.50;

//给然光对象赋值

rg.name = "然光Q移";

rg.id = "090028";

rg.price = 16.00;

}

//定义一个键盘录入整数的方法 方法名 enterNumber 需要的数据 无 返回的数据 一个用户输入的整数

public static int enterNumber(){

Scanner sc = new Scanner(System.in);

int number = sc.nextInt();

return number;

}

//将用户输入商品数量封装成方法 方法名 buy 需要的数据 无 返回的数据 无

public static void buy(){

Scanner sc = new Scanner(System.in);

//依次让用户给每个商品的数量重新赋值

System.out.println("请输入少林寺酥饼核桃的购买数量:");

sls.number = sc.nextInt();

sls.money = sls.number*sls.price;

System.out.println("请输入然光Q移的购买数量:");

rg.number = sc.nextInt();

rg.money = rg.number*rg.price;

}

//打印购物小票方法 方法名 printTicket 需要的数据 无 返回的数据 无

public static void printTicket(){

//===============票头=========================

System.out.println(" 欢 迎 光 临");

System.out.println("品名 售价 数量 金额");

System.out.println("-------------------------------------");

//===============票体=========================

System.out.println(sls.name+"("+sls.id+")"+" "+sls.price+" * "+sls.number+" = "+sls.money);

System.out.println(rg.name+"("+rg.id+")"+" "+rg.price+" * "+rg.number+" = "+rg.money);

System.out.println("-------------------------------------");

//===============票脚=========================

//项数

int lineNumber = 2;

//总数量

int totalNumber = sls.number + rg.number;

//总金额

double totalMoney = sls.money + rg.money;

System.out.println(lineNumber+" 项商品 共计:"+totalNumber+" 件");

System.out.println("总计:"+totalMoney);

}

}

第3章 综合案例---超市购物小票数据使用集合

3.0.1 案例介绍与演示

将本日第二章内容所有的Person对象放置到集合中使用。

3.0.2 案例分析

a) 重构内容分析

1:将原来的成员位置的多个商品项GoodsItem对象封装到一个ArrayList集合中

2:将所有使用变量值的地方全部改为先从集合中后去对象,再使用GoodsItem对象获取属性值的方式。

b) 实现步骤

  • 成员位置定义ArrayList集合
  • 定义方法,用于为集合赋值,准备要操作的数据。
  • 重构使用到变量的逻辑

将所有使用到成员位置商品项的代码处,均由使用对象名访问对象属性的方式改为先从集合中获取对象,再获取属性值的方式。

3.0.3 自定义类型与集合的使用优点分析

当使用自定义类型时,将数据与数据之间产生了合理必要的联系:一个商品的属性应都属于一个商品,则可以以一个商品作为数据操作的基本单位。

当使用集合时,由原来成员位置定义多个对象改为定义一个集合对象。所有使用数据的地方循环遍历即可,无论有再多新数据的产生,其代码不需要更改。

/*

自定义数据类型 商品项类

属性

商品名称 String

商品id String

商品单价 double

商品数量 int

商品金额 double

*/

public class GoodsItem

{

//商品名称

String name;

//商品id

String id;

//商品单价

double price ;

//商品数量

int number;

//商品金额

double money;

}

/*

使用switch语句完成三个分支的代码逻辑

当用户输入1时,让用户输入所要购买的商品数量

当用户输入2时,给用户打印出对应的购物小票

当用户输入3时,退出系统

1.定义商品数据

2.提示用户输入相对应的操作 1.输入商品数量 2.打印小票 3.退出系统

3.接收用户输入的选择

4.使用switch进行判断

5.整体是一个死循环

代码重构

准备数据

1.定义一个商品项类

2.在成员位置定义一个集合 用来存储所有商品

3.为成员位置的集合初始化商品

4.修改购买和打印小票方法 将商品对象从集合中取出来,访问商品对象的属性

*/

//导入Scanner

import java.util.Scanner;

//导入ArrayList

import java.util.ArrayList;

public class Supermarket2

{

//在成员位置定义一个集合 用来存储所有商品

static ArrayList<GoodsItem> list = new ArrayList<GoodsItem>();

public static void main(String[] args)

{

//调用init方法 用来初始化数据

init();

while(true){

//提示用户输入相对应的操作 1.输入商品数量 2.打印小票 3.退出系统

System.out.println("请输入您的操作:1.输入商品数量 2.打印购物小票 3.退出系统");

//接收用户输入的选择 使用Scanner完成

int choose = enterNumber();

//使用switch进行判断用户的选择

switch(choose){

case 1:

//调用buy方法 完成用户输入商品数量

buy();

break;

case 2:

//调用printTicket方法 打印购物小票

printTicket();

break;

case 3:

System.out.println("爱买不买,下次带钱来!!");

System.exit(0);

break;

default:

System.out.println("你瞎啊!");

break;

}

}

}

//定义一个方法为商品对象初始化属性的方法 方法名 init 参数 无 返回值 无

public static void init(){

//定义少林寺酥饼核桃商品对象

GoodsItem sls = new GoodsItem();

//给少林寺对象赋值

sls.name = "少林寺酥饼核桃";

sls.id = "090115";

sls.price = 15.50;

//定义然光Q移商品对象

GoodsItem rg = new GoodsItem();

//给然光对象赋值

rg.name = "然光Q移";

rg.id = "090028";

rg.price = 16.00;

//定义人参果商品对象

GoodsItem rsg = new GoodsItem();

//给然光对象赋值

rsg.name = "人参果";

rsg.id = "090001";

rsg.price = 111111.00;

//将商品对象添加到集合中

list.add(sls);

list.add(rg);

list.add(rsg);

}

//定义一个键盘录入整数的方法 方法名 enterNumber 需要的数据 无 返回的数据 一个用户输入的整数

public static int enterNumber(){

Scanner sc = new Scanner(System.in);

int number = sc.nextInt();

return number;

}

//将用户输入商品数量封装成方法 方法名 buy 需要的数据 无 返回的数据 无

public static void buy(){

Scanner sc = new Scanner(System.in);

/*

遍历存储商品的集合list,依次获取每个商品

让用户给每个商品的数量赋值

计算每个商品的金额

*/

for(int i = 0 ;i < list.size();i++){

//依次获取每个商品

GoodsItem thisItem = list.get(i);

System.out.println("请输入"+thisItem.name+"商品的购买数量:");

//让用户给每个商品的数量赋值

thisItem.number = sc.nextInt();

//计算每个商品的金额

thisItem.money = thisItem.number * thisItem.price;

}

}

//打印购物小票方法 方法名 printTicket 需要的数据 无 返回的数据 无

public static void printTicket(){

//===============票头=========================

System.out.println(" 欢 迎 光 临");

System.out.println("品名 售价 数量 金额");

System.out.println("-------------------------------------");

//===============票体=========================

/*

遍历商品集合,依次获取每个商品,打印每个商品的属性

*/

for(int i = 0 ;i<list.size();i++){

//依次获取每个商品

GoodsItem thisItem = list.get(i);

//依次获取每个商品

System.out.println(thisItem.name+"("+thisItem.id+")"+" "+thisItem.price+" * "+thisItem.number+" = "+thisItem.money);

}

//System.out.println(sls.name+"("+sls.id+")"+" "+sls.price+" * "+sls.number+" = "+sls.money);

//System.out.println(rg.name+"("+rg.id+")"+" "+rg.price+" * "+rg.number+" = "+rg.money);

System.out.println("-------------------------------------");

//===============票脚=========================

//项数

int lineNumber = list.size();

//总数量

int totalNumber = 0;

//总金额

double totalMoney = 0.0;

/*

遍历商品集合 ,依次获取每个商品

将每个商品的数量累加

将每个商品的金额累加

*/

//遍历商品集合

for(int i = 0 ;i < list.size();i++){

//依次获取每个商品

GoodsItem thisItem = list.get(i);

//总数量

totalNumber += thisItem.number;

//总金额

totalMoney += thisItem.money;

}

System.out.println(lineNumber+" 项商品 共计:"+totalNumber+" 件");

System.out.println("总计:"+totalMoney);

}

}

第4章 综合案例---超市购物小票(之前知识)

4.1 案例介绍与演示

使用Eclipse完成day07超市购物小票案例。

package cn.javahelp2;

/*

* 自定义数据类型 商品项类

*

* 属性

*

* 商品id String

* 商品名称 String

* 商品单价 double

* 商品数量 int

* 商品金额 double

*/

public class GoodsItem {

String id;

String name;

double price;

int number;

double money;

}

package cn.javahelp2;

import java.util.ArrayList;

import java.util.Scanner;

/*

* 使用switch语句完成三个分支的代码逻辑

* 当用户输入1时,让用户输入所要购买的商品数量

* 当用户输入2时,给用户打印出对应的购物小票

* 当用户输入3时,退出系统

*

* 分析

* 准备数据

* 1.定义一个商品类

* 2.在成员位置定义一个集合 用来存储所有商品

* 3.定义一个方法 init方法 为集合初始化数据

* 完成整体流程

* 4.提示用户输入相对应的操作 1.购买 2.打印小票 3.退出购买

* 5.接收用户输入的操作

* 调用Scanner的nextInt方法

* 6.使用switch对用户的操作进行判断

* 7.整体流程是一个死循环

* 完成每个方法

* 8.完成购买方法 为集合中每个商品的数量赋值

* 9.完成打印小票方法

* 票头 死数据打印

* 票体 依次打印集合中每个商品的属性

* 票脚 求和

*

*/

public class Supermarket {

//在成员位置定义一个集合 用来存储所有商品

static ArrayList<GoodsItem> list = new ArrayList<GoodsItem>();

public static void main(String[] args) {

//调用init方法为商品集合初始化数据

init();

//整体流程是一个死循环

while(true){

//提示用户输入相对应的操作 1.购买 2.打印小票 3.退出购买

System.out.println("请输入相对应的操作: 1.购买 2.打印小票 3.退出系统");

//接收用户输入的操作

Scanner sc = new Scanner(System.in);

int choose = sc.nextInt();

//使用switch对用户的操作进行判断

switch (choose) {

case 1:

buy();

break;

case 2:

printTicket();

break;

case 3:

System.out.println("爱买不买,下次带钱来!");

System.exit(0);

break;

default:

System.out.println("你瞎啊?这都看不到么!!");

break;

}

}

}

//完成打印小票方法

/*

* 票头

* 死数据打印

* 票体

* 依次打印集合中每个商品的属性

* 遍历集合,依次获取每个商品,打印每个商品的属性信息

* 票脚

* 项数 集合的长度

* 求总数量 所有商品数量的和

* 总金额 所有商品金额的和

* 遍历集合,依次获取每个商品

* 商品数量累加

* 商品金额累加

*/

public static void printTicket() {

//票头

System.out.println(" 欢迎欢迎 !! 热烈欢迎!!");

System.out.println("商品名称 商品单价 商品数量 商品金额");

System.out.println("---------------------------------------");

//票体 遍历集合,依次获取每个商品,打印每个商品的属性信息

for (int i = 0; i < list.size(); i++) {

//依次获取每个商品

GoodsItem thisItem = list.get(i);

//打印每个商品的属性信息

System.out.println(thisItem.name+"("+thisItem.id+")"+" "+thisItem.price+" * "+thisItem.number+" = "+thisItem.money);

}

System.out.println("---------------------------------------");

//票脚

//项数

int lineNumber = list.size();

//总数量

int totalNumber = 0;

//总金额

double totalMoney = 0.0;

//遍历集合,依次获取每个商品

for (int i = 0; i < list.size(); i++) {

//依次获取每个商品

GoodsItem thisItem = list.get(i);

//求总数量

totalNumber += thisItem.number;

//求总金额

totalMoney += thisItem.money;

}

System.out.println(lineNumber+" 项商品 共计:"+totalNumber+"件");

System.out.println("总价:"+totalMoney+"元");

}

//完成购买方法 为集合中每个商品的数量赋值

/*

* 1.创建Scanner对象

* 2.遍历集合,依次获取每个商品,让用户为每个商品的数量赋值,计算商品金额

*/

public static void buy() {

//创建Scanner对象

Scanner sc = new Scanner(System.in);

//遍历集合,依次获取每个商品,让用户为每个商品的数量赋值,计算商品金额

for (int i = 0; i < list.size(); i++) {

//依次获取每个商品

GoodsItem thisItem = list.get(i);

//让用户为每个商品的数量赋值

System.out.println("请输入"+thisItem.name+"商品的购买数量:");

thisItem.number = sc.nextInt();

//计算商品金额

thisItem.money = thisItem.number * thisItem.price;

}

}

//定义一个方法 init方法 为集合初始化数据

/*

* 创建商品对象 给商品对象的属性赋值

* 将商品对象添加到成员位置的集合中

*/

public static void init(){

// 创建商品对象 给商品对象的属性赋值

GoodsItem sls = new GoodsItem();

sls.id = "090018";

sls.name = "少林寺酥饼核桃";

sls.price = 15.50;

GoodsItem rg = new GoodsItem();

rg.id = "090025";

rg.name = "然光Q移";

rg.price = 16.00;

GoodsItem rsg = new GoodsItem();

rsg.id = "090001";

rsg.name = "人参果";

rsg.price = 16000.00;

//将商品对象添加到成员位置的集合中

list.add(sls);

list.add(rg);

list.add(rsg);

}

}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java帮帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第1章 引用类型作为参数与返回值
    • 1.1 引用类型是一种数据类型
      • 1.2 引用类型定义方法与返回值为参数练习
        • 1.3 引用类型传参与基本类型传参区别
          • 2.0.1 案例介绍与演示
          • 2.0.2 案例分析
          • 3.0.1 案例介绍与演示
          • 3.0.2 案例分析
          • 3.0.3 自定义类型与集合的使用优点分析
      • 第2章 综合案例---超市购物小票封装自定义类
      • 第3章 综合案例---超市购物小票数据使用集合
      • 第4章 综合案例---超市购物小票(之前知识)
        • 4.1 案例介绍与演示
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档