Java SE基础知识4(方法、API、排序)

方法:

主方法

public static void main(String[] args){}
修饰符 + 返回值类型 + 方法名 + (方法参数) + {方法体}

	访问修饰词: public static
	返回值的类型: void /char/int/boolean/String/int[]
	方法名: main / 随意 -> 可读性好
	方法的参数(临时变量):
		1. 类型 + 变量名
		2.可以放引用数据类型和基本数据类型
		3.参数可以不放,可以有多个,类型不限
	{}: 方法体

方法的使用:

1)有返回值的方法,必须使用return返回
2)return表示方法结束,没有返回值类型的也可以使用return

方法参数:

基本数据类型作为参数: 值传递
引用数据类型作为参数: 传递的是引用 - 地址值

猜字母游戏

随机5个字母:    qwert
用户猜字母:      awecb
比较:          字母正确个数:2   位置正确:2

常用API - 都是类

Scanner	
	nextInt()
	nextDouble()
	next(): 获取字符串,遇到空格或者回车结束
	nextLine():获取一行字符串,遇到回车结束
System
	print(): 打印,不换行
	println() 换行打印
Math
	Math.random(): 获得[0,1)的随机值
	Math.pow(double d1, double d2): 获得d1 的d2次幂
String
	str.charAt(index); 获得index索引对应的字符
Arrays
	Arrays.toString():读取数组
	Arrays.sort():数组的排序

数组的排序

选择排序: 每一轮都会选出一个最大的,放在最后面
冒泡排序: 每一轮都比较相邻的两个元素,小的放前面,大的放后面
插入排序: 把数组分成两部分, 前一部分已经排好的, 另一部分挨个访问,把访问到的元素插入到前一部分的合适的位置	
	1234  8590



冒泡排序原理分析:
数组:[9, 7, 3, 6, 1]  length = 5

i: int i = 0; i < length - 1; i++
j: int j = 0; j < length - 1 - i; j++

第一轮: i = 0 arr[j] > arr[j+1]
7, 9, 3, 6, 1 j = 0 arr[0] arr[1] 交换
7, 3, 9, 6, 1 j = 1 arr[1] arr[2]
7, 3, 6, 9, 1 j = 2 arr[2] arr[3]
7, 3, 6, 1, 9 j = 3 arr[3] arr[4]

第二轮: i = 1
3, 7, 6, 1, 9 j = 0
3, 6, 7, 1, 9 j = 1
3, 6, 1, 7, 9 j = 2

第三轮: i = 2
3, 6, 1, 7, 9 j = 0
3, 1, 6, 7, 9 j = 1

第四轮: i = 3
1, 3, 6, 7, 9 j = 0

选择排序: 每一轮都会选出一个最大的,放在最后面
数组:[9, 7, 3, 6, 1]  length = 5

第一轮: 1, 7, 3, 6, 9
int index = 0;
1: 比较 arr[1] 和 arr[index] ,记录下标最大值 index = 0
2: 比较 arr[2] 和 arr[index],如果arr[2]大进行替换,记录下标最大值 index = 0
3: 比较 arr[3] 和 arr[index],如果arr[3]大进行替换,记录下标最大值 index = 0
4: 比较 arr[4] 和 arr[index],如果arr[4]大进行替换,记录下标最大值 index = 0
index 和当前最后一位(length - 1)进行交换
i:0
j: 1 ~ 4

第二轮: 1, 6, 3, 7, 9
1: 比较arr[0] 和 arr[1] ,记录下标最大值 index = 1
2: 比较 arr[2] 和 arr[index],如果arr[2]大进行替换,记录下标最大值 index = 1
3: 比较 arr[3] 和 arr[index],如果arr[3]大进行替换,记录下标最大值 index = 1
index 和 当前最后一位(length -1 -1)进行交换

i: 1
j: 1 ~ 3

第三轮: 1, 3, 6, 7, 9
1: 比较arr[0] 和 arr[1] ,记录下标最大值 index = 1
2: 比较 arr[2] 和 arr[index],如果arr[2]大进行替换,记录下标最大值 index = 1
index 和 当前最后一位(length -1 -2) 进行交换
i: 2
j: 1 ~ 2

