Java带参数的方法-2

简介: 实现思路及关键代码(1) 创建 CustomerBiz 类,添加属性姓名数组。(2) 创建 addName(String name) 方法,实现姓名的添加。(3) 创建 showNames( )方法,实现姓名的显示。(4) 创建测试类 TestCustomer, 实现循环,输入姓名。

实现思路及关键代码

(1) 创建 CustomerBiz 类,添加属性姓名数组。


(2) 创建 addName(String name) 方法,实现姓名的添加。


(3) 创建 showNames( )方法,实现姓名的显示。


(4) 创建测试类 TestCustomer, 实现循环,输入姓名。


参考解决方案


CustomerBiz 类的  addName(String name) 方法参考代码如下。

package cn.jbit.test1;
/*
 * 上机阶段1:实现客户姓名显示和添加
 *
 */
public class CustomerBiz {
    String[] names = new String[30];  // 姓名数组
    /*
     * 增加姓名
     * @param name要增加的姓名
     */
    public void addName(String name){
        for(int i =0;i<names.length;i++){
            if(names[i]==null){
                names[i]=name;
                break;
            }
        }
    }
    /*
     * 显示姓名
     */
    public void showNames(){
        System.out.println("**************************");
        System.out.println("\t客户姓名列表:");
        System.out.println("**************************");
        for(int i =0;i<names.length;i++){
            if(names[i]!=null){
                System.out.print(names[i]+"\t");
            }
        }
        System.out.println();
    }
}


TestCustomer 类实现循环输入,参考代码如下。

package cn.jbit.test1;
import java.util.*;
public class TestCustomer {
    public static void main(String[] args) {
        CustomerBiz cb=new CustomerBiz();
        boolean con=true;
        Scanner input = new Scanner(System.in);
        while(con){
            System.out .print("请输入客户的姓名:");
            String newName = input.next();
            cb.addName(newName);
            System.out .print("继续输入吗?(y/n):");
            String choice=input.next();
            if(choice.equals("n")){
                con=false;
            }
        }
        cb.showNames();
    }
}

上机练习2


指导——修改客户姓名


需求说明


修改学生姓名,输入新、旧姓名,进行修改并显示是否修改成功。

程序运行结果如图 14.2 所示。

                                                       图 14.2 上机练习 2 的运行结果


提示:在数组中查询到该客户,进行修改姓名。根据分析可以设计一个方法,通过传递两个参数(需要修改的姓名、新姓名)来实现。参考代码如下。


CustomerBiz 类的 方法参考代码如下。

package cn.jbit.test2;
/*
 *
 * 实现客户信息的管理
 *
 */
public class CustomerBiz {
    String[] names = new String[30];  // 客户姓名数组
    /*
     * 增加姓名
     * @param name要增加的姓名
     */
    public void addName(String name){
        for(int i =0;i<names.length;i++){
            if(names[i]==null){
                names[i]=name;
                break;
            }
        }
    }
    /*
     * 修改客户姓名
     * @param oldName旧名字
     * @param newName新名字
     */
    public boolean editName(String oldName,String newName){
        boolean find = false;  // 是否找到并修改成功标识
        // 循环数组,找到姓名为oldName的元素,修改为newName
        for(int i=0;i<names.length;i++){
            if(names[i].equals(oldName)){
                names[i] = newName;
                find=true;
                break;
            }
        }
        return find;
    }
    /*
     * 显示姓名
     */
    public void showNames(){
        System.out.println("**************************");
        System.out.println("\t客户姓名列表:");
        System.out.println("**************************");
        for(int i =0;i<names.length;i++){
            if(names[i]!=null){
                System.out.print(names[i]+"\t");
            }
        }
        System.out.println();
    }
}


TestModify 类实现循环输入,参考代码如下。


package cn.jbit.test2;
import java.util.Scanner;
public class TestModify {
    public static void main(String[] args) {
        CustomerBiz st = new CustomerBiz();
        Scanner input = new Scanner(System.in);
        for(int i=0;i<5;i++){
            System.out.print("请输入客户姓名:");
            String newName = input.next();
            st.addName(newName);
        }
        st.showNames();
        System.out.print("\n请输入要修改的客户姓名:");
        String oldname = input.next();
        System.out.print("请输入新的客户姓名:");
        String newname = input.next();
        System.out.println("\n*****修改结果*****");
        if(st.editName(oldname, newname)){
            System.out.println("找到并修改成功!");
        }
        else{
            System.out.println("没找到该客户!");
        }
        st.showNames();
    }
}


14.2 深入理解带参方法

14.2.1 数组作为参数的方法

问题:有五位学员参加了 Java 知识竞赛的决赛,输出决赛的平均成绩和最高成绩。


分析:将多个类型相同的数值型数据存储在数组中,并对其求总和、平均值、最大值、最小值等是实际应用中常见的操作,可以设计求总和、平均值、最大值、最小值等的方法,并把数组作为参数,这样便可以在多种场合下调用这些方法,如示例 4 所示。


示例4


package cn.jbit.classandobject;
/**
 *
 * 实现学生信息的管理
 *
 */
