来自算法很美-蓝桥学院
一、任意范围内随机整数
- 任意范围随机数 Math.random() 随机返回[0,1)之间的一个double浮点数
- Math在lang包下 , 因此不必显示import
- 公式为a + Math.random() * b
- Math.random是[0,1) , 乘b-a就是[0,b-a), 再加上a就是[a,b),如果要取等, 就加1
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
while(true){
//a加上Math.random()*(b-a)
System.out.println(1 + (int) (Math.random() * (9)));
}
}
}
二、Java中字符运算
- java中字符运算, char型数据可以转换成任意一种数值类型, 将整数转换成char类型时, 只用该数据的低16位, 其余部分被忽略
- 要一个浮点值转换成char型时,首先将浮点值转换成int型, 然后将这个整数值转换为char型
- 还可以自加,自减进行输出
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
char a = 'a';
System.out.println((char)0X0041);
System.out.println((char)0XAB0041);
System.out.println(++a);
}
}
运行结果如下:
A
A
b
- 当一个char型数据转换成数值型时, 这个字符的Unicode码就被转换成某个特定的数值
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
System.out.println((int)'A');
}
}
- 0~FFFF的任何一个十六进制正整数都可以隐式转换成字符型, 而不再次范围内的任何其他数值都必须显示转换
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
char ch = '\u0041'; //也可以这样
char ch1 = 65;
char ch2 = 0X0041;
System.out.println((int)ch);
System.out.println((int)ch2);
}
}
如果与数值类型数据进行运算,就会先转换成数数值类型进行计算,如果和字符串进行计算,会被转换成字符串
三、猜生日
这个是运用了二进制的技巧,因为生日只有0-31天,那么可以进行五次询问(具体看下面代码),将五个二进制位置的0或1全部列举清楚,然后等知道了这五个位置是0/1后,就知道了响应的数字
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
//猜生日
Scanner sc = new Scanner(System.in);
String s1 =
"1 3 5 7\n" +
"9 11 13 15\n" +
"17 19 21 23\n" +
"25 27 29 31\n";
String s2 =
"2 3 6 7\n" +
"10 11 14 15\n" +
"18 19 22 23\n" +
"26 27 30 31\n";
String s3 =
"4 5 6 7\n" +
"12 13 14 15\n" +
"20 21 22 23\n" +
"28 29 30 31\n";
String s4 =
"8 9 10 11\n" +
"12 13 14 15\n" +
"24 25 26 27\n" +
"28 29 30 31\n";
String s5 =
"16 17 18 19\n" +
"20 21 22 23\n" +
"24 25 26 27\n" +
"28 29 30 31\n";
int a, a1, a2, a3, a4, a5;
System.out.println("你的生日在这些数字里面吗?是输入1,否则输入0\n"+s1);
a1 = sc.nextInt();
System.out.println("你的生日在这些数字里面吗?是输入1,否则输入0\n"+s2);
a2 = sc.nextInt();
System.out.println("你的生日在这些数字里面吗?是输入1,否则输入0\n"+s3);
a3 = sc.nextInt();
System.out.println("你的生日在这些数字里面吗?是输入1,否则输入0\n"+s4);
a4 = sc.nextInt();
System.out.println("你的生日在这些数字里面吗?是输入1,否则输入0\n"+s5);
a5 = sc.nextInt();
int b = 2*2*2*2*a5 + 2*2*2*a4 + 2*2*a3 + 2*a4 + a5;
System.out.println("你的生日是:"+b);
}
}