Java蓝桥杯备赛记录

Java蓝桥杯备赛记录

📅 2026-03-23 ✏️ 2026-03-24 📝 2532 字 ⏱️ 12 分钟
蓝桥杯

emm,作者学了两周放弃了

题型结构

  • 结果填空——2题,5分一题
  • 程序设计——6题,10,10,15,15,20,20,共140

基础语法

运算符

1、算术运算符

public class ArithmeticOperators {
    public static void main(String[] args) {
        int a = 10;
        int b = 3;
        
        // 基本算术运算
        System.out.println(a + b);   // 13  加法
        System.out.println(a - b);   // 7   减法
        System.out.println(a * b);   // 30  乘法
        System.out.println(a / b);   // 3   除法(整数除法,结果为整数)
        System.out.println(a % b);   // 1   取模(求余数)
        
        // 特殊情况
        System.out.println(10 / 3.0);    // 3.3333333333333335 浮点数除法
        System.out.println(10.0 / 3);    // 3.3333333333333335
    }
}

2、自增自减运算符

public class IncrementDecrement {
    public static void main(String[] args) {
        int x = 5;
        
        // 后置自增:先使用,后增加
        System.out.println(x++);  // 输出5,然后x变为6
        System.out.println(x);    // 输出6
        
        // 前置自增:先增加,后使用
        int y = 5;
        System.out.println(++y);  // 输出6,y变为6
        System.out.println(y);    // 输出6
    }
}

3、关系(比较)运算符

public class RelationalOperators {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        
        System.out.println(a == b);  // false  等于
        System.out.println(a != b);  // true   不等于
        System.out.println(a > b);   // false  大于
        System.out.println(a < b);   // true   小于
        System.out.println(a >= b);  // false  大于等于
        System.out.println(a <= b);  // true   小于等于
        
        // 字符串比较要用equals()
        String s1 = "Hello";
        String s2 = "Hello";
        System.out.println(s1.equals(s2));   // true(正确方式)
        
        String s3 = new String("Hello");
        String s4 = new String("Hello");
        System.out.println(s3 == s4);        // false(比较的是内存地址)
        System.out.println(s3.equals(s4));   // true(比较的是内容)
    }
}

4、逻辑运算符

  • &——同真则真
  • | —— 一个满足就为真
  • ^ —— 相同为false,不同为true
public class LogicalOperators {
    public static void main(String[] args) {
        boolean t = true;
        boolean f = false;
        
        // 与运算(&& 和 &)—— 同真则真(都满足才为真)
        System.out.println(t && t);  // true  逻辑与(短路)
        System.out.println(t && f);  // false
        System.out.println(f && t);  // false(右边不会执行,短路)
        
        System.out.println(t & t);   // true  逻辑与(非短路)
        System.out.println(t & f);   // false
        
        // 或运算(|| 和 |)—— 有一个满足就为真
        System.out.println(t || f);  // true  逻辑或(短路)
        System.out.println(f || t);  // true
        System.out.println(f || f);  // false
        
        System.out.println(t | f);   // true  逻辑或(非短路)
        
        // 非运算
        System.out.println(!t);      // false 逻辑非
        System.out.println(!f);      // true
        
        // 异或 —— 相同false不同true
        System.out.println(t ^ t);   // false 相同为false
        System.out.println(t ^ f);   // true  不同为true
    }
}

5、三元运算符

public class TernaryOperator {
    public static void main(String[] args) {
        int age = 18;
        
        // 语法:条件 ? 表达式1 : 表达式2
        String status = age >= 18 ? "成年人" : "未成年人";
        System.out.println(status);  // 成年人
        
        // 可以嵌套使用,但不推荐(可读性差)
        int score = 85;
        String grade = score >= 90 ? "A" : (score >= 60 ? "B" : "C");
        System.out.println(grade);   // B
    }
}

Scanner输入

import java.util.Scanner;//导入scanner类
public class Person {
	public static void main(String args[]) {
	
		//创建Scanner对象	
		Scanner scan = new Scanner(System.in);
		
		//输入字符串
		System.out.println("请输入姓名:");
		String name = scan.nextLine();
		
		//输入整数
		System.out.println("请输入年龄:");
		int age = scan.nextInt();
		
		System.out.println("姓名:" + name + ",年龄:" + age);
		
		//关闭Scanner
		scan.close();
	}
}

