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("品牌型号	尺寸	价格	库存数");
            for (int i=0;i<brand.size() ;i++ ){
                System.out.println(brand.get(i)+"	"+sizee.get(i)+"	"+price.get(i)+"	"+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("序号	品牌型号	库存数");
                for (int i=0;i<brand.size() ;i++ ){
                    System.out.println(i+1+"	"+brand.get(i)+"	"+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("序号	品牌型号	库存数");
                        for (int i=0;i<brand.size() ;i++ ){
                        System.out.println(i+1+"	"+brand.get(i)+"	"+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("您的输入有误请重新输入!");        
                    }
                }        
        }
}

 

原文地址:https://www.cnblogs.com/jiejava/p/13217260.html