import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) System.out.println(sc.nextInt()); // hasNextInt会引起block
}
}
nextInt默认为整个int范围,传入bound则是[0, bound),意思是 0 <= x < bound
小技巧:整体+1就是[1, bound]( 1 <= x <= bound),或者(0, bound](0 < x <= bound)
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random r = new Random();
int bound = 3;
int res = r.nextInt(bound);
System.out.println(res); // [0, bound)
System.out.println(res + 1); // [1, bound]
}
}
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
int num = list.get(2);
System.out.println(list + " " + num);
}
}
java.util.Scanner:输入
sc.close()
使用
sc.hasNext
:避免java.util.InputMismatchException
注意:一般输入字符串不会mismatch的,会一直next,除非输入EOFCtrl+D
,如果对EOF进行next接受那么会java.util.NoSuchElementException
输入字符串hasNext一直为true,输入EOF那么返回false Scanner的一个小例子:public class Main {
}
java.util.Random:随机数
nextInt默认为整个int范围,传入bound则是
[0, bound)
,意思是 0 <= x < bound 小技巧:整体+1就是[1, bound]
( 1 <= x <= bound),或者(0, bound]
(0 < x <= bound)注意:
while(true)
那么就是死循环)综合应用:猜数字游戏(其实超纲了,主要已经是异常处理了)
参考: ScannerInt循环读取判断整数(用异常) 在同一进程中多次调用scanner出现NoSuchElementException异常解决办法 为什么scanner 抛出异常后就一直在这循环啊 How to avoid Scanner from eof and keep him alive System.in关闭问题 java中的 try、catch、finally及finally执行顺序详解 关闭扫描仪而不关闭System.in
使用
try-with-resources
(>=jdk7)重构猜数字游戏java.util.ArrayList
包装类
)ArrayList包装类示范(除了泛型填包装类,其它都当做基本类型用就得了>=jdk5的
自动装箱
、自动拆箱
>)java.lang.包装类
重点要记的就两个,Integer和Character,其它都是首字母大写
的
自动装箱
、自动拆箱
(>=jdk5)java.lang.String
创建字符串 3+1 种方法
3种构造方法+1种直接创建 注意:双引号括起来的,就是字符串对象(类似于自动装箱但不是),且双引号括起来的字符串(直接创建的字符串)都在字符串常量池中(其他方式生成的字符串不在)
字符串常量池
直接用双引号创建的字符串,是在字符串常量池的,其他形式创建的字符串不在(虽然也是常量) 字符串常量池是堆里面的一块区域(>=jdk7),这块区域专门保存堆中字符串的地址(字节数组) 注意比较运算符
==
对于引用类型:地址值之间(其实很好理解,值就是地址嘛)
注意:可以看出,直接从字符串构造函数里传字符串,会生成一份拷贝,所以地址值就不一样了(因为字符串本身不可变,所以这是没有意义的) 同理,只要是往构造函数传了东西,那么生成的字符串跟传入的内容就不是一个概念了,起码内存地址不一样
字符串常用方法
public boolean equals(Object obj)
可以传任何对象,但是只有是字符串对象且值相同时才返回true 否则返回false注意:推荐
"常量".equals(xxx)
而不是字符串变量.equals(常量)
因为变量可能为null
会报错equalsIgnoreCase
就是equals忽略大小写public int length()
返回字符串的长度public String concat(String)
拼接成新的字符串public char charAt(int index)
返回字符串中指定位置的字符public int codePointAt(int index)
返回只服从中指定位置字符的数值public int indexOf(String | char)
返回字符串中子串或字符第一次出现的位置索引 如果没有则返回-1public String substring(beginIndex[, endIndex])
截取部分为新字符串[beginIndex, endIndex)
public char[] toCharArray()
字符串转为字符数组public byte[] getBytes()
字符串转为字节数组public String replace(old, new)
把字符串中所有的指定字符/字符串替换为新的字符/字符串public String toLowerCase()
转为小写,如果没变化,则返回原来地址(不产生新字符串),否则产生新的字符串public String toUpperCase()
转为大写public String[] split(String)
切割字符串public class Main {
}
java.lang.Math数学工具类
public static double abs(double a)
绝对值public static double ceil(double a)
向上取整public static double floor(double a)
向下取整public static long round(double a)
四舍五入