第四轮: 1, 3, 6, 7, 9
1: 比较arr[0] 和 arr[1] ,记录下标最大值 index = 1
index 和 当前最后一位(length -1 -3)进行交换

i: 3
j: 1

i: int i = 0; i < legth - 1; i++
j: int j = 1; j < length - i; j++
当前最后一位:length - 1 -i

eg1:
package day04.method;
/*

  • 方法的定义/声明, 方法的调用/使用
    */
    public class Method01Demo {
    public static void main(String[] args) {
    洗衣服();

     String 饭 = 做饭();
     System.out.println(饭);
     
     String 工具 = "棍子";
     打架(工具);
    

    }

    /*

    • 方式一:
      /
      public static void 洗衣服() {
      System.out.println(“把脏衣服丢洗衣机”);
      System.out.println(“关上洗衣机”);
      System.out.println(“放洗衣液”);
      System.out.println(“开始洗衣服”);
      System.out.println(“旋转”);
      System.out.println(“脱水”);
      System.out.println(“晾衣服”);
      //return;//标记方法结束,并返回
      }
      /
    • 方式二:
    • 返回值: 方法调用者可以得到的结果
      */
      public static String 做饭() {
      System.out.println(“买菜”);
      System.out.println(“洗菜”);
      System.out.println(“切菜”);
      System.out.println(“煮菜”);
      System.out.println(“放调料”);
      System.out.println(“做好了”);
      return “蛋炒饭”;//返回结果
      }

    /*

    • 带参数
      */
      public static void 打架(String 工具) {
      System.out.println(“吵一架”);
      System.out.println(“抄起” + 工具);
      System.out.println(“打完了”);
      System.out.println(“不打了”);
      }

    /*

    • 计算两个整数的和,并返回
      */

}

eg2:
package day04.method;

import java.util.Arrays;

/*

  • 计算两个整数的和,并返回
    */
    public class Mathod02Demo {
    public static void main(String[] args) {
    int a = 4;
    int b = 6;
    int sum1 = sum(a, b);
    System.out.println(sum1);

    char[] aa = {'q','w','e','r'};
    char[] bb = {'a','s','d','f'};
    method(aa,bb);
    System.out.println(Arrays.toString(aa));
    System.out.println(Arrays.toString(bb));
    

    }
    /*

    • 基本数据类型作为方法参数
      */
      public static int sum(int a, int b) {
      a++;
      int sum = a + b;
      return sum;
      }

    /*

    • 数组作为方法参数
      */

    public static void method(char[] a, char[] b) {
    a[0] = ‘p’;
    b[3] = ‘k’;
    }
    }

eg3:
package day04.api;
/*

  • System类
    */
    public class Demo01System {
    public static void main(String[] args) {
    // 换行打印 - 可以不用输入
    System.out.println();
    // 打印 - 不换行 - 一定要放参数
    System.out.print("/r");

     /*
      * 转义字符:
      * 	/n - 回车  /r - 换行   /t     //
      *  /n/r
      */
    

    }

}
eg4:
package day04.api;
/*

  • Math类 - 数学类
    */
    public class Demo02Math {
    public static void main(String[] args) {
    // Math.random() 范围: [0,1)
    double random = Math.random();
    System.out.println(random);

     //[0,20)
     random = Math.random() * 20;
     System.out.println(random);
     
     //整数[0,65)
     int random1 = (int)(Math.random() * 65);
     System.out.println(random1);
     
     //整数[65,90]
     //A = 65  Z = 90 ASCII码
     random1 = (int)(Math.random() * 26 + 65);
     System.out.println(random1);
    
     //A = 65  Z = 90 ASCII码
     //a = 97  
     char c = (char)(Math.random() * 26 + 65);
     char c1 = (char)(Math.random() * 26 + 'a');
     System.out.println(c);
     System.out.println(c1);
     
     //计算 一个的几次方
     //Math.pow(double底数, double指数)
     int d = (int)Math.pow(2, 10);
     System.out.println(d);
    

    }

}

eg5:
package day04.api;

import java.util.Arrays;