public class StudentsBiz {
   String[] names = new String[30];  // 学员姓名数组
   /**
    * 增加学生姓名
    * @param name要增加的姓名
    */
   public void addName(String name){
      for(int i =0;i<names.length;i++){
         if(names[i]==null){
            names[i]=name;
            break;
         }
      }
   }
   /**
    * 显示本班的学生姓名
    */
   public void showNames(){
      System.out.println("本班学生列表:");
      for(int i =0;i<names.length;i++){
         if(names[i]!=null){
            System.out.print(names[i]+"\t");
         }
      }
      System.out.println();
   }
   /**
    * 修改学员姓名
    * @param oldName旧名字
    * @param newName新名字
    */
   public boolean editName(String oldName,String newName){
      boolean find = false;  // 是否找到并修改成功标识
      // 循环数组,找到姓名为oldName的元素,修改为newName
      for(int i=0;i<names.length;i++){
         if(names[i].equals(oldName)){
            names[i] = newName;
            find=true;
            break;
         }
      }
      return find;
   }
   /**
    * 在一定区间查找学生姓名
    * @param start 开始位置
    * @param end 结束位置
    * @param name 查找的姓名
    * @return find 是否查找成功
    */
   public boolean searchName(int start,int end,String name){
      boolean find = false;  // 是否找到标识
      // 指定区间数组中,查找姓名
      for(int i=start-1;i<end;i++){
         if(names[i].equals(name)){         
            find=true;
            break;
         }
      }
      return find;
   }
    /**
     * 求平均分
     * @param scores 参赛成绩数组
     */
    public double calAvg(int[] scores){
        int sum=0;
        double avg=0.0;
        for(int i =0;i<scores.length;i++){
            sum+=scores[i];
        }
        avg=(double)sum/scores.length;
        return avg;
    }
    /**
     * 求最高分
     * @param scores 参赛成绩数组
     */
    public int calMax(int[] scores){
        int max=scores[0];
        for(int i =1;i<scores.length;i++){
            if(max<scores[i]){
                max=scores[i];
            }
        }
        return max;
    } 
}

示例 4 中的 StudentsBiz 类定义了两个方法,分别实现了求平均成绩和最高成绩,它们都是带数组参数并且带返回值的方法。


public double calAvg(int[] scores)


public int calMax(int[] scores)


参数 scores 数组传递所有学员的比赛成绩,而且定义方法时并没有指定数组大小,而是在调用方法时确定要传递的数组的大小。 return 语句用来返回平均成绩和最高成绩。


示例 4 的运行结果如图 14.3 所示。




图 14.3 示例 4 的运行结果


14.2.2 对象作为参数的方法

问题:在示例 1 中,实现了增加一个学生姓名的功能,那么,如果不仅要增加学生的姓名,还要增加学生的年龄和成绩,应该如何实现呢?


分析:在示例 1 中,设计了一个方法,通过传递一个参数(新增的学生姓名)来实现。同样,要新增年龄和成绩,可以在类中定义两个分别表示年龄和成绩的数组,同时在方法中增加两个参数(要新增的学生的年龄、要新增的学生的成绩)。但是,这样设计会有一些问题,在类中声明的数组较多,在方法中的参数较多,试想,如果新增的学生信息包括的更多,如家庭住址、联系电话、身高、体重、性别等,那么是不是需要在类中定义更多的数组和在方法中定义更多的参数呢?显然,这不是最好的解决方案。其实,大家已经学习过类和对象,可以使用面向对象的思想,把所有要新增的学生信息封装到学生类中,只需要在方法中传递一个学生对象就可以包含所有的信息,如示例 5 所示。


示例5


package cn.jbit.class4;
/*
 *
 * 学生类
 *
 */
class Student{
    public int id;
    public String name;
    public int age;
    public int score;
    public void showInfo(){
        System.out.println(id+"\t"+name+"\t"+age+"\t"+score);
    }
}
/*
 *
 * 实现学生信息的管理
 *
 */
public class StudentsBiz {
    Student[] students = new Student[30];  // 学生数组
    /*
     * 增加学生
     * @param 一个学生
     */
    public void addStudent(Student stu){
        for(int i =0;i<students.length;i++){
            if(students[i]==null){
                students[i]=stu;
                break;
            }
        }
    }
    /*
     * 显示本班的学生信息
     *
     */
    public void showStudents(){
        System.out.println("本班学生列表:");
        for(int i =0;i<students.length;i++){
            if(students[i]!=null){
                students[i].showInfo();
            }
        }
        System.out.println();
    }
}


相关文章
|
21天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
55 3
|
10天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
24 3
|
12天前
|
Java
判断不为空和不为空串的方法java
判断不为空和不为空串的方法java
|
15天前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
2天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
3天前
|
存储 Java API
掌握8条方法设计规则,设计优雅健壮的Java方法
掌握8条方法设计规则,设计优雅健壮的Java方法
|
3天前
|
Java C语言
详解java方法与递归
详解java方法与递归
9 3
|
3天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
9 0
|
4天前
|
Java
Java一分钟之-方法定义与调用基础
【5月更文挑战第8天】本文介绍了Java编程中的方法定义和调用,包括基本结构、常见问题和避免策略。方法定义涉及返回类型、参数列表和方法体,易错点有返回类型不匹配、参数错误和忘记返回值。在方法调用时,要注意参数传递、静态与非静态方法的区分,以及重载方法的调用。避免错误的策略包括明确返回类型、参数校验、理解值传递、区分静态和非静态方法以及合理利用重载。通过学习和实践,可以提升编写清晰、可维护代码的能力。
13 0
|
6天前
|
搜索推荐 Java Shell
8大Java排序方法(由简入繁),有代码详解和原理指导
8大Java排序方法(由简入繁),有代码详解和原理指导
29 0