蓝桥杯复习
输入输出
输入
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的使用
创建
- 直接声明
BigInteger num1; BigDecimal num2;
- 构造函数初始化
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);
- for循环遍历
for(int i = 0;i<arr.size();i++){ System.out.print(arr.get(i)); }
- 增强for遍历
for(Integer num:arr){ System.out.print(num); }
- 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集合
- 迭代器遍历
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); }
- 增强for遍历
for(String value:map.values()){ System.out.print(value); //遍历value } for(String key:map.keySet()){ System.out.print(key); //遍历key }