Java 基础知识(六)

  1. 方法:
  • 1)封装一段特定的业务逻辑功能
  • 2)尽可能的独立,一个方法只干一件事
  • 3)被反复调用多次
  • 4)可以减少代码重复,有利于代码的维护,有利于团队的协作
  1. 方法的定义:

    java 复制代码
    修饰词 返回值类型 方法名(参数列表){
      方法体
    }
  2. 方法的调用:

  • 1)无返回值: 方法名(有参传参);
  • 2)有返回值: 数据类型 变量 = 方法名(有参传参);
  1. return:
  • 1)return 值; //结束方法的执行,返回结果给调用方。用在有返回值的方法中
  • 2)return; //结束方法的执行。用在无返回值的方法中
  1. 猜字符小游戏:

①设计数据结构:变量

java 复制代码
char[] chs;   //随机字符数组
char[] input; //用户输入的字符数组
int[] result; //对比结果
int score;    //得分

②设计程序结构:方法

1)主方法:

java 复制代码
public static void main(String[] args){
  //...
}

2)生成随机字符数组:

java 复制代码
public static char[] generate(){
  char[] chs = new char[5];
  //...
  return chs;
}

3)对比:随机字符数组chs与用户输入的字符数组input

java 复制代码
public static int[] check(char[] chs,char[] input){
  int[] result = new int[2];
  //...
  return result;
}

③设计算法:方法体

String str = "abc";

1)将字符串转换为字符数组:

char[] input = str.toCharArray();

2)将字符串转换为大/小写字母:

str = str.toUpperCase();

str = str.toLowerCase();

3)判断字符串内容是否相等:

if(str.equals("EXIT")){}

java 复制代码
//方法的演示
public class MethodDemo {
	public static void main(String[] args) {
		say();
		//sayHi(); //编译错误,有参则必须传参
		//sayHi(250); //编译错误,参数类型必须匹配
		sayHi("zhangsan"); //String name="zhangsan"
		sayHi("lisi"); //String name="lisi";
		sayHi("wangwu"); //String name="wangwu";
		
		sayHello("zhangsan",25); //String name="zhangsan",int age=25
		sayHello("lisi",28); //String name="lisi",int age=28
		
		double a = getNum(); //getNum()的值就是return后的88.88
		System.out.println(a); //88.88
		
		int b = plus(5,6); //实参(实际参数)
		System.out.println(b); //11
		
		int m=5,n=6;
		int c = plus(m,n); //传递的是m和n里面的数
		System.out.println(c); //11
		
		a(); //嵌套调用----111,333,444,222
	}
	
	public static void a() {
		System.out.println(111);
		b();
		System.out.println(222);
	}
	public static void b() {
		System.out.println(333);
		c();
	}
	public static void c() {
		System.out.println(444);
	}
	
	//有参有返回值
	public static int plus(int num1,int num2) { //形参(形式参数)
		int num = num1+num2;
		return num; //返回的是num里面的数
		//return num1+num2; //返回num1+num2的和
	}
	
	//无参有返回值
	public static double getNum() {
		//return; //编译错误,return后必须跟一个值
		//return "abc"; //编译错误,返回值类型必须匹配
		return 88.88; //1)结束方法的执行 2)返回结果给调用方
	}
	
	//无参无返回值
	public static void say() {
		System.out.println("大家好,我叫WKJ,今年37岁了");
	}
	
	//有参无返回值
	public static void sayHi(String name) {
		System.out.println("大家好,我叫"+name+",今年37岁了");
	}
	
	//有参无返回值
	public static void sayHello(String name,int age) {
		if(age>50) {
			return; //结束方法
		}
		System.out.println("大家好,我叫"+name+",今年"+age+"岁了");
	}
	
}

练习:

  1. 实现如下程序,主流程:
  • 1)手里面藏一个数chs
  • 2)猜吧!接收用户输入的一个数input
  • 3)对比:chs与input
    • 3.1)若猜对了,则算分并输出---结束循环
    • 3.2)若猜错了,提示字符对个数和位置对个数,继续第2步
  1. 查询数组最小值,并将其放在第一位

创建程序,实现查询数组中最小值的功能,并将最小值放入数组的第一位。需求为:创建一个长度为 10 的数组,数组内放置 10 个 0 到 99 之间(包含0,包含99)的随机整数作为数组元素,要求查询出数组中的最小值,并打印显示在界面上。然后,将查询到的数组最小值记载为数组的第一个元素,并打印赋值后的数组内容。界面效果如下图所示:

  1. 总结冒泡排序算法的原理

  2. 随机生成数组

封装一个方法generateArray,该方法实现生成指定长度的int数组,该数组的元素为0到指定范围内的随机数,并将该数组返回。

答案:

