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();
    }
}


相关文章
|
2月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
229 18
|
2月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
201 4
|
3月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
141 11
|
2月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
282 5
|
3月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
4月前
|
算法 Java 开发者
Java 项目实战数字华容道与石头迷阵游戏开发详解及实战方法
本文介绍了使用Java实现数字华容道和石头迷阵游戏的技术方案与应用实例,涵盖GUI界面设计、二维数组操作、游戏逻辑控制及自动解法算法(如A*),适合Java开发者学习游戏开发技巧。
287 46
|
4月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
385 0
|
4月前
|
存储 Java 数据处理
Java映射操作:深入Map.getOrDefault与MapUtils方法
结合 `getOrDefault`方法的简洁性及 `MapUtils`的丰富功能,Java的映射操作变得既灵活又高效。合理地使用这些工具能够显著提高数据处理的速度和质量。开发人员可以根据具体的应用场景选择适宜的方法,以求在性能和可读性之间找到最佳平衡。
185 0
|
4月前
|
缓存 人工智能 NoSQL
Java中实现Token设置过期时间的方法
本文介绍了在Java应用中实现Token设置过期时间的多种方法,包括使用JWT和Redis缓存,并结合定时任务清理过期Token,以提升系统安全性与用户隐私保护。
448 0
|
5月前
|
安全 Java API
Java 集合高级应用与实战技巧之高效运用方法及实战案例解析
本课程深入讲解Java集合的高级应用与实战技巧,涵盖Stream API、并行处理、Optional类、现代化Map操作、不可变集合、异步处理及高级排序等核心内容,结合丰富示例,助你掌握Java集合的高效运用,提升代码质量与开发效率。
255 0