自增自减
- ++a:先取值,再自增,后赋值
- a++:先取值,再赋值,后自增;
进制
- 二进制
最高位为0:正数
最高位为1:负数
(1)正数 原码=补码
10: 00001010
(2)负数 按位取反再+1
-10: 11110110
由10的二进制求-10的二进制
原码10001010
反码11110101(符号位不参与计算)
补码11110110
byte(1):-128~127 - 十进制
10101010( 求十进制):
法1:
00101010 (换符号)
01010101(取反)
01010110(+1进位)
结果:-86
法2:
记录符号位:-
按位取反+1: 01010110
结果:86,结合符号位:-86 - 八进制
0~7表示
0开头 - 十六进制:
09和af(A~F)表示
0x(0X)开头
位运算
/2^n: >>1xn
*2^n: <<1xn
(right+left)/2可转换为((right-left)>>1)+left
循环
1.for循环:
for(初始化部分;表达式;更新部分){语句}
eg: int a=0;a+=1;
for(int a=0;a<=10;++a){
a+=1;
}
eg1:猜数字游戏
import java.util.Random;
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args){
Scanner n = new Scanner(System.in);
for(int m=0;m<3;m++){
Random random = new Random();
int a = random.nextInt(2000) + 1;
System.out.println("请输入你猜想的数字:");
Scanner scanner = new Scanner(System.in);
int b = scanner.nextInt();
if (b == a) {
System.out.println("猜对");
} else if (b > a) {
System.out.println("猜大");
} else {
System.out.println("猜大");
}
System.out.println("随机生成的数为:" + a);
}
}
}
eg2:打印2~100内所有质数,每行显示8个
public static void PrintPrime(){
int count = 0;
for(int i = 2;i<100;i++){//被判断的数
int j = 2;//该数对从2开始到它本身的每一个数取余判断是否为质数
while (j < i){
if(i%j == 0){//若能被任何一个数整除,则不是素数
break;
}
j++;
}
if(j == i){// j和 i相等表示该数只能被 1和它自身整除
count++;//记录输出数字的个数
System.out.print(i+" ");
if(count == 8 || count % 8 == 0){//8个一行
System.out.println("");
}
}
}
}
打印结果:
2.while循环:
初始化部分
while(表达式){语句 更新部分;
}
eg:
int a;
while(a<=10){
a+=1;
a++;
}
3.do-while循环:
do{语句}while(表达式);
Java栈:函数调用
主要代码模块:
public static 返回值 (参数列表){//形式参数
功能实现语句
}
public static 返回值 main(String[] args){//测试函数
函数名();//函数调用,实际参数
//形式参数对实际参数进行值拷贝
}
eg:
- 两数之和
public class TestDemo{
public static int getSum(int num1,int num2){
return num1+num2;
}
public static void main(String[] args) {
int result = getSum(1,2);
System.out.println("两数之和为:"+result);
}
}
- (1)从键盘输入一个整型,求这个数字是几位数并输出位数
(2)逆序输出该数
public class Demo{
public static int getBit(int num){
int count = 0;
while(num!=0){
num/=10;
count++;
}
return count;
}
public static int reverse(int num){
int bit = getBit(num);
int temp,result=0;
while(num!=0){
temp = num%10;
result = (int)(result+temp*Math.pow(10,--bit));
num/=10;
}
return result;
}
public static void main(String[] args) {
int num = 12345;
int result1 = getBit(num);
int result = reverse(num);
System.out.println("这是一个"+result1+"位数");
System.out.println("逆序输出为:"+result);
}
}
- 素数的判断
public class Test {
public static boolean isPrimer(int num) {
int i=2;
boolean flag = false;
for(;i<num;++i){
if(num%i==0){
break;//跳出当前循环
}
}
if(i==num){
flag = true;
}
return flag;
}
public static void main(String[] args) {
int n = 2;
boolean result = isPrimer(n);
if (result){//若result为真
System.out.println("该数是素数");
}
else{
System.out.println("该数不是素数");
}
}
}
- 判断100~999哪些数是水仙花数
public class Demo{
public static boolean flower(int num){
int result = 0;
int src = num;//记录最初的num值
while(num!=0){
result = (int)(result+Math.pow(num%10,3));//计算num各位上数字立方的和
num/=10;
}
return src == result;
}
public static void main(String[] args) {
for(int i=100;i<999;i++){//100~999哪些是水仙花数
if(flower(i)){
System.out.println(i+"是水仙花数");
}
}
}
}