面向对象基础

public class Person {
	String name;	
	int age;
	
	//构造方法
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	//方法
	public void study() {
		System.out.println(name + " " + age);
	}
	
	public static void main(String args[]) {
		Person person = new Person("NGC 2237",18);//传参
		person.study();
	}
}

流程控制

1、选择结构

if语句

		if (hasTicket) {
            if (isVip) {
                System.out.println("VIP通道进入");
            } else {
                System.out.println("普通通道进入");
            }
        } else {
            System.out.println("请先购票");
        }

switch语句

		int score = 85;
        String grade = switch (score / 10) {
            case 10, 9 -> "A";
            case 8 -> "B";
            case 7 -> "C";
            case 6 -> "D";
            default -> "F";
        };
        System.out.println("成绩等级:" + grade);
		
		// yield返回值
        String result = switch (dayOfWeek) {
            case 1, 2, 3, 4, 5 -> {
                System.out.println("工作日");
                yield "工作日";
            }
            case 6, 7 -> {
                System.out.println("周末");
                yield "周末";
            }
            default -> "无效";
        };

循环结构

for-each

for (元素类型 变量名 : 数组或集合) {
    // 循环体
}
//遍历一维数组
int[] numbers = {1, 2, 3, 4, 5};
System.out.println("数组元素:");
for (int num : numbers) {
    System.out.print(num + " ");
}
// 输出:数组元素:1 2 3 4 5

//遍历字符串数组
String[] names = {"张三", "李四", "王五"};
for (String name : names) {
    System.out.println("姓名:" + name);
}
// 输出:
// 姓名:张三
// 姓名:李四
// 姓名:王五

//遍历二维数组
int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
for (int[] row : matrix) {      // 外层循环:每次取出一行(一维数组)
    for (int num : row) {        // 内层循环:遍历这一行的每个元素
        System.out.print(num + " ");
    }
    System.out.println();        // 每行结束后换行
}
// 输出:
// 1 2 
// 3 4 
// 5 6
  • for-each不能修改数组元素,可以使用索隐变量修改
int[] arr = {1, 2, 3};
int index = 0;
for (int num : arr) {
    arr[index] = num * 2;  // 通过索引修改
    index++;
}
// arr现在是{2, 4, 6}

while

public class WhileLoop {
    public static void main(String[] args) {
        // 1. while循环
        int count = 1;
        while (count <= 5) {
            System.out.println("第" + count + "次循环");
            count++;
        }
        
        // 2. 计算数字位数
        int num = 12345;
        int temp = num;
        int digits = 0;
        while (temp > 0) {
            temp /= 10;
            digits++;
        }
        System.out.println(num + "有" + digits + "位");
    }
}
 // 3. 读取输入直到特定条件
java.util.Scanner scanner = new java.util.Scanner(System.in);
String input;
while (true) {
    System.out.print("输入exit退出:");
    input = scanner.nextLine();
    if (input.equals("exit")) {
        break;
    }
    System.out.println("你输入了:" + input);
}

do-while——至少执行一次,即便不符合条件

public class DoWhileLoop {
    public static void main(String[] args) {
        // 即使条件不满足,也会执行一次
        int j = 10;
        do {
            System.out.println("这个会执行一次,j=" + j);
        } while (j < 5);
        
        // 菜单选择示例
        java.util.Scanner scanner = new java.util.Scanner(System.in);
        int choice;
        do {
            System.out.println("\n=== 菜单 ===");
            System.out.println("1. 查询余额");
            System.out.println("2. 存款");
            System.out.println("3. 取款");
            System.out.println("0. 退出");
            System.out.print("请选择:");
            choice = scanner.nextInt();
            
            switch (choice) {
                case 1:
                    System.out.println("余额查询");
                    break;
                case 2:
                    System.out.println("存款");
                    break;
                case 3:
                    System.out.println("取款");
                    break;
                case 0:
                    System.out.println("再见");
                    break;
                default:
                    System.out.println("无效选择");
            }
        } while (choice != 0);
        
        scanner.close();
    }
}

跳转语句

break语句

break——跳出当前循环,不再执行

