【Java】机考常用知识
注释
首先要说的就是注释,在机考中一定要写注释,不然会扣分。
CTRL + /:单行注释//...
CTRL + SHIFT + /:多行注释/*...*/
ALT + SHIFT + J:添加Javadoc注释
输入输出
输入
JDK 1.5.0新增的Scanner类为输入提供了良好的基础。
一般用法为:
import java.io.*
import java.util.*
public class Main {
    public static void main(String args[]) {
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
    }
}当然也可以直接:
Scanner cin = new Scanner(System.in); //加 Buffer 速度会快一些- 读一个整数:int n = cin.nextInt();
 相当于scanf("%d", &n);或cin >> n;
- 读一个字符串:String s = cin.next();
 相当于scanf("%s", s);或cin >> s;
- 读一个浮点数:double t = cin.nextDouble();
 相当于scanf("%lf", &t);或cin >> t;
- 读一整行:String s = cin.nextLine();
 相当于gets(s);或cin.getline(...);
- 判断是否有下一个输入:可以用cin.hasNext()或cin.hasNextInt()或cin.hasNextDouble()。
输出
- 一般可以直接用:
- System.out.print():不换行
- System.out.println():换行(line new)
 例如: System.out.println(n); // n 为 int 型
- 同一行输出多个整数可以用: 
 - System.out.println(new Integer(n).toString() + " " + new Integer(m).toString());
- 对于输出浮点数保留几位小数的问题,可以使用 - DecimalFormat类:- import java.text.*;
 // 这里 0 指一位数字,# 指除 0 以外的数字(用来省略末尾的0)
 DecimalFormat f = new DecimalFormat("#.00#");
 DecimalFormat g = new DecimalFormat("0.000");
 double a = 123.45678, b = 0.12;
 System.out.println(f.format(a));
 System.out.println(f.format(b));
 System.out.println(g.format(b));
大数字
BigInteger 和 BigDecimal 是在java.math包中已有的类:
- BigInteger:表示整数
- BigDecimal:表示浮点数(使用前得先设置 DecimalFormat 类,为大数字设置保留几位小数)- 注意:因为大数字不是基本数据类型,所以不能直接用符号运算,如 加(+)、减(-)来运算大数字。需要用方法。 
例如:
(import java.math.*) // 需要引入 java.math 包
BigInteger a = BigInteger.valueOf(100);
BigInteger b = BigInteger.valueOf(50);
BigInteger c = a.add(b) // c = a + b; 主要有以下方法可以使用:
BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other)
int compareTo(BigInteger other)
static BigInteger valueOf(long x)
//输出大数字时直接使用 System.out.println(a) 即可。数组
注意:所有的变量在声明的时候都不会分配内存,赋值和实例化才会分配内存。
声明数组
方法一:
int a[] = null; //声明一维数组
//int[] a = null; 也行,个人习惯
a = new int[10];//分配内存给一维数组方法二:
int[] a = new int[10];  //声明数组的同时分配内存遍历数组
例如:
//一维数组
String[] str = new String[3];
str[0]="张三";
str[1]="李四";
str[2]="王五";for循环
数组元素下标的合法区间:[0, length-1]。
我们可以用for循环通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。
例如:
// for形式遍历数组
for(int i=0;i<str.length;i++) {
    System.out.println("一维数组:for:"+str[i]);
}for-each
增强for循环for-each是JDK1.5新增加的功能,专门用于读取数组或集合中所有的元素,即 对数组进行遍历。
格式:用对象遍历集合数组
for(类 对象: 集合数组) {
    //操作
}例如:
// 增强for-each形式,用变量s遍历所有数组
for(String s:str) {
    System.out.println("一维数组增强:for:"+s);
}注意:foreach不能进行赋值操作,毕竟你赋的值都给了变量s,而不是给了数组。
数组排序
通常情况下我们可以使用Array.sort()来对数组进行排序。
例如,我们要对数组排序:
int[] ints={1,4,7,2,5,8,3,6,9};全体升序
Array.sort(int[] a):直接对数组进行升序排序
例如:
System.out.println("升序排序:");
Arrays.sort(score);
System.out.println(Arrays.toString(score)); //这里我偷了个懒。。把他变成字符串输出了程序运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]部分升序
Array.sort(int[] a , int fromIndex, int toIndex):对数组的从fromIndex到toIndex([from, to))进行升序排序。(前闭后开)
例如:
System.out.println("\n部分升序排序:");
int[] ints2 = {1,4,7,2,5,8,3,6,9};
//对数组的[2,6)位进行排序
Arrays.sort(ints2, 2, 6);
//输出
for (int i=0;i<ints2.length;i++)
{
    System.out.print(ints2[i]+" ");
}程序运行结果:
部分升序排序:
9 8 4 5 6 7 3 2 1 降序
因为sort()方法默认为升序排序,所以要实现降序排序的话,要新建一个比较器Comparator,从而实现自定义比较。
注意:要实现降序排序,得通过包装类型数组,基本类型数组是不行的。
Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法:
int compare(Object o1, Object o2)返回一个基本类型的整型。
- 如果要按照升序排序,则
- o1小于o2,返回-1(负数)
- 相等,返回0
- o1大于o2,返回1(正数)
 
