ps:需要读者掌握JAVA语言基础,了解方法,接口,类,数组等基础知识
本文借鉴蓝桥云课官网网课内容撰写:连接高校和企业 - 蓝桥云课 (lanqiao.cn)
作者大二,寒假开始从零准备蓝桥杯,本文为作者在蓝桥云课上的学习笔记,后续内容持续更
新,如有任何问题请及时联系作者。
Ecplise下载网址https://www.eclipse.org/downloads/packages;
推荐选择Eclipse lDE for Eclipse Committers; 该版本是eclipse最基础的版本,适Java se个人开发者、或希望根据自己需求配置插件的开发者使用。
大家可以参考其他博主文章。
byte数据类型是8位、有符号的,以二进制补码表示的整数:
最小值是-128,最大值是127,byte类型用在大型数组中节约空间,主要代替整数,byte变量占用的空间只有int类型的四分之一;
short数据类型是16位有符号的以二进制补码表示的整数
最小值是-32768,最大值是32767,Short 数据类型也可以像 byte那样节省空间,short变量是int型变量所占空间的二分之一;
int数据类型是32位、有符号的以二进制补码表示的整数:
最小值是-2,147,483,648,最大值是2,147,483,647,一般地整型变量默认为int 类型;
long数据类型是64位、有符号的以二进制补码表示的整数
最小值是-922337203685477588,最大值是9,223372036854,775807,这种类型主要使用在需要比较大整数的系统上;
float 数据类型是单精度、32位、符合IEEE754标准的浮点数;
float在储存大型浮点数组的时候可节省内存空间;默认值是0.0;浮点数不能用来表示精确的值
double 数据类型是双精度、64 位、符合EEE 754 标准的浮点数;浮点数的默认类型为double 类型;默认值是0.0;double类型同样不能表示精确的值,
boolean数据类型表示一位的信息;只有两个取值:true和false;这种类型只作为一种标志来记录true/false情况;默认值是false;
char 类型是一个单一的16位Unicode字符,最小值是\u0000(十进制等效值为0);最大值是luffff(即为65535),char数据类型可以储存任何字符.
byte一>short一>char一>int一>long一>float一> double;
注意:1.不能对boolean类型进行类型转换
2.不能把对象类型转换成不相关类的对象
3.在把容量大的类型转换为容量小的类型时必须使用强制类型转换
4.转换过程中可能导致溢出或损失精度
5.浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
转换的数据类型必须是兼容的;
int a=0;
long b=(long)a;
Scanner类9大常用输人方法
1.nextBoolean);//接收一个布尔类型
2.nextByte();
//接收一个byte型整数
3.nextShort();
//接收short型整数
4.nextlnt();
//接收一个int整数
5.nextLong();
//接收long型整数
6.nextFloat();
//接收float型小数
7.nextDouble(); //接收double型小数
8.next();
//接收读取不带空格的字符串
9.nextLine();
//接收读取整段字符串
printf输出格式
System.out.printf(“格式控制”,表达式1,表达式2,......,表达式n)
%d,整数
%8d,整数,右对齐,输出宽度为8
-6%,整数,左对齐,输出宽度为6
%f,浮点数
%8f,浮点数,右对齐,输出宽度为8
%.2f,浮点数,精确到百分位
/*输入两个正浮点A,B,输出A+B并四舍五入保留两位小数*/
public class Main{
public static void main(String[] args) {
double a=1.3145;
double b=2.6578;
System.out.printf("%.2f",a+b);
}
}
System.out.print0:是最常用的输出语句,它会把括号里的内容转换成字符串输出到输出窗口
System.out.println():与print()基本一样,区别就是输出完成后执行换行
System.out.printf():这个方法延续了C语言的输出方式,通过格式化文本和参数列表输出
String的值不可变StringBuilder的值是可变的,String每赋予一个值,都会产生一个新的地址,而
StringBuilder是在原有地址上一直更改的,节省了大量的空间,这也代表了它运行的速度更快。
String:适用于少量的字符串操作的情况
StringBuilder: 适用于需要对字符串进行修改的情况
常使用的多种String类方法
1. char charAt(int index) //返回指定索引的字符
2. int compareTo(Object o)//把这个字符串和另一个对象比较。大于返回1,等于返回0,小于返回-1
3. String concat(String str) //将指定字符串连接到此字符串的结尾
4. boolean equals(String string1)//将此字符串与指定的字符串比较
5.int indexOf(String str)//返回指定子字符串在此字符串中第一次出现处的索引。没出现返回-1
6. int length()//返回此字符串的长度。
7.substring()方法//str.substring(indexStart,indexEnd)功能为:截取方法调用者(即str)的从indexStart到indexEnd(包括indexStart,不包括indexEnd;即含头不含尾、或左闭右开区间内的子字符串)。
常用StringBuilder方法
1. void append(Object obj)//追加 object参数的字符串表示形式
2. int indexOf(String str)//返回指定子字符串第一次出现的字符串中的索引
3.StringBuilder reverse()//返回一个stringBuilder的对象,为该对象的反转
4.boolean isEmpty()//判断字符串是否为空
5.int charAt(int index)//返回指定索引的字符
1.数字反转 - 蓝桥云课 (lanqiao.cn)
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整
数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数
字不应为零
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
if(N>0) {
StringBuilder str=new StringBuilder();
str=str.append(N);
str=str.reverse();
String str1=str.toString();
int n=Integer.valueOf(str1);
System.out.print(str);
}
else {
String str=N+"";
str=str.substring(1,str.length());
StringBuilder str1=new StringBuilder();
str1.append(str);
str1.reverse();
String str2=str1.toString();
int n=Integer.valueOf(str2);
System.out.print(-n);
}
}
}
Math类表示数学类,因为Math类中的数学方法都被定义为static形式,所以在程序中可以直接通过Math类的类名调用某个数学方法,语法格式如下:Math.xxx(参数);
1.取最大值:Math.max(double a,double b)
2.取最小值:Math.min(double a,double b)
3.取绝对值:Math.abs(double a)
4.整数函数:Math.round(double a)/*四舍五入*/
Math.floor(double a)/*向下取整*/
Math.ceil(double a)/*向上取整*/
5.三角函数:Math.sin(double a)
toRadians(double angdeg)/*将度转换为弧度*/
toDegrees(double angrad())/*将弧度转换为度*/
6.指数函数:sqrt(double a)/*平方根*/
cbrt(double a)/*立方根*/
pow(double a,double b)/*a的b次方*/
String类的toLowerCase()方法可以将字符串中的所有字符全部转换成小写,
而非字母的字符不受影响。
String类的toUpperCase()方法可以将字符串中的所有字符全部转换成大写,
而非字母的字符不受影响。
异或转换:char A='a'^32
//将一串字符串大小写转换
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.next();
for(int i=0;i='a'&&A<='z')||(A>='A'&&A<='Z')) {
A^=32;
}
else {}
System.out.print(A);
}
}
}
java.util.Arrays
Arrays.sort();/*默认升序*/
/*方法一*/
/*降序*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Integer array[]= {5,4,7,9,2,12,54,21,1};
Arrays.sort(array,new Comparator() {
public int compare(Integer a,Integer b) {
return b-a;
}
});
System.out.println(Arrays.toString(array));
}
}
/*方法二*/
/*升序*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Integer array[]= {5,4,7,9,2,12,54,21,1};
Arrays.sort(array,(o1,o2)->o1-o2);/*->相当于return*/
System.out.println(Arrays.toString(array));
}
}
Arrays.fill();
List<引用数据类型>list=new ArrayList<>();
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
1、add(object element): 向列表的尾部添加指定的元素。
2、size(): 返回列表中的元素个数
3、get(int index):返回列表中指定位置的元素,index从0开始
4、isEmpty(): 判断列表是否包含元素,不包含元素则返回 true,否则返回false。
5、contains(Object o): 如果列表包含指定的元素,则返回 true。移除列表中指定位置的元素,并返回被删元素
6、remove(int index): 移除列表中指定位置的元素,并返回被删元素
List接口基本介绍:
1. List集合类中元素有序[即添加顺序和取出顺序一致] 并且可以重复
2. List集合中的每个元素都有其对应的顺序索引,即支持索引(索引从0开始)
3. List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
List接口和数组的区别:
1.数组声明的时候要指定数组的大小,用基本类型,List声明时不用,用引用类型。
2.数组的大小固定,List的大小不固定
//list排序一
public class Main{
public static void main(String[] args) {
List list=new ArrayList<>();
list.add(5);
list.add(3);
list.add(1);
list.add(4);
list.add(2);
Collections.sort(list,(o1,o2)->o1-o2);
System.out.println(list);
}
}
//list排序二
import java.util.*;
public class Main{
public static void main(String[] args) {
List list=new ArrayList<>();
list.add(5);
list.add(3);
list.add(1);
list.add(4);
list.add(2);
Collections.sort(list,new Comparator(){
public int compare(Integer a,Integer b) {
return b-a;
}
});
System.out.println(list);
}
}
Set是一个不允许出现重复元素,并且无序的集合,主要有HashSet实现类在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素。用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。
HashSet 实现Set 接口
HashSet 是无序的,即不会记录插入的顺序。
HashSet 是一个不允许有重复元素的集合
Set
HashSet类常用方法
1.add(Object obj)方法用于向Set集合中添加元素,添加成功返回true,否则返回false
2.size() 方法:返回Set集合中的元素个数
3.remove(Object obj)方法: 删除Set集合中的元素,删除成功返回true,否则返回false
4.contains()方法:如果Set不包含元素,则返回 true ,否则返回false
5.clear() 方法: 移除此Set中的所有元素
1.明明的随机数 - 蓝桥云课 (lanqiao.cn)
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000 之间的随机整数(N<100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调
查。请你协助明明完成“去重”与“排序”的工作。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
Set set=new HashSet<>();
for(int i=0;i list=new ArrayList<>(set);
Collections.sort(list,(o1,o2)->o1-o2);
Iterator itr=list.iterator();
while(itr.hasNext()) {
System.out.print(itr.next()+" ");
}
}
}
HashMap类的特点:
1.HashMap 是一个散列表,它存储的内容是键值对(key-value)映射
2.HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
3.HashMap 是无序的,即不会记录插入的顺序。
Map
常用方法:
1.put(K key, V value)将键 (key)/值 (value)映射存放到Map集合中
2.get(Object key)返回指定键所映射的值,没有该key对应的值则返回 nu,即获取key对应的value。
3. size()返回Map集合中数据数量,准确说是返回key-value的组数。
4.entrySet()将Map集合每个key-value转换为一个Entry对象并返回由所有的Entry对象组成的Set集合
5.getOrDefault(K key, 0bject value)方法获取指定 key 对应对 value,如果找不到 key,则返回设置的默认值。
/*
题目大意:输入一个数字n(n<=1e5),然后输入一个长度为n的数组a[n](-1e9<=a[i]<=1e9)
请你输出出现频率最大的数,如果有多个数频率最大,按从小到大依次输出。
示例1:
输入5 1 1 2 2 0
输出1 2
示例2:
输入9 0 0 -1 -1 2 2 5 5 7
输出-1 0 2 5
*/
import java.util.*;
import java.util.Map.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
Map map=new HashMap<>();
for(int i=0;i entry:map.entrySet()) {
max=Math.max(max,entry.getValue());
}
List list=new ArrayList<>();
for(Entry entry:map.entrySet()) {
if(entry.getValue()==max) {
list.add(entry.getKey());
}
}
Collections.sort(list,(o1,o2)->o1-o2);
for(int x:list) {
System.out.print(x+" ");
}
}
}
Stack
1. Object push(Object element) 把对象压入堆栈顶部
2. Object pop()移除堆栈顶部的对象,并作为此函数的值返回该对象
3. Object peek()查看堆栈顶部的对象,但不从堆栈中移除它
4. boolean isEmpty() 测试堆栈是否为空
1.小蓝的括号串1 - 蓝桥云课 (lanqiao.cn)
/*
小蓝有一个长度为 n 的括号串,括号串仅由字符'('和')'构成,请你帮他判断
下该括号串是否合法,合法请输出 Yes ,反之输出 No
合法括号序列:
1.空是合法括号序列
2.若s是合法括号序列,则( s )也是合法括号序列
3.若 s,t 都是合法括号序列,则 st 也是合法括号序列
例如()() ,(()),(())() 均为合法括号序列
*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int d = 0; boolean flag=true;
int n =sc.nextInt();
char[] c = sc.next().toCharArray();
Stack s = new Stack<>();
for(char ch:c){
if(ch=='(') s.push(ch);
else {
if(s.isEmpty()) {
flag=false;
break;
}
else {
s.pop();
}
}
}
if(!s.isEmpty()) flag=false;
if(flag) System.out.println("Yes");
else System.out.println("No");
sc.close();
}
}
Queue
1. Bollean add(Object element) 从队尾压入元素,返回是否压入成功.
2. object poll()删除并返回队头被删除的那个元素。
3. object peek()返回队头元素。但是不删除。
4. boolean isEmpty() 测试队列是否为空