public class BreakStatement {
    public static void main(String[] args) {
        // 1. 跳出当前循环
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break;  // i=5时跳出循环
            }
            System.out.print(i + " ");  // 输出:1 2 3 4
        }
        System.out.println();
        
        // 2. 跳出嵌套循环(使用标签)
        outer: for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (i == 1 && j == 1) {
                    System.out.println("跳出外层循环");
                    break outer;
                }
                System.out.println("i=" + i + ", j=" + j);
            }
        }
    }
}

continue语句

跳过条件

public class ContinueStatement {
    public static void main(String[] args) {
        // 1. 跳过当前迭代
        System.out.println("1到10的偶数:");
        for (int i = 1; i <= 10; i++) {
            if (i % 2 != 0) {
                continue;  // 跳过奇数
            }
            System.out.print(i + " ");  // 输出:2 4 6 8 10
        }
        System.out.println();
        
        // 2. 带标签的continue
        outer: for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (i == 2 && j == 2) {
                    System.out.println("跳过外层循环的当前迭代");
                    continue outer;  // 跳到外层循环的下一次迭代
                }
                System.out.println("i=" + i + ", j=" + j);
            }
        }
        
        // 3. 实际应用:跳过无效数据
        int[] scores = {85, -1, 90, 75, -1, 95};
        int sum = 0;
        int count = 0;
        for (int score : scores) {
            if (score < 0) {
                System.out.println("跳过无效分数:" + score);
                continue;
            }
            sum += score;
            count++;
        }
        System.out.println("平均分:" + (double)sum / count);
    }
}

return

直接结束

public class ReturnStatement {
    public static void main(String[] args) {
        System.out.println("开始执行");
        
        if (args.length == 0) {
            System.out.println("没有参数,提前返回");
            return;  // 结束main方法
        }
        
        System.out.println("有参数,继续执行");
        
        int result = calculate(10, 5);
        System.out.println("计算结果:" + result);
    }
    
    public static int calculate(int a, int b) {
        if (b == 0) {
            System.out.println("除数不能为0");
            return 0;  // 提前返回
        }
        return a / b;
    }
}

数组

创建数组(初始化)

public class ArrayInitialization {
    public static void main(String[] args) {
        // 1. 动态初始化(指定长度,系统赋默认值)
        int[] arr1 = new int[5];        // [0, 0, 0, 0, 0]
        double[] arr2 = new double[3];   // [0.0, 0.0, 0.0]
        boolean[] arr3 = new boolean[2]; // [false, false]
        String[] arr4 = new String[4];   // [null, null, null, null]
        
        // 2. 静态初始化(指定具体值)
        int[] arr5 = new int[]{1, 2, 3, 4, 5};
        String[] arr6 = new String[]{"Java", "Python", "C++"};
        
        // 3. 静态初始化的简化形式
        int[] arr7 = {1, 2, 3, 4, 5};
        String[] arr8 = {"张三", "李四", "王五"};
        
        // 注意:简化形式不能拆分
        // int[] arr9;
        // arr9 = {1, 2, 3};  // 错误!必须在一行完成
        
        // 正确拆分
        int[] arr10;
        arr10 = new int[]{1, 2, 3};  // 正确
    }
}

获取数组长度

int length = arr.length;
System.out.println("数组长度:" + length);    // 5

二维数组