/*

  • String类 - 字符串类
    */
    public class Demo03String {
    public static void main(String[] args) {
    String str = “qwert”;

     //获取字符串中的单个字符
     char c = str.charAt(1);
     System.out.println(c);
     
     char[] arr = new char[5];
     for(int i = 0; i < arr.length; i++) {
     	 arr[i]= str.charAt(i);
     }
     System.out.println(Arrays.toString(arr));
    

    }

}

eg6:
package day04.game;

import java.util.Arrays;
import java.util.Scanner;

/*

  • 1.随机生成5个字母 -> 字符数组

  • 2.用户猜字母 -> 控制台猜 -> 字符数组

  • 3.两个字符数组比较 , 字母正确个数,位置正确个数

  • 4.用户猜不对,重复 2 和 3
    */
    public class GuessGame01Demo {
    public static void main(String[] args) {
    Scanner console = new Scanner(System.in);
    //1.随机生成5个字母
    char[] charArr = randomChars();
    System.out.println(Arrays.toString(charArr));
    //4.用户猜不对,重复 2 和 3
    while(true) {
    //2.用户猜字母
    System.out.println(“请输入:”);
    String str = console.next();
    char[] guess = parseChars(str);
    //3. 比较 charArr 和 guess 字符数组
    int[] res = compare(charArr,guess);
    System.out.print(“字母正确个数:” + res[0]);
    System.out.println(“位置正确个数:” + res[1]);
    //5.全猜对
    if(res[1] == 5) {
    System.out.println(“全对了!”);
    break;
    }
    }

    }

    /*

    • 目的: 比较两个字符数组
      */
      public static int[] compare(char[] answer, char[] guess) {
      // result[0]表示 字母正确 result[1]表示 位置正确
      int[] result = new int[2];
      for(int i = 0; i < answer.length; i++) {
      for(int j = 0; j < guess.length; j++) {
      //判断字母正确个数
      if(answer[i] == guess[j]) {
      //如果字母正确 + 1
      result[0]++;
      //判断位置正确个数
      if(i == j) {
      //如果位置正确 + 1
      result[1]++;
      }
      }
      }
      }
      return result;
      }

    /*

    • 目的: 为了把字符串转换成字符数组
      */
      public static char[] parseChars(String str) {
      char[] charArr = new char[5];
      for(int i = 0; i < charArr.length; i++) {
      charArr[i]= str.charAt(i);
      }
      return charArr;
      }

    /*

    • 目的: 为了得到长度为5的随机字符数组
      */
      public static char[] randomChars() {
      char[] chars = new char[5];
      for(int i = 0; i < chars.length; i++) {
      chars[i] = (char)(Math.random() * 26 + ‘A’);
      for(int j = 0; j < i; j++) {
      //判断 i位置上的字符 和 i位置之前的所有字符相比较
      if(chars[j] == chars[i]) {
      i–;//回到原来位置上重新随机生成字符
      break;//如果相同,就结束
      }
      }
      }
      return chars;
      }

}

eg7:
package day04.sort;

import java.util.Arrays;

/*

  • 冒泡排序
    */
    public class sort1 {
    public static void main(String[] args) {
    int[] arr = {9, 7, 3, 6, 1};
    bubbleSort(arr);
    System.out.println(Arrays.toString(arr));
    }

    public static void bubbleSort(int[] arr) {
    for(int i = 0; i < arr.length - 1; i++) {
    for(int j = 0; j < arr.length - 1 - i; j++) {
    if(arr[j] > arr[j+1]) {
    //交换
    int temp = arr[j];
    arr[j] = arr[j + 1];
    arr[j + 1] = temp;
    }
    }
    }
    }
    }

eg8:
package day04.sort;

import java.util.Arrays;

/*

  • 选择排序
    */
    public class sort2 {

    public static void main(String[] args) {
    int[] arr = {9,7,3,6,1};
    selectSort(arr);
    System.out.println(Arrays.toString(arr));

    }

    public static void selectSort(int[] arr) {
    for(int i = 0; i < arr.length - 1; i++) {
    int index = 0;//标记下标最大值
    for(int j = 1; j < arr.length - i; j++) {
    if(arr[j] > arr[index]) {
    index = j;
    }
    //index 和 最后一个位置进行交换
    int temp = arr[index];
    arr[index] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = temp;
    }
    }
    }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值