java 复制代码
import java.util.Scanner;
// 猜字符小游戏
public class GuessingGame {
	public static void main(String[] args) {
		// 表示玩家猜测的次数
		int count = 0;
		// 用于保存判断的结果
		int[] result = new int[2];
		Scanner scanner = new Scanner(System.in);
		System.out.println("GuessingGame>欢迎尝试猜字母游戏!");
		// 表示猜测的字符串
		char[] chs = generate();
		System.out.println(chs);
		System.out.println("GuessingGame>游戏开始,请输入你所猜的5个字母序列:(exit------退出)");
		while (true) {
			String inputStr = scanner.next().toUpperCase();
			if ("EXIT".equals(inputStr)) {
				System.out.println("GuessingGame>谢谢你的尝试,再见!");
				break;
			}
			
			char[] input = inputStr.toCharArray();
			result = check(chs, input);
			if (result[0] == chs.length) {// 完全猜对的情况
				int score = 100 * chs.length - count * 10;
				System.out.println("GuessingGame>恭喜你猜对了!你的得分是:" + score);
				break;
			} else {
				count++;
				System.out.println("GuessingGame>你猜对" + result[1] + "个字符,其中"
						+ result[0] + "个字符的位置正确!(总次数=" + count + ",exit------退出)");
			}
		}
		scanner.close();
	}

	/**
	 * 随机生成需要猜测的字母序列
	 * 
	 * @return 存储随机字符的数组
	 */
	public static char[] generate() {
		
		char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
				'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
				'W', 'X', 'Y', 'Z' };
		boolean[] flags = new boolean[letters.length];
		char[] chs = new char[5];
		for (int i = 0; i < chs.length; i++) {
			int index;
			do {
				index = (int) (Math.random() * (letters.length));
			} while (flags[index]);// 判断生成的字符是否重复
			chs[i] = letters[index];
			flags[index] = true;
		}
		return chs;
	}

	/**
	 * 比较玩家输入的字母序列和程序所生成的字母序列,逐一比较字符及其位置,并记载比较结果
	 * 
	 * @param chs
	 *            程序生成的字符序列
	 * @param input
	 *            玩家输入的字符序列
	 * @return 存储比较的结果。返回值int数组 的长度为2,其中,索引为0的位置
	 *         用于存放完全猜对的字母个数(字符和位置均正确),索引为1的位置用于存放猜对的字母个数(字符正确,但是位置不正确)。
	 */
	public static int[] check(char[] chs, char[] input) {
		int[] result = new int[2];
		for (int i = 0; i < 5; i++) {
			for (int j = 0; j < chs.length; j++) {
				if (input[i] == chs[j]) {// 判断字符是否正确
					result[1]++;
					if (i == j) {// 判断位置是否正确
						result[0]++;
					}
					break;
				}
			}
		}
		return result;
	}
}
java 复制代码
public class Exercise {
	public static void main(String[] args) {
		//1.找到数组元素的最小值,并放在第一位
		int[] arr = new int[10];
		for(int i=0;i<arr.length;i++) {
			arr[i] = (int)(Math.random()*100);
			System.out.println(arr[i]);
		}
		
		int min = arr[0];
		for(int i=1;i<arr.length;i++) {
			if(arr[i]<min) {
				min = arr[i];
			}
		}
		System.out.println("最小值为:"+min);
		
		int[] as = new int[arr.length+1];
		System.arraycopy(arr,0,as,1,arr.length);
		as[0] = min;
		for(int i=0;i<as.length;i++) {
			System.out.println(as[i]);
		}
		
		//2.随机生成数组
		int[] arr = generateArray(3,10);
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}
		
	}
	
	public static int[] generateArray(int len,int max){
		int[] arr = new int[len];
		for(int i=0;i<arr.length;i++) {
			arr[i] = (int)(Math.random()*max);
		}
		return arr;
	}
	
}
相关推荐
Gopher_HBo1 小时前
接入层LVS
后端
前端市界1 小时前
LotDB Vue 阿里云 ECS 部署实战记录
后端
卷无止境1 小时前
SimPy 进程通信:让仿真世界里的"对话"变得优雅
后端
ZengLiangYi1 小时前
多格式文件解析:JSONL / SQLite / Event Stream
前端·javascript·后端
前端市界1 小时前
使用 `acme.sh` + 阿里云 DNS API 申请 Let’s Encrypt 通配符证书,并配置 Nginx 自动续期
后端
卷无止境1 小时前
SimPy Events 深度解析:仿真世界的时间引擎
后端
Oo_行者_oO1 小时前
Spring Cloud 实现文件服务预览与静态资源映射
后端·spring
我命由我123451 小时前
SEO 与 GEO 极简理解
java·linux·运维·开发语言·学习·算法·运维开发
万少1 小时前
湖南卫视的秘密武器曝光!芒果灵创,专业AI影视创作平台
前端·javascript·后端