public class TwoDimensionalArray {
    public static void main(String[] args) {
        // 1. 声明和初始化
        // 方式1:指定行和列
        int[][] matrix1 = new int[3][4];
        
        // 方式2:静态初始化
        int[][] matrix2 = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        
        // 方式3:不规则数组(每行长度可以不同)
        int[][] jagged = new int[3][];
        jagged[0] = new int[]{1, 2};
        jagged[1] = new int[]{3, 4, 5};
        jagged[2] = new int[]{6, 7, 8, 9};
        
        // for-each遍历
        System.out.println("for-each遍历:");
        for (int[] row : matrix2) {
            for (int num : row) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
        
        // 4. 不规则数组遍历
        System.out.println("不规则数组:");
        for (int i = 0; i < jagged.length; i++) {
            for (int j = 0; j < jagged[i].length; j++) {
                System.out.print(jagged[i][j] + " ");
            }
            System.out.println();
        }
    }
}

String类的常用方法

字符串长度

String str = "Hello Java";
int len = str.length();//len = 10;
//空格也算在内

字符串比较

equals() —— 比较内容是否相等

String str1 = "Hello";
String str2 = "Hello";
String str3 = "hello";

System.out.println(str1.equals(str2));        // true
System.out.println(str1.equals(str3));        // false
System.out.println(str1.equalsIgnoreCase(str3)); // true (忽略大小写)

compareTo()——比较字典顺序

字符串查找

charAt() —— 获取指定位置的字符

String str = "Hello";
char ch = str.charAt(1);  // 返回 'e'(索引从0开始)
System.out.println(ch);

indexOf() —— 查找子串位置

String str = "Hello Java";
System.out.println(str.indexOf('e'));      // 1(查找字符)
// 索引:    0 1 2 3 4 5 6 7 8 9
// 字符:    H e l l o   J a v a
//           ↑
//         'e' 在索引1

System.out.println(str.indexOf("Java"));   // 6(查找字符串)
// 索引:    0 1 2 3 4 5 6 7 8 9
// 字符:    H e l l o   J a v a
//                      ↑
//                   "Java" 从索引6开始

System.out.println(str.indexOf('l', 3));   // 3(从索引3开始查找)
// 索引:    0 1 2 3 4 5 6 7 8 9
// 字符:    H e l l o   J a v a
//                ↑ ↑
//        第一个l在索引2,但起始位置是3
//        从索引3开始找:第一个字符是索引3的 'l'
//        所以找到的是索引3的 'l'

System.out.println(str.lastIndexOf('l'));  // 3(从后往前查找)
// 索引:    0 1 2 3 4 5 6 7 8 9
// 字符:    H e l l o   J a v a
//                ↑ ↑
//        从后往前找:先遇到索引3的 'l',然后索引2的 'l'
//        最后一次出现的是索引3的 'l'

contains() —— 是否包含子串

String str = "Hello Java";
System.out.println(str.contains("Java"));
System.out.println(str.contains("Python"));

startsWith()/endsWith() —— 判断前缀/后缀

String str = "Hello Java";
System.out.println(str.startsWith("Hell"));//true
System.out.println(str.endsWith("ava"));//true
System.out.println(str.startsWith("hello"));//false

字符串截取

substring() —— 截取子串

String str = "Hello Java";
System.out.println(str.substring(6));   //"Java"——从索引6到结尾
System.out.println(str.substring(0,5)); //"Hello"——从0到5,不包括5

字符串转换

toUpperCase()/toLowerCase() —— 大小写转换

String str = "Hello Java";
System.out.println(str.toUpperCase()); // "HELLO JAVA"
System.out.println(str.toLowerCase()); // "hello java"

toCharArray() —— 转换为字符数组

String str = "Hello";
char[] chars = str.toCharArray();  // {'H','e','l','l','o'}

valueOf() —— 转换为字符串

int num = 123;
String str1 = String.valueOf(num); //"123"

boolean bool = true;
String str2 = String.valueOf(bool); //"true"

char[] ch = {'a','b','c','d'};
String str3 = String.valueOf(ch);  //"abcd"

字符串替换

replace()——替换字符或子串

String str = "Hello Java";
System.out.println(str.replace('l','L')); //将l替换为L //"Hello Java"
System.out.println(str.replace("Java","World")); //将Java替换为World  //"Hello World"

replaceAll()——使用正则表达式替换

public class ReplaceAllDemo {
    public static void main(String[] args) {
        String str = "a1b2c3";
        
        System.out.println("原字符串: " + str);
        System.out.println();
        
        // 1. 替换所有数字为 *
        System.out.println("1. replaceAll(\"\\\\d\", \"*\")");
        System.out.println("   结果: " + str.replaceAll("\\d", "*"));
        // a*b*c*
        
        // 2. 替换所有字母为 *
        System.out.println("\n2. replaceAll(\"\\\\D\", \"*\")");
        System.out.println("   结果: " + str.replaceAll("\\D", "*"));
        // *1*2*3 (\\D 匹配非数字)
        
        // 3. 替换所有字母为 #
        System.out.println("\n3. replaceAll(\"[a-z]\", \"#\")");
        System.out.println("   结果: " + str.replaceAll("[a-z]", "#"));
        // #1#2#3
        
        // 4. 只替换数字为 X
        System.out.println("\n4. replaceAll(\"[0-9]\", \"X\")");
        System.out.println("   结果: " + str.replaceAll("[0-9]", "X"));
        // aXbXcX
    }
}
public class ReplaceAllExamples {
    public static void main(String[] args) {
        String str = "Hello123World456Java789";
        
        System.out.println("原字符串: " + str);
        System.out.println();
        
        // 1. 删除所有数字
        System.out.println("删除所有数字: " + str.replaceAll("\\d", ""));
        // HelloWorldJava
        
        // 2. 删除所有字母
        System.out.println("删除所有字母: " + str.replaceAll("[a-zA-Z]", ""));
        // 123456789
        
        // 3. 替换所有数字为 #
        System.out.println("数字变#: " + str.replaceAll("\\d", "#"));
        // Hello###World###Java###
        
        // 4. 替换连续数字为一个 *
        System.out.println("连续数字变*: " + str.replaceAll("\\d+", "*"));
        // Hello*World*Java*
        
        // 5. 替换所有小写字母为大写字母的标记
        System.out.println("小写字母变*: " + str.replaceAll("[a-z]", "*"));
        // H*******W*****J****
        
        // 6. 只保留数字
        System.out.println("只保留数字: " + str.replaceAll("\\D", ""));
        // 123456789
        
        // 7. 只保留字母
        System.out.println("只保留字母: " + str.replaceAll("[^a-zA-Z]", ""));
        // HelloWorldJava
    }
}

字符串分割

split() —— 分割字符串

String str = "apple,banana,orange";
String[] fruits = str.split(",");  //["apple","banana","orange"]

String str2 = "a b c d";
String[] arr = str.split(" ");  //["a","b","c","d"]

join() —— 连接字符串

String[] arr = {"Java","Python","C++"};
String results = String.join(",",arr);  //"Java,Python,C++"

去除空格

trim() —— 去除首尾空格

String str = " Hello Java ";
System.out.println(str.trim());  //"Hello Java"

判断空字符串

isEmpty() —— 是否为空字符串

String str1 = "";
String str2 = "Hello";
System.out.println(str1.isEmpty());  //true
System.out.println(str2.isEmpty());  //false

contact() —— 字符串连接

String str1 = "Hello";
String str2 = "Java";
String result = str1.contact(" ").contact(str2);
//str1 + " " + str2
//"Hello Java"

repeat() —— 重复字符串

String str = "Ha";
System.out.println(str.repeat(3));
//"HaHaHa"

速查

方法 描述 示例
length() 返回字符串长度 "Hello".length() → 5
charAt(int index) 返回指定索引的字符 "Hello".charAt(1) → ’e'
equals(Object obj) 比较字符串内容 "Hi".equals("Hi") → true
equalsIgnoreCase(String) 忽略大小写比较 "HI".equalsIgnoreCase("hi") → true
indexOf(String str) 返回子串首次出现的位置 "Hello".indexOf("l") → 2
lastIndexOf(String str) 返回子串最后出现的位置 "Hello".lastIndexOf("l") → 3
substring(int begin) 截取从begin开始到结尾 "Hello".substring(2) → “llo”
substring(int begin, int end) 截取[begin, end) "Hello".substring(1,3) → “el”
toUpperCase() 转换为大写 "Hi".toUpperCase() → “HI”
toLowerCase() 转换为小写 "Hi".toLowerCase() → “hi”
trim() 去除首尾空格 " Hi ".trim() → “Hi”
replace(char old, char new) 替换字符 "Hi".replace('i','e') → “He”
replace(CharSequence old, CharSequence new) 替换字符串 "Hi".replace("Hi","Hello") → “Hello”
split(String regex) 分割字符串 "a,b,c".split(",") → [“a”,“b”,“c”]
contains(CharSequence s) 是否包含子串 "Hello".contains("ell") → true
startsWith(String prefix) 是否以前缀开头 "Hello".startsWith("He") → true
endsWith(String suffix) 是否以后缀结尾 "Hello".endsWith("lo") → true
isEmpty() 是否为空 "".isEmpty() → true
concat(String str) 连接字符串 "Hi".concat("!") → “Hi!”
toCharArray() 转换为字符数组 "Hi".toCharArray() → [‘H’,‘i’]
valueOf(各种类型) 转换为字符串 String.valueOf(123) → “123”

Arrays类工具——操作数组

数组转换

** toString() —— 转换为字符串** 一维数组用Arrays.toString,二维及多维用Arrays.deepToString

public class ToStringDemo {
    public static void main(String[] args) {
        // 一维数组
        int[] arr1 = {1, 2, 3, 4, 5};
        System.out.println("直接输出:" + arr1);           // [I@15db9742
        System.out.println("Arrays.toString:" + Arrays.toString(arr1));  // [1, 2, 3, 4, 5]
        
        // 二维数组
        int[][] arr2 = {{1, 2}, {3, 4}, {5, 6}};
        System.out.println("二维数组:" + Arrays.toString(arr2));  // [[I@6d06d69c, [I@7852e922, ...]
        System.out.println("deepToString:" + Arrays.deepToString(arr2));  // [[1, 2], [3, 4], [5, 6]]
        
        // 多维数组
        int[][][] arr3 = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
        System.out.println("三维数组:" + Arrays.deepToString(arr3));
        // [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
        
        // 对象数组
        String[] names = {"张三", "李四", "王五"};
        System.out.println(Arrays.toString(names));  // [张三, 李四, 王五]
    }
}

sort() —— 排序

import java.util.Arrays;
public class Homework {
	public static void main(String[] args) {
		//基本类型数组排序(升序)
		int[] numbers = {5,2,8,1,9,3,7,4,6};
		Arrays.sort(numbers);
		System.out.println("升序排序:" + Arrays.toString(numbers));
		//升序排序:[1, 2, 3, 4, 5, 6, 7, 8, 9]
		
		//部分排序
		int[] arr1 = {5,2,8,1,9,3,7,4,6};
		Arrays.sort(arr1,2,6); //排序索引2到6的元素
		System.out.println("部分排序:" + Arrays.toString(arr1));
		//部分排序:[5, 2, 1, 3, 8, 9, 7, 4, 6]
		
		//对象数组排序(需要实现Comparable)
        String[] names = {"张三", "李四", "王五", "赵六"};
        Arrays.sort(names);
        System.out.println("字符串排序:" + Arrays.toString(names));  // [张三, 李四, 王五, 赵六]
	}
}

copyOf() 和 copyOfRange() —— 数组复制

public class CopyDemo {
    public static void main(String[] args) {
        int[] original = {1, 2, 3, 4, 5};
        
        // 1. copyOf - 复制数组(指定新长度)
        int[] copy1 = Arrays.copyOf(original, 3);
        System.out.println("复制前3个:" + Arrays.toString(copy1));  // [1, 2, 3]
        
        int[] copy2 = Arrays.copyOf(original, 8);
        System.out.println("扩展长度:" + Arrays.toString(copy2));  // [1, 2, 3, 4, 5, 0, 0, 0]
        
        int[] copy3 = Arrays.copyOf(original, original.length);
        System.out.println("完整复制:" + Arrays.toString(copy3));  // [1, 2, 3, 4, 5]
        
        // 2. copyOfRange - 复制指定范围
        int[] copy4 = Arrays.copyOfRange(original, 1, 4);
        System.out.println("复制索引1-3:" + Arrays.toString(copy4));  // [2, 3, 4]
        
        int[] copy5 = Arrays.copyOfRange(original, 2, 7);
        System.out.println("超出范围:" + Arrays.toString(copy5));  // [3, 4, 5, 0, 0]
    }
}

binarySearch() —— 二分查找

public class BinarySearchDemo {
    public static void main(String[] args) {
        // 二分查找要求数组已排序
        int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
        
        // 查找存在的元素
        int index = Arrays.binarySearch(arr, 7);
        System.out.println("7的索引:" + index);  // 3
        
        index = Arrays.binarySearch(arr, 13);
        System.out.println("13的索引:" + index);  // 6
        
        // 查找不存在的元素
        index = Arrays.binarySearch(arr, 8);
        System.out.println("8的索引:" + index);  // -5(-插入点-1)
        
        // 插入点计算:-5 表示应该插入在索引4的位置(5前面)
        // 公式:插入点 = -结果 - 1
        
        // 部分查找
        int[] arr2 = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
        index = Arrays.binarySearch(arr2, 2, 8, 7);  // 在索引2-7范围内查找
        System.out.println("在指定范围内查找7:" + index);  // 3
        
        // 对象数组查找
        String[] names = {"Alice", "Bob", "Charlie", "David"};
        Arrays.sort(names);  // 必须先排序
        index = Arrays.binarySearch(names, "Charlie");
        System.out.println("Charlie的索引:" + index);  // 2
        
    }
}

算法

暴力解题

标签: 蓝桥杯
分享: Twitter Facebook