取出来直接判断
while ('\n' != (c = (char)inputStream.read())){
}
用下标存储不重复的数
有局限:
1、输入的数作为下标、存储的数不能太大不然浪费空间
2、如果数值范围1-1000、因为下标存值所以要多一位
3、boolean[] stu = new boolean[1001]; 默认值为FALSE、存储哪个数数则把对应下标的内容FALSE->TRUE
int totalTime = Integer.parseInt(str);
boolean[] stu = new boolean[1001];
for (int i = 0; i < totalTime; i++) {
stu[Integer.parseInt(bf.readLine())] = true;
}
StringBuilder去除多余的那个连接符
StringBuilder sb = new StringBuilder();
for (int i = arr.length - 1; i >= 0; i--) {
sb.append(arr[i]).append(" ");
}
System.out.println(sb.substring(0, sb.length() - 1));
StringBuilder sb = new StringBuilder();
for (int i = arr.length - 1; i >= 0; i--) {
sb.append(" ").append(arr[i]);
}
sb.deleteCharAt(0);
System.out.println(sb.toString());
StringBuilder sb = new StringBuilder();
for (int i = arr.length - 1; i >= 0; i--) {
sb.append(arr[i]).append(" ");
}
sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < orderTotal; i++) {
sb.append(intArr[i]).append(" ");
}
System.out.println(sb.toString().trim());
不满8位补0
最后长度不够8的补0可以用如下两种方式
1、先用0占位、然后用存在的数据把0替换掉、
int len = str.length();
int start = 0;
while (len >= 8) {
System.out.println(str.substring(start, start + 8));
start += 8;
len -= 8;
}
if (len > 0) {
char[] tmp = new char[8];
for (int i = 0; i < 8; i++) {
tmp[i] = '0';
}
for (int i = 0; start < str.length(); i++) {
tmp[i] = str.charAt(start++);
}
System.out.println(String.valueOf(tmp));
}
2、在存在的数据后面直接补0
int len = str.length();
int start = 0;
while (len >= 8) {
System.out.println(str.substring(start, start + 8));
start += 8;
len -= 8;
}
if (len > 0) {
StringBuilder sb = new StringBuilder(str.substring(str.length() - len));
for (int i = len; i < 8; i++) {
sb.append(0);
}
System.out.println(sb);
}
进制转10进制
private static Map<Character, Integer> map = new HashMap<Character, Integer>() {
{
put('0', 0);
put('1', 1);
put('2', 2);
put('3', 3);
put('4', 4);
put('5', 5);
put('6', 6);
put('7', 7);
put('8', 8);
put('9', 9);
put('A', 10);
put('B', 11);
put('C', 12);
put('D', 13);
put('E', 14);
put('F', 15);
put('a', 10);
put('b', 11);
put('c', 12);
put('d', 13);
put('e', 14);
put('f', 15);
}
};
int res = 0;
for (char ch : "0xAA".substring(2).toCharArray()) {
res = res * 16 + map.get(ch);
}
System.out.println(res);
int sum = 0;
for (int i = "AA".length() - 1; i >= 0; i--) {
char c = "AA".charAt(i);
sum = sum + map.get(c) * (int)Math.pow(16, length - 1 - i);
}
System.out.println(sum);
length - i - 1 这个指针的用法要熟悉、而且脑子里要想象的出来
求质数因子
long k = (long) Math.sqrt(num);
for (long i = 2; i <= k; ++i) {
while (num % i == 0) {
System.out.print(i + " ");
num /= i;
}
}
System.out.println(num == 1 ? "" : num);
1、num % i == 0 表示 num可以整除i
2、System.out.println(num == 1 ? "" : num); 输入1没有质数整除就返回本身、过了num平方根以后还没有质数整除、那就返回它本身
3、时间复杂度logN的场景
浮点型数据、小数点后一位来决定四舍五入
double number = Double.parseDouble(str);
System.out.println((int)(number + 0.5));
float number = Float.parseFloat(str);
System.out.println((int)(number + 0.5));
1、类型转换就是向下取整、很巧妙的利用这种方式