目录
一. 顺序结构
System . out . println ( "aaa" );System . out . println ( "bbb" );System . out . println ( "ccc" );// 运行结果aaabbbccc
如果调整代码的书写顺序, 则执行顺序也发生变化
System . out . println ( "aaa" );System . out . println ( "ccc" );System . out . println ( "bbb" );// 运行结果aaacccbbb
二. 分支结构
2.1 if语句
if ( 布尔表达式 ){// 语句}
如果布尔表达式结果为true,执行if中的语句,否则不执行。
2. 语法格式2
if ( 布尔表达式 ){// 语句 1} else {// 语句 2}
如果布尔表达式结果为true,则执行if中语句,否则执行else中语句。
3. 语法格式3
if ( 布尔表达式 1 ){// 语句 1} else if ( 布尔表达式 2 ){// 语句 2} else {// 语句 3}
例:判断一个年份是否为闰年
int i=2000;
if(i%100==0&&i%400==0||i%4==0){
System.out.println(i+"是闰年");
}else{
System.out.println(i+"不是闰年");
}
【注意事项】
1、代码风格
// 风格 1-----> 推荐int x = 10 ;if ( x == 10 ) {// 语句 1} else {// 语句 2}// 风格 2int x = 10 ;if ( x == 10 ){// 语句 1}else{// 语句 2}
int x = 20 ;if ( x == 10 ); //此处多写了一个 分号, 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块.{System . out . println ( "hehe" );}// 运行结果hehe
int x = 10 ;int y = 10 ;if ( x == 10 )if ( y == 10 )System . out . println ( "aaa" );elseSystem . out . println ( "bbb" );
2.2switch 语句
基本语法
switch ( 表达式 ){case 常量值 1 :{语句 1 ;[ break ;]}case 常量值 2 :{语句 2 ;[ break ;]}...default :{内容都不满足时执行语句 ;[ break ;]}}
int day = 1 ;switch ( day ) {case 1 :System . out . println ( " 星期一 " );case 2 :System . out . println ( " 星期二 " );break ;}// 运行结果星期一星期二
三. 循环结构
3.1 while 循环
while ( 循环条件/布尔表达式 ){循环语句 ;}
循环条件为 true, 则执行循环语句; 否则结束循环.
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(num);
// 执行结果
120
int num = 1;
int sum = 0;
// 外层循环负责求阶乘的和
while (num <= 5) {
int factorResult = 1;
int tmp = 1;
// 里层循环负责完成求阶乘的细节.
while (tmp <= num) {
factorResult *= tmp;
tmp++;
}
sum += factorResult;
num++;
}
System.out.println("sum = " + sum);
3.1.1 break
break 的功能是让循环提前结束.
int num = 100 ;while ( num <= 200 ) {if ( num % 3 == 0 ) {System . out . println ( " 找到了 3 的倍数 , 为 :" + num );break ;}num ++ ;}// 执行结果找到了 3 的倍数 , 为 : 102
执行到 break 就会让循环结束.
3.1.2 continue
int num = 100 ;while ( num <= 200 ) {if ( num % 3 == 0 ) {System . out . println ( " 找到了 3 的倍数 , 为 :" + num );break ;}num ++ ;}// 执行结果找到了 3 的倍数 , 为 : 102
执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句.
3.2 for 循环
for ( 表达式① ; 布尔表达式② ; 表达式③ ){表达式④ ;}
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
int sum = 0;
for (int i = 1; i <= 5; i++) {
int tmp = 1;
for (int j = 1; j <= i; j++) {
tmp *= j;
}
sum += tmp;
}
System.out.println("sum = " + sum);
3.3 do while 循环
do {循环语句 ;} while ( 循环条件 );
int num = 1 ;do {System . out . println ( num );num ++ ;} while ( num <= 10 );
四. 输入输出
4.1 输出到控制台
System . out . println ( msg ); // 输出一个字符串 , 带换行System . out . print ( msg ); // 输出一个字符串 , 不带换行System . out . printf ( format , msg ); // 格式化输出
System . out . println ( "hello world" );int x = 10 ;System . out . printf ( "x = %d\n" , x )
4.2 从键盘输入
import java . util . Scanner ;//放在第一行,类似头文件Scanner sc = new Scanner ( System . in );//固定写法String name = sc.nextLine();//读取一行字符String name = sc.next();//遇到空格会结束读取int age = sc.nextInt() ;//读取整型float salary = sc.nextFloat() ; //读取浮点型......
例:
import java . util . Scanner ; // 需要导入 util 包Scanner sc = new Scanner ( System . in );System . out . println ( " 请输入你的姓名: " );String name = sc . nextLine ();System . out . println ( " 请输入你的年龄: " );int age = sc . nextInt ();System . out . println ( " 请输入你的工资: " );float salary = sc . nextFloat ();System . out . println ( " 你的信息如下: " );System . out . println ( " 姓名 : " + name + "\n" + " 年龄: " + age + "\n" + " 工资: " + salary );sc . close (); // 注意 , 要记得调用关闭方法// 执行结果请输入你的姓名:张三请输入你的年龄:18请输入你的工资:1000你的信息如下:姓名 : 张三年龄: 18工资: 1000 . 0
多组输入
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()){
int a = scanner.nextInt();
.....
}
例:使用 Scanner 循环读取 N 个数字,并求取其平均值
Scanner sc = new Scanner(System.in);
int sum = 0;
int num = 0;
while (sc.hasNextInt()) {
int tmp = sc.nextInt();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
// 执行结果
10
40.0
50.5
^D
sum = 150.5
avg = 30.1
五. 猜数字游戏
系统自动生成一个随机整数 (1-100), 然后由用户输入一个猜测的数字 . 如果输入的数字比该随机数小 , 提示 " 低了", 如果输入的数字比该随机数大 , 提示 " 高了 " , 如果输入的数字和随机数相等 , 则提示 " 猜对了 " .
产生随机数的方法:import java . util . Random ; //放在第一行,类似C语言中的头文件Random random = new Random (); //默认随机种子是系统时间int toGuess = random . nextInt ( 100 ); //产生[0,100)的数字
参考代码
import java.util.Random;
import java.util.Scanner;;
class Test {
public static void main(String[] args) {
Random random = new Random(); // 默认随机种子是系统时间
Scanner sc = new Scanner(System.in);
int toGuess = random.nextInt(100);
// System.out.println("toGuess: " + toGuess);
while (true) {
System.out.println("请输入要输入的数字: (1-100)");
int num = sc.nextInt();
if (num < toGuess) {
System.out.println("低了");
} else if (num > toGuess) {
System.out.println("高了");
} else {
System.out.println("猜对了");
break;
}
}
sc.close();
}
}
六. 练习
1. 判定一个数字是否是素数
- 第1种方法,如果一个数字是素数,那么就只能整除1和自己本身。
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int i; for (i = 2;i < n;i++) { if(n%i == 0) { System.out.println("n不是素数:"+n); break; } } if(i >= n) { System.out.println(n + "是素数"); } }
- 第2种方式:任何一个数字n,都可以写成 n = a*b的形式。那么必然会有一个数字是小于等于根号n的。
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int i; for (i = 2;i <= Math.sqrt(n);i++) { if(n%i == 0) { //System.out.println("n不是素数:"+n); break; } } if(i > Math.sqrt(n)) { System.out.println(n + "是素数"); } }
2. 打印 100 - 200 之间所有的素数
public static void main(String[] args) { for (int j = 100; j<=200 ;j++) { int i; for (i = 2;i <= Math.sqrt(n);i++) { if(n%i == 0) { break; } } if(i > Math.sqrt(n)) { System.out.println(n + "是素数"); } } }
3. 求两个正整数的最大公约数
辗转相除法:两个数字做除法,若余数不为零,则除数作为被除数,余数作为除数,得余数,若余数不为零,则重复上述步骤,直到余数为零,此时的除数为两个数的最大公约数.
public static void main14(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = a % b;
while (c != 0) {
a = b;
b = c;
c = a % b;
}
System.out.println(b);
}
4. 求出0~999999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如: 153=1^3+5^3+3^3 ,则153是一个“水仙花数”。)
点播: tmp/10 表示舍弃个位数; tmp%10 表示拿到个位数
public static void main15(String[] args) {
for (int i = 1; i < 999999; i++) {
int count = 0;
int tmp = i;
//求出i为几位数,赋给count
while (tmp != 0) {
count++;
tmp /= 10;
}
//此时tmp为0,将i重新赋给tmp
tmp = i;
int sum = 0;
//求每一位数的count次方和
while (tmp != 0) {
sum += Math.pow(tmp % 10,count);//拿到个位数做次方运算
tmp /= 10;//舍弃个位数
}
//若相等,则为水仙花数
if(i == sum) {
System.out.println(i);
}
}
}
5. 写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1
方法:用这个数字n按位与上n-1,结果不为0,则继续计算,直到结果为0,求出共计算了几次,则n二进制中有几个1.
public static void main(String[] args) {
int n = 7;
int count = 0;//用count标记共计算了几次
while (n != 0) {
count++;
n = n & (n-1);
}
System.out.println(count);//几次即二进制有几个1
今天的分享就到这里,谢谢大家的点赞支持!!!!!