- 如果要按照降序排序,则
- o1小于o2,返回1(正数)
- 相等,返回0
- o1大于o2,返回-1(负数)
 
看到这里,可能有人就懵了,凭什么升序是这样安排的,降序是那样安排的呢??
理解:
其实设计compare()的大佬是按照我们正常思维来设计的,即 两个数相比较,小于取负,等于取0,大于取正;
设计sort()的大佬是按照我们正常思维来设计的,即 升序,
而设计排序的大佬需要用到这个比较的方法,所以sort()的升序与compare()的正常情况就相统一了。
如果我们要实现降序,只需把compare()方法反过来,即 两个数相比较,小于取正,等于取0,大于取负。
例如:
System.out.println("\n降序排序:");
//要实现降序排序,得通过包装类型数组,基本类型数组是不行的
Integer[] integers = {1,4,7,2,5,8,3,6,9};
Arrays.sort(integers, new Comparator<Integer>()
{
    public int compare(Integer o1, Integer o2)
    {
//      if(o1 < o2) {
//          return 1;
//      }else if(o1 > o2) {
//          return -1;
//      }else {
//          return 0;
//      }
        return o2-o1;   //与“小于取正,等于取0,大于取负”相同效果
    }
});
//输出
for (Integer integer:integers)
{
    System.out.print(integer+" ");
}程序运行结果:
降序排序:
9 8 7 6 5 4 3 2 1 字符串
String类用来存储字符串。
例如:
String a = "Hello"; 字符串连接
可以直接用+号,如
String a = "Hello";
String b = "world";
System.out.println(a + ", " + b + "!"); // output "Hello, world!" 字符串查找
String提供了两种查找字符串的方法,即 indexOf() 与 lastIndexOf() 方法。
- indexOf(String s):用于返回参数字符串 s 在指定字符串中首次出现的索引位置
 当调用字符串的indexOf()方法时,会从当前字符串的开始位置搜索 s 的位置。- 如果没有检索到字符串 s,该方法返回-1
 - String str ="We are students";
 int size = str.indexOf("a"); // 变量 size 的值是 3
- lastIndexOf(String str):用于返回字符串最后一次出现的索引位置。
 当调用字符串的- lastIndexOf()方法时,会从当前字符串的开始位置检索参数字符串 str,并将最后一次出现 str 的索引位置返回。- 如果没有检索到字符串 str,该方法返回-1。
- 如果lastIndexOf()方法中的参数是空字符串"",则返回的结果与 length 方法的返回结果相同。
 
获取指定索引位置的字符
使用charAt()方法可将指定索引处的字符返回。
String str = "Hello world";
char mychar = str.charAt(5); // mychar 的结果是 w 获取子字符串
通过String类的substring()方法可对字符串进行截取。
这些方法的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从 0 开始的。在字符串中空格占用一个索引位置。
- substring(int beginIndex):从begin开始,到结尾结束- String str = "Hello world";
 String substr = str.substring(3); //获取字符串,此时 substr 值为 lo world
- substring(int beginIndex, int endIndex):begin和end区间是前闭后开的,[begin, end)- 注意:其实这个区间前闭后开是针对字符来说的,看下面举的例子,0~3截取了Hel这三个字符,即 [0, 3),第0、1、2个字符。 - beginIndex:开始截取子字符串的索引位置
- endIndex:子字符串在整个字符串中的结束位置
 - 理解:但是,我们可以从存储机制去理解它。 
 Hello World 在系统里是这样存储的:
  
 我们截取了地址0~3,所以截取了Hel这三个字符。- String str = "Hello world";
 String substr = str.substring(0,3); //substr 的值为 Hel
