目录
7.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
一.顺序结构
用法展示
public class Test {
public static void main(String[] args) {
System.out.println("hello");
System.out.println("world");
}
}
用法很简单,需要注意的是如果调整代码的书写顺序, 则执行顺序也发生变化
二.分支结构
1.if语句
用法展示1-基本用法
public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 10;
if(a==b){//括号里面的是一个布尔表达式,当表达式为真时执行if中的语句
System.out.println("相等");
}else{//表达式为假时执行else里的语句
System.out.println("不相等");
}
}
}
用法展示2-多分支情况
public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 10;
if(a>b){//条件时执行的代码
System.out.println("a大于b");
}else if(a<b){//条件满足时执行的代码
System.out.println("a小于b");
}else{//条件都不满足时执行的代码
System.out.println("a与b相等");
}
}
}
注意事项
1.else匹配时,跟最近的if语句匹配。if else语句可以不加大括号,但是这种情况只能写一行代码,建议都加上大括号,可阅读性和效率高是检验代码好不好的重要标准。
public class TestDemo {
public static void main(String[] args) {
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("hello");
else
System.out.println("hi");
}
}
2.还需要注意的是,if()后面不能加分号,加分号会导致分号成为if语句中执行的代码
2.switch语句
用法展示
public class TestDemo {
public static void main(String[] args) {
int day = 1;
switch (day) {//switch里的内容可以有:整数、枚举、字符、字符串
case 1://根据 switch 中值的不同,会执行对应的 case 语句。遇到 break 就会结束该 case 语句
System.out.println("星期一");
break;//执行代码后跳出程序,防止继续运行下去
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default://如果 switch 中的值没有匹配的 case,就会执行 default 中的语句,建议switch语句都加上default
System.out.println("请输入1-7有效数字!");
break;
}
}
}
注意事项
1.不要忘记break!!!如果不写break,程序会一直运行下去,从而失去了多分支选择的效果
public class TestDemo {
public static void main(String[] args) {
int day = 1;
switch (day) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
default:
System.out.println("请输入1-7有效数字!");
}
}
}
2.注意switch语句里面的类型:整数、枚举、字符、字符串,类型不对程序将无法运行
3.switch不能表达复杂的条件,这是它的一个局限性,例如num > 10 && num < 20
4.switch语句虽然支持嵌套,但是嵌套起来代码并不易读,所以建议不要使用
三.循环结构
1.while循环
用法展示
public class TestDemo {//以1-10的和为例
public static void main(String[] args) {
int n = 0;
int sum = 0;
while(n<10){//当n<10时执行下面的代码
n += 1;
sum += n;
}
System.out.println(sum);
}
}
注意事项
1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句。建议还是加上 { }
2. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行
3.一定要注意代码的终止条件!如果没有终止条件,代码会陷入死循环
break和continue的用法
1.break:让循环提前结束,需要注意的是,break只能结束离它最近的循环,无法结束所有循环
2.continue:跳过这次循环, 立即进入下次循环
2.for循环
用法展示
public class TestDemo {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
}
}
注意事项(与while循环相似)
1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句。建议还是加上 { }
2. 和 if 类似, for后面不要多写 分号, 否则可能导致循环不能正确执行
3.do while循环
用法展示
public class TestDemo {
public static void main(String[] args) {
int n =0;
int sum = 0;
do {
n++;
sum += n;
}while(n!=10);//先循环一次再判断条件
System.out.println(sum);
}
}
注意事项
1.do while循环一般不常用,建议使用while循环或者for循环
2.while后面有个分号千万别忘了!!
四.输入和输出
1.输出到控制台
public class TestDemo {
public static void main(String[] args) {
System.out.println("hello"); // 输出一个字符串, 带换行
System.out.print("hello"); // 输出一个字符串, 不带换行
System.out.printf("%d", 1123); // 类似c语言中的printf
}
}
2.从键盘输出
用法展示1
用 Scanner 读取字符串/整数/浮点数
import java.util.Scanner; // 需要导入 util 包
public class TestDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = scanner.nextLine();
System.out.println("请输入你的年龄:");
int age = scanner.nextInt();
System.out.println("请输入你的工资:");
float salary = scanner.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
scanner.close(); // 注意, 要记得调用关闭方法
}
}
用法展示2
使用 Scanner 循环读取 N 个数字
import java.util.Scanner; // 需要导入 util 包
public class TestDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double sum = 0.0;
int num = 0;
while (scanner.hasNextDouble()) {//连续读取多个数字
double tmp = scanner.nextDouble();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
scanner.close();
//当输入多个对象时,使用ctrl+d/z停止输入数据
}
}
注意事项
直接使用 System.in.read 可以读入一个字符。 但是需要搭配异常处理,用法比较麻烦,这里不作说明。
五.练习
学习完的朋友可以适当练习增加熟练度,以下是笔者的解法,如有更好的解法欢迎交流。如有错误请斧正,谢谢大家
1.打印年龄
//1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if(0<=age && age<=18){
System.out.println("少年");
}else if(18<age && age<=28){
System.out.println("青年");
}else if(28<age && age<=55){
System.out.println("中年");
}else if(age>55){
System.out.println("老年");
}else{
System.out.println("请重新输入");//当输入数据错误时
}
scanner.close();
}
}
2.判断素数
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
System.out.println("请输入一个数:");
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
for (int i = 2; i <x ; i++) {
if(x%i==0){
System.out.println(x+"不是素数");
break;//已经确定不是素数,不用继续计算
}else{
System.out.println(x + "是素数");
break;
}
}
scanner.close();
}
}
3.打印素数
//3. 打印 1 - 100 之间所有的素数
//ps:打印素数!不是打印非素数
public class Test3 {
public static void main (String []args){
int i=0;
int j=0;
for (i=1;i<=100;i++){//里面不能写int i,因为已经定义过i了
for(j=2;j<i;j++){
if(i%j==0){
break;
}
}
if(j==i){
System.out.println(i + " ");
}
}
}
}
4.输出闰年
public class Test4 {
public static void main(String[] args) {
for (int year = 1000; year <=2000 ; year++) {
if(year%100!=0){
if(year%4==0){
System.out.println(year+"是闰年!");
}
}else if(year%400==0){
System.out.println(year+"是闰年!");
}
}
}
}
5.打印乘法口诀表
public class Test5 {
public static void main(String[] args) {
int x = 0;//定义乘积
for (int i = 1; i <=9; i++) {
for (int j = 1; j <=i ; j++) {
x=i*j;
System.out.print(j+"*"+i+"="+x+"\t");//使用水平制表符对齐操作
if(j==i){//当i=j时,进行换行操作
System.out.println();
}
}
}
}
}
6.找出最大公约数
//6. 求两个正整数的最大公约数
//Q: 怎么只打印最大的公约数——使用辗转相除法
import java.util.Scanner;
public class Test6 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入两个正整数:");
int x = scanner.nextInt();
int y = scanner.nextInt();
//除了用do while循环 也能用while循环
do{
int i=x%y;
x = y;//除数赋值为被除数
y = i;//余数赋值给除数,直到余数为0
}while(y!=0);//直到y=0时停止运行
System.out.println(x);
scanner.close();
}
}
7.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
public class Test7 {
public static void main(String[] args) {
double sum = 0.0;
int flg=1;
for (int i = 1; i <=100; i++) {
sum = sum+ flg*1.0/i ;
flg=-flg;
}
System.out.println(sum);
}
public static void main1(String[] args) {
double sum1=0.0;
double sum2=0.0;
for (int i = 1; i <=100 ; i++) {
if(i%2==0){
double m = -1.0/i;
sum1 += m;
}else{
double n = 1.0/i;
sum2 += n;
}
}
double sum = sum1+sum2;
System.out.println(sum);
}
}
8.统计数字9
public class Test8 {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <=100 ; i++) {
if(i%10 == 9){//先计算个位数是9的情况
count++;
}if(i/10 == 9){//再计算十位数是9的情况,不能加else,会排除99的情况,99个位数十位数均为9
count++;
}
}
System.out.println(count);
}
}
9.计算水仙花数
public class Test9 {
public static void main(String[] args) {
for (int i = 100; i <=999 ; i++) {
int c = i%10;//计算个位
int b = (i%100-c)/10;//计算十位
int a = i/100;//计算百位
int m = a*a*a + b*b*b + c*c*c;//符合水仙花数的条件
if(i == m){
System.out.println(i);
}
}
}
}
10.模拟输密码场景
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
int count = 3;
while(count!=0) {
System.out.println("请输入你的密码:");
Scanner scanner = new Scanner(System.in);
String password = scanner.nextLine();
if (password.equals("200267")) {//注意这里是用.equals()来判断字符串是否相等
System.out.println("登陆成功!");
return;//密码输入成功后不再执行
scanner.close();
} else {
count--;
System.out.println("密码错误,还可以输入:" + count + "次");
}
}
}
}
11.返回参数二进制中1的个数
public class test11 {
public static void main(String[] args) {
System.out.println(func(15));
}
public static int func(int n){
int count = 0;
while(n!=0){
count++;
n = n & (n-1);
}
return count;
}
}
原理如图
12. 获取一个数二进制序的所有奇、偶数位
//12.获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
public class Test12 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
int n = scanner.nextInt();
System.out.println("偶数序列为");
for (int i = 31; i >0 ; i-=2) {
System.out.print((n>>i)&1);//这里采用不换行输出
System.out.print(" ");
}
System.out.println();
System.out.println("奇数序列为:");
for (int i = 30; i >=0 ; i-=2) {
System.out.print((n>>i)&1);
System.out.print(" ");
}
scanner.close();
}
}
13. 输出整数的每一位
//13.输出一个整数的每一位.
import java.util.Scanner;
public class Test13 {//使用递归实现
public static void main(String[] args) {
System.out.println("请输入一个整数:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
print(num);
scanner.close();
}
public static void print(int n){
if(n>9){
print(n/10);
}
System.out.print(n%10+" ");
}
}
14.猜数字游戏
import java.util.Random;
import java.util.Scanner;
public class Test14 {
public static void main(String[] args) {
Random random = new Random();//默认随机种子是系统时间
int num = random.nextInt(100);//
while(true) {
System.out.println("请输入1-100中的一个数字:");
Scanner scanner = new Scanner(System.in);
int ans = scanner.nextInt();
if (ans > num) {
System.out.println("猜大了!");
} else if (ans < num) {
System.out.println("猜小了!");
} else {
System.out.println("恭喜你!猜对了!");
break;
}
scanner.close();
}
}
}