蓝桥杯复习


蓝桥杯复习

输入输出

输入

Scanner sc = new Scanner(System.in);

例:

  • 输入值
    int a = sc.nextInt();
    double b = sc.nextDouble();
    long c = sc.nextLong();
  • 输入字符串
    String s1 = sc.next();
    String s2 = sc.nextLine();

    in.next() 从缓冲区接收字符遇到空格后停止。
    in.nextLine() 从缓冲区接收字符,并且接收空格,遇到换行才停止,并且会自动舍弃换行。

输出

常用的几种方式:

  • System.out.print(); //仅输出变量
  • System.out.println(); //输出变量后会自动换行
  • System.out.printf(); //格式化输出
    例:
    System.out.printf("%9.2f", d); //"9.2"中的9表示输出的长度,2表示小数点后的位数
    System.out.printf("%o", i); //"o"表示输出八进制整数
    System.out.printf("%x", i); //"x"表示输出十六进制整数
    System.out.printf("%s", i); //"d"表示输出字符串
    System.out.printf("%08", i);//输出位数为8的整数,不足前面补0(适合二进制格式)

数组

定义

int arr[] = new int[6];

初始化

int arr = {1,2,3};

数组常用类–Arrays工具类

Arrays类位于util包中
该工具类主要针对的是数组的操作
例:

import java.util.Arrays; //需要将Arrays导入

int a[] = {3,1,6,2,5};

int num1 = Arrays.binarySearch(a, 6); //获取指定值的下标(二分查找)
System.out.println(num1); //2

Arrays.sort(a); //按升序进行排序
String s1 = Arrays.toString(a); //返回数组字符串形式
System.out.println(s1); //[1, 2, 3, 5, 6]

String

  • 字符串一旦创建就不可再改变(可重新指向)
  • 为了提升字符串的访问效率,程序中使用了“缓存”技术
    因此在java中所有使用“双引号”括起来的字符串都会在“字符串常量池”中创建,字符串常量池在方法区中被储存(两个相同字符串在字符串常量池中保存的是相同地址)

String常用方法

String类位于lang包中,无需导入
以下String指的是需要操作的String类型变量

String.chatAt(int);       //返回一个指定位置的char值
String.endsWith(String);  //判断一个字符串是否以endstr(字符串)结尾
String.equals(Object);    //判断对象(字符串)之间是否相等
String.equalsIgnoreCase(String); //判断字符串之间是否相等,不考虑大小写
String.indexOf(String str);      //返回指定字符串str在此字符串中第一次出现的索引,返回int值
String.lastIndexOf(String str);  //返回指定字符串str在此字符串中最后一次出现的索引,返回int值
String.length();                          //返回字符串长度,返回int值
String.replaceAll(String s1,String s2);   //在String中将所有的s1字符串替换为s2字符串,返回String值
String.replaceFirst(String s1,String s2); //只替换第一个子字符串,返回String值
String.split(String str);  //根据str字符串拆分String,返回String[]数组
String.toUpperCase();      //将String转换为大写,返回String值
String.toLowerCase();      //将String转换为小写,返回String值
String.toCharArray();	   //将String转换为char数组,返回char[]数组
String.trim();             //去除String前后空白,返回String值

使用toCharArray()+增强for遍历String字符串

String s1 = "12345";
char[] s2 = s1.toCharArray();
for(char a:s2){
System.out.print(a); //12345
}

竞赛常用类

大数类

概念

  • 大数类位于java.math.*包中,其理论上可以储存无限位的大数
  • 大数类分为整数(BigInteger)和浮点数(BigDecimal)
  • 整数和浮点数不能混合运算

BigInteger和BigDecimal的使用

创建
  1. 直接声明
    BigInteger num1;
    BigDecimal num2;
  2. 构造函数初始化
    BigInteger num1 = new BigInteger("12654655874");
    BigDecimal num2 = new BigDecimal("1275646.5132545");
    赋值–valueOf()
    valueOf()不能超过long类型的最大取值
    num1 = BigInteger.valueOf(154847312562L); //若大于int的范围要加L
    num2 = BigDecimal.valueOf(115643.135423);
    加/减/乘/除–add()/subtract()/multiply()/divide()
    BigInteger num1 = new BigInteger("126546558741235123541212351235");
    BigInteger num2 = new BigInteger("127564635415145145151235125111");
    BigInteger num3;
    num3 = num1.add(num2);       //加法运算
    num3 = num1.subtract(num2);  //减法运算
    num3 = num1.multiply(num2);  //乘法运算
    num3 = num1.divide(num2);    //除法运算
    num3 = num1.mod(num2);       //取余
    num3 = num1.max(num2);       //求最大值
    num3 = num1.min(num2);       //求最小值
    num3 = num1.compareTo(num2); //比较大小
    num3 = num1.gcd(BigInteger); //求最大公约数
    System.out.print(num3);      //可直接输出

进制转换–BigInteger、String.format()、Integer的使用

*转*进制–BigInteger

BigInteger num = new BigInteger(str,2);  //二进制转十进制,str为String类型
BigInteger num = new BigInteger(str,8);  //八进制转十进制
BigInteger num = new BigInteger(str,16); //十六进制转十进制
String num1 = num.toString(2);     //十进制转二进制
String num1 = num.toString(8);     //十进制转八进制
String num1 = num.toString(16);    //十进制转十六进制

使用String.format()格式化实现十进制转八/十六进制

String num = String.format("%o", o);    //十进制转八进制
String num = String.format("%x", o);    //十进制转十六进制

使用Integer类实现十进制转*进制

Integer类位于java.lang包中,无需导包