去除空格
trim()方法返回字符串的副本,清除了左右两端的空格。
String str = "        hello           ";
System.out.println(str.trim());
//程序运行结果:hello字符串替换
replace(String oldChar,String newChar)方法可实现将指定的字符或字符串替换成新的字符或字符串。
- oldChar:要替换的字符或字符串
- newChar:用于替换原来字符串的内容
注意:如果要替换的字符 oldChar 在字符串中重复出现多次,replace()方法会将所有 oldChar 全部替换成 newChar。需要注意的是,要替换的字符 oldChar 的大小写要与原字符串中字符的大小写保持一致。
String str= "address";
String newstr = str.replace("a", "A");// newstr 的值为 Address判断字符串是否相等(切不可使用==)
- equals(String otherstr):
 如果两个字符串具有相同的字符和长度,则使用- equals()方法比较时,返回 true。- 注意:equals()方法比较时,区分大小写。 
- equalsIgnoreCase(String otherstr):- 注意: - equalsIgnoreCase()方法与- equals()类似,不过在比较时忽略了大小写。
equals()与==的区别:
- ==:
- 如果作用于基本数据类型的变量(如 byte,short,char,int,long,float,double,boolean),则直接比较其存储的“值”是否相等;
- 如果作用于引用类型的变量(如 String类),则比较的是所指向的对象的地址(即 是否指向同一个对象)。
 
- equals()方法:是基类Object中的方法,因此对于所有的继承于Object的类都会有该方法。在Object类中,equals()方法是用来比较两个对象的引用是否相等,即 是否指向同一个对象。
是不是感觉equals()在Object类中跟==好像是一样的描述啊??没错,就是一样的,不是我写错了!
Java中Object类是所有类的父类,它里面定义了equals()方法:
public boolean equals(Object obj) {
    return (this == obj);
}若object1.equals(object2)为true,则表示equals1和equals2实际上是引用同一个对象。
注意:对于equals()方法,equals()方法不能作用于基本数据类型的变量。
- 如果没有对equals()方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
- 而String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串内容是否相等。
其他的一些自带的引用数据类型,如 Double,Date,Integer等,都对equals()方法进行了重写,用来比较指向的对象所存储的内容是否相等。
按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的 Unicode 值,按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。
- 如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数;
- 如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数;
- 如果这两个字符串相等,则结果为0.
字母大小写转换
- 字符串的toLowerCase()方法可将字符串中的所有字符从大写字母改写为小写字母,
- 而toLowerCaseUpperCase()方法可将字符串中的小写字母改写为大写字母。
str.toLowerCase();
str.toUpperCase();字符串分割
使用split()方法可以使字符串按指定的分隔字符或字符串对内容进行分割,并将分割后的结果作为字符串数组返回。
str.split(String regex);:regex为分割字符串的分割符,也可以使用正则表达式。
注意:没有统一的对字符串进行分割的符号,如果想定义多个分割符,可使用符号“|”。(这个是正则表达式的“或”概念)
例如,“,|=”表示分割符分别为“,”和“=”。
String str = "hello world";
String[] s = str.split(" ");
for(int i=0; i<s.length; i++) {
    System.out.println(s[i]);
}程序运行结果:
hello
world字符串变数字
用对应类的parse方法即可,如
String t = "123";
Integer.parseInt(t);switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
当我们遇到多个if语句的时候,可以尝试用switch来简化整个代码。
语法格式:
switch(expression){
    case value:
       // 语句
       break; // 可选
    case value:
       // 语句
       break; // 可选
    case value:
    case value:
        // 语句(前两个判断的公共语句)
        break;
    //你可以有任意数量的case语句
    default: // 默认(可选)
       // 语句
}语句规则:
- switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了。 
 同时 case 标签必须为常量 或 字面常量。
- switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。 
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。 
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。 
- 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。 
 如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。 
- switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。 
实例:
public class Test {
   public static void main(String args[]){
      //char grade = args[0].charAt(0);
      char grade = 'C';
      switch(grade)
      {
         case 'A':
            System.out.println("优秀");
            break;
         case 'B':  // 如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
         case 'C':
            System.out.println("良好");
            break;
         case 'D':
            System.out.println("及格");
            break;
         case 'F':
            System.out.println("你需要再努力努力");
            break;
         default:
            System.out.println("未知等级");
      }
      System.out.println("你的等级是 " + grade);
   }
}程序运行结果:
良好
你的等级是 C调用递归(或其他动态方法)
在主类中 main 方法必须是 public static void 的,在 main 中调用非 static 类时会有警告信息,可以先建立对象,然后通过对象调用方法。
其他注意的事项
- Java 是面向对象的语言,思考方法需要变换一下,里面的函数统称为方法,不要搞错。
- Java 里的数组有些变动,多维数组的内部其实都是指针,所以 Java 不支持 fill 多维数组。 - 注意:数组定义后必须初始化,如 int[] a = new int[100]; 
- 布尔类型为 boolean,只有 true 和 false 二值,在 if (...) / while (...) 等语句的条件中必须为 boolean 类型。 - 注意:在 C/C++中的 if (n % 2) 在 Java 中无法编译通过。 
- 下面在 java.util 包里 Arrays类的几个方法可替代 C/C++里的 memset、qsort/sort - int[] a = {9,8,7,6,5,4,3,2,1};
 Arrays.sort(a) //java 自带的优化后的快速排序
 Arrays.fill(a, 3); //用3填充数组,结果为3,3,3,3,3,3,3,3,3- 注意:是Arrays类,不是Array类。 
 数组类Array:Java中最基本的一个存储结构。
 Array代表的是一个数组类型
 静态类Arrays:专门用来操作array,提供搜索、排序、复制等静态方法。
 Arrays代表的是能操作数组们(所有数组)
【Java】机考常用知识的更多相关文章
- JAVA EE 项目常用知识 之AJAX技术实现select下拉列表联动的两种用法(让你真正理解ajax)
		ajax 下拉列表联动的用法. ajax的定义: AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的 ... 
- 基于java平台的常用资源整理
		这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ... 
- 这里整理了基于java平台的常用资源
		这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ... 
- JAVA项目中常用的异常处理情况总结
		JAVA项目中常用的异常知识点总结 1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用 ... 
- Java快速入门-03-小知识汇总篇(全)
		Java快速入门-03-小知识汇总篇(全) 前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下 快键键 常用快捷键(熟记) 快捷键 快捷键作用 ... 
- Java常考面试题
		Java常考面试题 1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行 ... 
- JAVA项目中常用的异常知识点总结
		JAVA项目中常用的异常知识点总结 1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用 ... 
- Java并发编程核心知识体系精讲
		第1章 开宗明义[不看错过一个亿]本章一连串设问:为什么学并发编程?学并发编程痛点?谁适合学习本课?本课程包含内容和亮点?首先4大个理由告诉你为什么要学,其实源于JD岗位要求就不得不服了.其次5个痛点 ... 
- [转帖]java必备的开发知识和技能
		java必备的开发知识和技能 https://blog.csdn.net/qq_34405062/article/details/89389646 学习一下java 其实上学那会儿学的 早就过时加落伍 ... 
随机推荐
- GSON转换成Long型变为科学计数法及时间格式转换异常的解决方案
			直接上工具类了,简单实用 public class GsonUtils { private static Gson gson = null; static { if (gson == null) { ... 
- q检验|新复极差法|LSD|二因素方差分析
			生物统计与实验设计 放大程度q检验:精度较高>新复极差法:各种错误比较平均>LSD 其中,LSD不随M的变化而变化,但是SSR和q-test会随M变化而变化. 第一步代表了方差分析的核心思 ... 
- 《运筹学基础及应用》习题1.1(b),1.1(c),1.2(a)
			用图解法求解下列线性规划问题,并指出问题具有惟一最优解,无穷多最优解,无界解还是无可行解. 习题1.1(b):$\max z=3x_1+2x_2$$$s.t\begin{cases} 2x_1+x_ ... 
- mysql在当前服务器复制数据库
			mysqldump newwq -u root -proot --add-drop-table | mysql jxg -u root -proot 
- swift中的category,扩展
			1.创建选择 :swift file 2.名称:UIBarButtonItem-Extension 3.category,便利构造函数 extension UIColor { /* 1.extensi ... 
- Introduction to Computer Science and Programming in Python--MIT
			学习总结--(Introduction to Computer Science and Programming in Python--MIT) 导论 主题 重新利用数据结构来表达知识 理解算法的复杂性 ... 
- 读写分离(AMOEBA)
			博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 1. 环境准备: 1.1新增一台虚拟机 amoeba:192.168.247.80 架构(使用图片源自其它博文): 1. ... 
- python语法基础-基础-运算符
			############################################ Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员 ... 
- Jump Game (Medium)
			主要有两种思路: 一. 本题只需要判断能否到达最后一个数,那么可以采用贪心策略,到达某个位置i后,在直接在这个位置的基础上走nums[i]步,主要保证能一直前进,就能达到终点: 那么,什么时候才不能一 ... 
- 阿里云系统安装部署Freeswitch
			1.安装vim apt-get install vim 2.修改镜像源 将/etc/apt/source.list的原有源注释掉,添加下面的源: deb http://mirrors.163.com/ ... 
