java方法中参数传递与随机点名器、库存管理案例
一 参数传递
1.定义:
参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,
这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。这种传递方式,我
们称为参数传递。
定义方法时,参数列表中的变量,我们称为形式参数
调用方法时,传入给方法的数值,我们称为实际参数
2.举例明确参数传递过程
例1:
public class ArgumentsDemo01 {
public static void main(String[] args) {
int a=5;
int b=10;
change(a, b);//调用方法时,传入的数值称为实际参数
System.out.println("a=" + a);
System.out.println("b=" + b);
} public static void change(int a, int b){//方法中指定的多个参数称为形式参数
a=200;
b=500;
}
}
例2:
public class ArgumentsDemo02 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
change(arr);// 调用方法时,传入的数值称为实际参数 for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
} public static void change(int[] arr) {// 方法中指定的多个参数称为形式参数
for (int i = 0; i < arr.length; i++) {
arr[i] *= 2;
}
}
}
3.参数传递内存图解
4.结论:
当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响
二 随机点名器案例
1.需求:
随机点名器,即在全班同学中随机的打印出一名同学名字。
要做的随机点名器,它具备以下3个内容:
存储所有同学姓名
总览全班同学姓名
随机点名其中一人,打印到控制台
2.需求分析
在全班同学中随机的打印出一名同学名字。
我们对本案例进行分析,得出如下分析结果:
1.存储全班同学名字
2.打印全班同学每一个人的名字
3.在班级总人数范围内,随机产生一个随机数,查找该随机数所对应的同学名字
该案例须有以下3个内容:
存储所有同学姓名
总览全班同学姓名
随机点名其中一人,打印到控`制台
随机点名器明确地分为了三个功能。如果将多个独立功能的代码写到一起,则代码相对冗长,我们可以
针对不同的功能可以将其封装到一个方法中,将完整独立的功能分离出来。而在存储同学姓名时,如果对每
一个同学都定义一个变量进行姓名存储,则会出现过多孤立的变量,很难一次性将全部数据持有。此时,我们
可以使用数组解决多个数据的存储问题。
3.代码编写:
import java.util.Random;
class demo03
{
public static void main(String[] args)
{
String[] arr = new String[4];
save(arr);
look(arr);
getName(arr);
}
//储存全班同学姓名
public static void save(String[] arr){
arr[0]="张三";
arr[1]="李四";
arr[2]="王五";
arr[3]="赵六";
}
//总览全班同学姓名
public static void look(String[] brr){
for (int i=0;i<brr.length ;i++ ){
System.out.print(brr[i]+" ");
}
System.out.println();
}
//随机点名
public static void getName(String[] arr){
Random ra = new Random();
int a = ra.nextInt(arr.length);
System.out.println(arr[a]);
}
}
三 库存管理案例
1.需求:
清单顶部为固定的数据,直接打印即可
清单中部为商品,为变化的数据,需要记录商品信息后,打印
经过观察,我们确定一项商品应该有如下几个属性:
品牌型号: 即商品名称,String型
尺寸:物品大小,double型
价格:物品单价,double型
配置:这一项为每种商品的配置信息,String型
库存数:这一项为每种商品的库存个数,int型
清单底部包含了统计操作,需经过计算后,打印
我们发现两个单独的可变化量
总库存数:所有商品总个数,int型
库存商品总金额:所有商品金额,double型
进行业务逻辑的封装。
打印库存清单功能
库存商品数量修改功能
退出程序功能
2.需求分析
管理员能够进行的操作有3项(查看、修改、退出),我们可以采用(switch)菜单的方式来完成。
-------------库存管理------------
1.查看库存清单
2.修改商品库存数量
3.退出
请输入要执行的操作序号:
每一项功能操作,我们采用方法进行封装,这样,可使程序的可读性增强。
选择“1.查看库存清单”功能,则控制台打印库存清单
选择“2.修改商品库存数量”功能,则对每种商品库存数进行更新
选择“3.退出”功能,则退出库存管理,程序结束
3.代码:
import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
class HomeWork0630
{
public static void main(String[] args)throws IOException
{
menu();
}
public static void show(){
System.out.println("------库存管理------");
System.out.println("1.查看库存清单");
System.out.println("2.修改商品库存数量");
System.out.println("3.退出");
System.out.println("请输入要执行的操作序号:");
}
public static void menu()throws IOException{
Scanner sc = new Scanner(System.in);
ArrayList<String> brand =new ArrayList<String>();
ArrayList<Double> sizee =new ArrayList<Double>();
ArrayList<Double> price =new ArrayList<Double>();
ArrayList<Integer> num =new ArrayList<Integer>();
brand.add("MacBookAir");
brand.add("ThinkpadT450");
brand.add("ASUS-FL5800");
sizee.add(13.3);
sizee.add(14.0);
sizee.add(15.6);
price.add(6988.88);
price.add(5999.99);
price.add(4999.5);
num.add(5);
num.add(10);
num.add(18);
while(true){
show();
int s = sc.nextInt();
switch(s){
case 1:
look(brand,sizee,price,num);
break;
case 2:
change(brand,num);
break;
case 3:
return;
default:
System.out.println("输入有误请重新输入!");
}
}
}
public static void look(ArrayList<String> brand,ArrayList<Double> sizee,ArrayList<Double> price,
ArrayList<Integer> num)throws IOException{
System.out.println("----------商城库存清单----------");
System.out.println("品牌型号\t尺寸\t价格\t库存数");
for (int i=0;i<brand.size() ;i++ ){
System.out.println(brand.get(i)+"\t"+sizee.get(i)+"\t"+price.get(i)+"\t"+num.get(i));
}
System.out.println("--------------------------------");
int sum = 0;
for (int i = 0;i<brand.size() ;i++ ){
sum+=num.get(i);
}
System.out.println("总库存数:"+sum);
double sum2 = 0;
for (int i = 0;i<brand.size() ;i++ ){
sum2+=num.get(i)*price.get(i);
}
System.out.println("库存商品总金额:"+sum2);
System.out.println("输入回车键返回主菜单");
if(new InputStreamReader(System.in).read() == 13){
return;
}
}
public static void change(ArrayList<String> brand,ArrayList<Integer> num){
Scanner sca = new Scanner(System.in);
while(true){
System.out.println("-------------库存表-------------");
System.out.println("序号\t品牌型号\t库存数");
for (int i=0;i<brand.size() ;i++ ){
System.out.println(i+1+"\t"+brand.get(i)+"\t"+num.get(i));
}
System.out.println("--------------------------------");
System.out.println("请根据上表输入需要改库存商品的序号,按0返回主界面:");
int s = sca.nextInt();
int num1=0;
if ((s-1)<brand.size()&&s>0){
System.out.println("请输入修改后的内存数:");
num1=sca.nextInt();
num.set(s-1,num1);
System.out.println("修改成功!结果为:");
System.out.println("-------------库存表-------------");
System.out.println("序号\t品牌型号\t库存数");
for (int i=0;i<brand.size() ;i++ ){
System.out.println(i+1+"\t"+brand.get(i)+"\t"+num.get(i));
}
System.out.println("--------------------------------");
while(true){
System.out.println("是否继续修改:按1继续,按0返回主菜单");
int b = sca.nextInt();
if (b==1){
break;
}else if(b==0){
return;
}else{
System.out.println("您的输入有误请重新输入!");
}
}
}else if(s==0){
return;
}else{
System.out.println("您的输入有误请重新输入!");
}
}
}
}
java方法中参数传递与随机点名器、库存管理案例的更多相关文章
- java 对象的this使用 java方法中参数传递特性 方法的递归
一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或 ...
- java 用集合完成随机点名器和库存管理案例
一 随机点名器 1.案例需求 随机点名器,即在全班同学中随机的找出一名同学,打印这名同学的个人信息. 我们来完成随机点名器,它具备以下3个内容: 存储所有同学姓名 总览全班同学姓名 随机点名其中一人, ...
- Java方法之参数传递机制
目录 Java方法之参数传递机制 基本数据类型 引用数据类型 综合练习 总结 Java方法之参数传递机制 Java方法中如果声明了形参,在调用方法时就必须给这些形参指定参数值,实际传进去的这个值就叫做 ...
- 068 01 Android 零基础入门 01 Java基础语法 08 Java方法 06 参数传递问题——基本数据类型传值
068 01 Android 零基础入门 01 Java基础语法 08 Java方法 06 参数传递问题--基本数据类型传值 本文知识点:参数传递问题--基本数据类型传值 说明:因为时间紧张,本人写博 ...
- JAVA方法中的参数用final来修饰的原因
JAVA方法中的参数用final来修饰的原因 很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,有的人认为是调用语句的 ...
- 2017.10.14 Java的流程控制语句switch&&随机点名器
今日内容介绍 1.流程控制语句switch 2.数组 3.随机点名器案例 ###01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作 ...
- 【Java基础】11、java方法中只有值传递,没有引用传递
public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...
- JAVA方法中参数到底是值传递还是引用传递
当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递? 答:是值传递.Java 语言的参数传递只有值传递.当一个实例对象作为参数被传递到方法中时,参 ...
- java方法中只有值传递,没有引用传递
public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...
随机推荐
- git分支管理的策略和冲突问题
目录 备注: 知识点 关于分支中的冲突 分支管理的策略 分支策略 备注: 本文参考于廖雪峰老师的博客Git教程.依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文. 知识点 git log ...
- java 之 实例方法和类方法
类方法:使用static修饰(静态方法),属于整个类的,不是属于某个实例的,只能处理static域或调用static方法: 实例方法:属于对象的方法,由对象来调用. 判断类方法,类方法的前面有stat ...
- 你闺女也能看懂的插画版 Kubernetes 指南
Matt Butcher是Deis的平台架构师,热爱哲学,咖啡和精雕细琢的代码.有一天女儿走进书房问他什么是Kubernetes,于是就有了这本插画版的Kubernetes指南,讲述了勇敢的Phipp ...
- 题解 洛谷 P6349 【[PA2011]Kangaroos】
先考虑对题目进行转化,我们称两个区间有交集为这两个区间能匹配,每个询问就是在序列中最长能连续匹配的长度. 对序列中的一个区间\([l,r]\)和询问的一个区间\([L,R]\),若满足\(L \leq ...
- Java 并发实践 — ConcurrentHashMap 与 CAS
转载 http://www.importnew.com/26035.html 最近在做接口限流时涉及到了一个有意思问题,牵扯出了关于concurrentHashMap的一些用法,以及CAS的一些概念. ...
- docker-compose安装zabbix
在网上的很多帖子,我亲自试过,多数不行,启动后zabbix_server是退出状态,所以觉得自己亲自写一篇帖子,以作记录 1.安装docker和docker-compose yum install - ...
- 第33课 C++中的字符串
1. 历史遗留问题及解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串------c语言是用字符数组实现字符串 ②C语言用字符数组和一组函数模拟字符串操作 ③C语言不支持自定义类型,因此无 ...
- Java 构造方法及关键字:this、super、final、static
一.构造方法 1.概念 在创建对象时,需要明确对象的属性值,即当使用new关键字创建对象时,同时给对象的属性初始化值. 这就需要用到构造方法.构造方法的格式: 修饰符 构造方法名(参数列表){ } 构 ...
- redis启动报错:The Windows version of Redis allocates a memory mapped heap for sharing with
windows系统下通过cmd命令:redis-server.exe redis.windows.conf 启动redis报错,控制台报错如下: The Windows version of Redi ...
- 集合的一些实例的demo实现
按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 准备牌: 牌可以设计为一个ArrayList,每个字符串为一 ...