String num = Integer.toBinaryString(i); //十进制转二进制,i为int类型
String num = Integer.toOctalString(i);  //十进制转八进制
String num = Integer.toHexString(i);    //十进制转十六进制

Math运算类

Math类位于java.lang包下,无需导包

int num = Math.abs(-13);    //求绝对值 13
int num = Math.pow(3,2);    //求平方   9
double num = Math.floor(3.23); //取整(小于该数的最大整数)  3.0
double num = Math.ceil(3.23);  //取整(大于该数的最小整数)  4.0
double num = Math.PI           //取出π的值
double num = Math.round(3.24); //四舍五入(保留一位小数)    3.0
double num = Math.round(3.62566*100)/100.0;   //保留两位小数 3.63
double num = Math.round(3.62566*1000)/1000.0; //保留三位小数 3.626
double num = Math.sqrt(100)    //求平方根  10

Random随机数类

Random类位于java.util包下,需要导包

import java.util.Random;   //导入Random包

Random rnd = new Random(); //创建构造方法
int num = rnd.nextInt();   //随机生成一个int类型的数
int num = rnd.nextInt(10);      //随机生成0~10之间的数(不包括10)
int num = rnd.nextInt(900)+100; //随机生成100~1000之间的数(不包括1000)

Calender日期类

set(int field, int value); //第一个参数是日期字段,诸如YEAR、MONTH 等将给定的日历字段设置为给定值。
set(int year, int month, int date); // 设置日历字段YEAR、MONTH 和 DAY_OF_MONTH的值
例:

Calendar date = Calendar.getInstance(); //创建实例
// 设置日期为2021年4月17日
date.set(date.YEAR, 2021);      
date.set(date.MONTH, 3);           // 月份从下标0开始
date.set(date.DAY_OF_MONTH, 17);
// 获取2021年4月17日是星期几
System.out.print(date.get(date.DAY_OF_WEEK)); //星期六为一星期最后一天   7
// 增减时间
date.add(date.YEAR, 1);          // 增加1年
date.add(date.MONTH, 2);         // 增加2年
date.add(date.DAY_OF_MONTH, -1); // 减去1天

ArrayList类

ArrayList位于java.util包中

List存储元素的特点:
有序可重复(存取的顺序相同)

构造列表

ArrayList arr = new ArrayList();    //构造一个初始容量为 10 的空列表
ArrayList arr = new ArrayList(int); //构造一个具有指定初始容量的空列表

常用方法摘要

注意返回值,API中可查

arr.add(Object e);             //将指定的元素添加到此列表的尾部
arr.add(int index, Object e);  //将指定的元素插入此列表中的指定位置
arr.get(int index);            //返回此列表中指定位置上的元素
arr.size();                    //获取列表中元素的个数
arr.clear();                   //清空列表
arr.isEmpty();                 //判断列表是否为空,为空则为true
arr.indexOf(Object o);         //返回此列表中首次出现的指定元素的索引
arr.lastIndexOf(Object o);     //返回此列表中最后一次出现的指定元素的索引
arr.toArray();                 //将列表转换成数组
arr.contains(Object o);        //判断列表中是否包含某个元素,包含则返回true
arr.remove(int index);         //删除列表中指定位置的元素
arr.remove(Object o);          //删除列表中首次出现的指定元素

Collections工具类可以对List集合中的元素排序

sort(arr);   //排序

ArrayList遍历的3种方式

ArrayList arr = new ArrayList();
arr.add(1);
arr.add(2);
  1. for循环遍历
    for(int i = 0;i<arr.size();i++){
    	System.out.print(arr.get(i));
    }
  2. 增强for遍历
    for(Integer num:arr){
    	System.out.print(num);
    }
  3. Iterator迭代器遍历
    for(Iterator it = arr.iterator();it.hasNext();){
    	System.out.print(it.next());
    }

    迭代器解释:

    arr.iterator();     //获取列表所依赖的迭代器对象
    it.hasNext();       //判断是否下一位有元素,有则返回true
    it.next();          //将迭代器向下移动一位,并且取出指向的元素
    it.remove();        //移除迭代器返回的最后一个元素

SortedSet类

SortedSet类位于java.util包中

set存储元素的特点:
无需不可重复(存取的顺序不一定相同,元素不可重复)
存进去的元素可以按照元素的大小自动排序
使用方法和ArrayList一致,两者都是父类Collection下的

HashMap类

HashMap类位于java.util包中

Map集合特点:
Map集合以键值对的方式存储元素(key和value)
键(key)特点是无序不可重复的
Map和Collection没有关系

Map集合中常用的方法

map.put(key,value);       //向集合中添加键值对
map.get(key);             //通过key获取value
map.size();               //获取集合中键值对的个数
map.containsKey(key);     //判断集合中是否包含此key
map.containsValue(value); //判断集合中是否包含此value
map.remove(key);          //通过key将键值对删除
map.isEmpty();            //判断集合是否为空
map.clear();              //清空集合
map.keySet();             //获取集合中所有的key,返回值为set集合
map.values();             //获取集合中所有的values,返回值为Collection集合

例:

创建Map集合
Map map = new HashMap();
存储键值对
map.put("A","JACK");
map.put("B","SUN");
map.put("C","COOK");

Map存储过程中如果key重复了,value将会被覆盖

遍历Map集合
  1. 迭代器遍历
    set keys = map.keyset();
    Iterator it = keys.iterator();
    while(it.hasNext()){
    Object id = it.next();      //得到key
    Object name = map.get(id);  //得到value
    System.out.print(name);
    }
  2. 增强for遍历
    for(String value:map.values()){
    	System.out.print(value);  //遍历value
    }
    for(String key:map.keySet()){
    	System.out.print(key);    //遍历key
    }

文章作者: BananaYH
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BananaYH !
评论
  目录