1.循环语句
(1)for循环(确定循环)
//如果在for语句内部定义一个变量,那么这个变量就不能在循环体之外使用
public class TestFor {
public static void out(){//打印1~10
for(int i = 1;i <= 10;i ++)
System.out.println(i);
}
public static void main(String[] args){
out();
}
}
(2)for each循环:增强的for循环,可以用来依次处理数组(其他类型的元素集合)中的每个元素,不必为指定下标值分心。
(3)while:先判断再执行。
(4)do while:至少执行一次。
2.if语句
if条件语句包含多种形式:单分支、双分支和多分支。
if语句的程序流程图:
if语句双分支的程序流程图:
if语句多分支的程序流程图:
import java.util.Scanner;
public class loopYear {
public static boolean fun(int year){
if((year % 4 == 0 && year % 100 != 0)||year % 400 == 0){//判断是否为闰年
return true;
}
return false;
}
public static void main(String[] args){
//int year;
System.out.println("输入年份:");
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
// String s = scanner.nextLine();
// year = Integer.parseInt(s);//将数字字符转换为等效的整数
System.out.println(loopYear.fun(year));
}
}
3.switch语句
对于分支较多的多重分支,使用嵌套的if语句层次太多,结构比较复杂,程序可读性较差,此时可使用switch语句。
switch语句的程序流程图:
switch语句是一个控制语句,它通过将控制传输给其体内的case语句来处理多个选择和枚举。
switch语句基于控制表达式的值选择要执行的语句分支。按以下顺序执行:
(1)控制表达式求值。
(2)如果case标签后的常量表达式的值恰好等于控制表达式的值,控制将转到匹配的case标签后的语句序列。
(3)如果case标签后的常量表达式都不等于控制表达式的值,且存在一个default标签,则控制将转到default标签后的语句序列。
(4)如果case标签后的常量表达式都不等于控制表达式的值,且不存在default标签,则控制将跳出switch语句,执行后面的程序。
switch语句控制表达式允许的数据类型:
(1)整数类型(byte、short、int);
(2)字符类型(char);
(3)枚举类型。
注:每一个case标签后的常量表达式的值都不能相同
public class Grade{
public static void test1(){
//case语句中少写了break;,编译不会出错,但是会一直执行之后所有case条件下的语句,并不进行判断,直到default语句。
char ch = 'A';
switch (ch){
case 'B':
System.out.println("case1");
case 'A':
System.out.println("case2");
case 'C':
System.out.println("case3");
default:
System.out.println("false");
//输出为case2 case3 false
}
}
public static void test2(){
//default不是必需的也可以不写
char ch = 'A';
switch (ch){
case 'B':
System.out.println("1");
break;
case 'A':
System.out.println("2");
break;
case 'C':
System.out.println("3");
break;
}
//输出2
}
public static void test3(){
char ch = 'A';
switch (ch){
case 'B':
System.out.println("1");
case 'A':
System.out.println("2");
case 'C':
System.out.println("3");
}
//break和default都没有,无报错
//输出2 3
}
public static void main(String[] args){
test1();
test2();
test3();
}
}
4.输入
要通过控制台进行输出,首先要构造一个Scanner对象,并与“标准输入流”System.in关联。
import java.util.Scanner;
public class Next {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);//用给定的输入流创建一个对象
int s = scanner.nextInt();//读取输入的字符串,空格结束
System.out.println(s);
String str = scanner.next();//读取输入的单词,以空格作为分隔符
System.out.println(str);
//读取输入的浮点数,空格结束
float f = scanner.nextFloat();
System.out.println(f);
double d = scanner.nextDouble();
System.out.println(d);
String str1 = scanner.nextLine();//读取输入的整行内容
System.out.println(str1);
}
}
任何next()与nextLine()的连用:
package test.review;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
String str = scanner.next();
float a2 = scanner.nextFloat();
double a3 = scanner.nextDouble();
String str2 = scanner.nextLine();
String str3 = scanner.nextLine();
System.out.println(a);
System.out.println(str);
System.out.println(a2);
System.out.println(a3);
System.out.println(str2);
System.out.println(str3);
}
}
运行结果
练习
1.斐波那契数列
## 前40项求和
//斐波那契数列前40项求和
//当n=1时,F=1
//当n=2时,F=1
//当n>2时,F=F(n-1)+F(n-2)
public class Fibonacc {
public static int fibonacc(int n){
if (n == 1 || n == 2){//f1,f2的值为1
return 1;
} else{
return fibonacc(n - 1) + fibonacc(n - 2);//f(n>2)=F(n-1)+f(n-2)
}
}
public static void main(String[] args) {
int i,sum = 0;
for(i = 1;i <= 40;i ++){
// System.out.println(fibonacc(i));
sum = sum + fibonacc(i);//求和
}
System.out.println(sum);
}
}
2.随机数
## for循环产生20个(10~20)随机数
//for循环产生20个(10~20)随机数
import java.util.Random;
public class RandomNumber {
public static void random(){
int i;
double sum = 10;
Random r = new Random();//创建一个产生随机数的对象
for(i = 0;i < 20;i ++){//20次循环
double a = r.nextDouble();
sum = sum + a;
System.out.println(sum);
}
}
public static void main(String[] args){
random();
}
}
3.输入一个数字,求它是几位数,并且顺序输出,再逆序输出
//输入一个数字,求它是几位数,并且顺序输出,再逆序输出
import java.util.Scanner;
public class Number {
//判断是几位数
public static int numberDigit(int num){
int count = 0;//计数
if (num == 0) {//
count = count + 1;
}else{
while(Math.abs(num) % 10 > 0 || num /10 != 0) {
count++;//
num = num / 10;//每除一次10,count加一
}
}
return count;
}
public static void main(String[] args){
//输入
System.out.println("请输入一个数字:");
Scanner scanner = new Scanner(System.in);
int n1 = scanner.nextInt();
System.out.println(numberDigit(n1) + "位数:");//输出几位数
System.out.println("正序输出:" + n1);//正序
//逆序
// int a,b,c,n2;
// a = n1 / 100;
// b = (n1 % 100) / 10;
// c = n1 % 10;
// n2 = c * 100 + b * 10 + a;
// System.out.println("逆序输出:" + n2);
}
}
//问题:逆序输出
4.求一个二进制数有几个1
//求一个二进制数有几个1
import java.util.Scanner;
public class NumerB {
public static void main(String[] args) {
//输入
Scanner scanner = new Scanner(System.in);
int b = scanner.nextInt();
int count = 0,count2 = 1,flag = 1;
//正数
if (b > 0) {
while (flag <= b) {
if((b & flag) != 0)
count ++;
flag = flag << 1;//用1和b的最低位相与,flag左移一位,依次到最高位
}
System.out.println(count);
}
//负数
else if(b < 0){
b = b << 1;//负数符号位都是1,count2初值给1,b左移一位,计算数值部分1的个数
while (flag <= b){
if((b & flag) != 0)
count2 ++;
flag = flag << 1;
}
System.out.println(count2);
}
//0
else{
System.out.println(count);
}
}
}
//问题:count2错误