JAVA基础(二)

二、流控制

1.接收用户输入

input.next();与input.nextline();不能同时用。
next(必须输入有效内容)后空格/回车都结束,
nextline必须回车结束;

	public static viod main(String[] args) {
		Scanner input = new Scanner(System.in);
		//用于接收各种数据类型;
		//System.out.println("请输入一段数字:");
		//int i = input.nextInt();
		//System.out.println(i);
		
		System.out.println("请输入next接收的内容:")String str2 = input.next();
		//System.out.println("请输入next接收的内容:");
		//String str2 = input.nextLine();

		System.out.println(str1);
		//System.out.println(str2);

2.执行结构

概述:
任何简单或复杂的算法都可以由顺序结构、分子结构和循环结构这三种基本结构组合成。
它们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。

顺序结构
顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作
分支结构
分支结构又被称为选择结构,根据条件成立与否来执行操作
循环结构
循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足条件为止。

(1)if分支

	public static void main(String[] args) {
		System.out.println("请输入")Scanner input = new Scanner(System.in);
		int s = input.nextInt();
		
		if(a>b) {
			System.out.println("a");
		}
		else {
			System.out.println("b")
		}
		if(a>b || a<0) {
			System.out.println("你输入错误")}else if(a>=9) {
			System.out.println("优秀")}else if(a>=7) {
			System.out.println("良好")}else if(a>60) {
			System.out.println("合格");
		}else {
			System.out.println("加油!");
		}
		

(2)switch语句

表达的返回值必须是下述几种类型之一:int,byte,char,short.String;
case子句中的取值必须是常量,且所有case子句中的取值应是不同的;
default 子句是可选的;
break语句用来在执行完成一个case分支后使程序跳出switch语句块;如果case后面没有写break则直接往下面执行;
Case后面的执行体可写{}也可以不写{}

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个月份(1-12)")String text = input.next();
		switch (text) {
			case "1":
			case "2":
			case "3":
				System.out.println("春季")breakcase "4":
			case "5":
			case "6":
				System.out.println("夏季")break;
			case "7":
			case "8":
			case "9":
				System.out.println("秋季")breakcase "10":
			case "11":
			case "12":
				System.out.println("冬季");
			default:
				System.out.println("你输入有误");
				break;
		}
	}

(3)循环语句

while循环和do-while循环的区别:
while:先判断条件,如果条件满足,再执行循环操作
do while:先执行一遍循环操作,然后在判断条件,如果条件满足,继续执行循环操作。

	public static void main(String[] args) {
		int i=0;
		while(i<10){
		//更新循环变量
		i++;
		System.out.println("循环在执行:"+i);
		}
		System.out.println("执行结束")}
	public static void main(String[] arge) {
		int i = s;
		do {
			i++;
			System.out.println(i);
		}whlie(i<s);
		System.out.println("程序结束");
	}

(4)for循环

:适合循环值固定情况下

for(初始化参数;判断条件;更新循环变量) {
循环体;
}

(5)循环嵌套

	public static void main(String[] args) {
		int count = 0;
		for(int i=0;i<10;i++) {
			for(int j=0;j<10;j++) {
				count++;
				System.out.println(count);
			}
		}
	}

(6)break与continue

break与continue语句:
break是用于终止本轮所有次循环,即不执行本次循环中break后面的语句,直接跳出循环。
continue是用于终止本轮次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。

	public static void main(String[] arge) {
		for(int i=0;i<10;i++) {
			if(i==5) {
				continue;
			}
			System.out.println(i);
		}
	}	
//退出多重循环
	public static void main(String[] args) {
		haha:for(int i=0;i<10;i++) {
			for(int j=0;j<10;j++) {
				System.out.println("i="+i+",j="+j);
				if(i==5 && j==5) {
					break haha;
				}
			}
		}
	}
	public static void main(String[] args) {
		//外层循环控制的是行数
		for(int j=0;j<10;i++) {
			System.out.print("*");
		}
		System.out.println();
	}		

3.图形的打印

图形1
*
***
*****
*******
	解决方案:
		外层循环控制行数:4
		内层循环控制列数:第一行循环1次,第二行循环3次,第三行循环5次,第四行循环7for(int i=0;i<4;j++){
			for(int j=0;j<i*2+1;j++){
				System.out.print("*");
		}
		System.out.println();
	}
	//交付标准
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字")//在接收输入之前判断输入的类型是否为int
		if(input.hasNext()) {
			int num = input.nextInt();
			System.out.println("你输入的是:"+num);
		}else {
			System.out.println("你输入的是个锤子")}
    public static void main(String[] args) {
        System.out.println("请输入年份:");
        Scanner input3 = new Scanner(System.in);
        int year = input3.nextInt();
        System.out.println("请输入月份:");
        Scanner input4 = new Scanner(System.in);
        int month = input4.nextInt();
        getMonthDays(year, month);
    }
/** * 计算该年该月天数 一年中有12个月,而每个月的天数是不一样的,其中,有7个月为31天 * 称为大月,分别为1,3,5,7,8,10,12月,有4个月为30天,称为小月,分别 * 为4,6,9,11月,还有二月比较特殊,平年的二月只有28天,而闰年的二月 * 有29天,由用户在控制台输入年份和月份,程序计算该年该月的天数。 */
public static void getMonthDays(int year, int month) {    
	int days;    
	switch (month) {        
	case 1:        
	case 3:        
	case 5:        
	case 7:        
	case 8:        
	case 10:        
	case 12:            
		days = 31;            
		System.out.println(year + "年" + month + "月天数为:" + days);            
		break;        
		case 4:        
		case 6:        
		case 9:        
		case 11:            
		days = 30;            
		System.out.println(year + "年" + month + "月天数为:" + days);            
		break;        
		case 2:            
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {                
		days = 29;            
		} else {                
		days = 28;            
		}            
		System.out.println(year + "年" + month + "月天数为:" + days);            
		break;    
	}
}

三、数组

概述 :
数组是相同数据类型的多个数据的容器。
这些元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个 元素外,每一个元素都有唯一的后继元素。(“简单理解就是:一个跟一个顺序排列”)。
创建格式
格式 1. 数据类型[] 数组名称 = new 数据类型[数组长度];
格式 2. 数据类型[] 数组名称 = {数组内容 1,数组内容 2,数组内容 3…数组内容 n};
格式 3.数据类型[] 数组名;
格式 3 属于只创建了数组引用名, 并未在内存创建数组空间。
格式 4. 数据类型[] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3…内容 n};
下标 :
可以理解为数组中内容的数字序号,从 0 开始 ,对于长度为 n 的数组,下标的范围是 0~n-1。
可以通过下标的方式访问数组中的每一个元素。

例如: 创建 int 类型数组 arr , 给数组 arr 的 5 下标赋值数据 , 然后打印
int[] arr = new int[10];
arr[5] = 123;
System.out.println(arr[5]);
数组长度获取
数组名称.length

public static void main(String[] args) {
	//格式1:创建数组的同时,制定数组中的内容。
	//数据类型[] 数组名称={数据1,数据2,数据3...数据n};
	int[] ages = {10,11,12,13,14};
	//格式2:创建数组,并指定长度,不指定数组中的内容。
	//数据类型[] 数组名称 = new 数据类型[数组长度];
	//数组长度通过int数据指定
	int[] ages2 = new int[10];
//通过下标操作数组数据的方式:
//1.给数组某个下标赋值:数组名称[下标] = 值;
ages[0] = 100;
//2.从数组某个下标取值:数组名称[下标]
System.out.println(ages[0]);
ages2[0] = 99;
System.out.pritnln(ages2[0]);
//如何获取数组的长度:数组名称.length
//数组的遍历
for(int index=0;index<ages.length;index++) {
	//index:0 1 2 3 4
	System.out.println(ages[index]);

1.不常用数组定义格式

public static void main(String[] args) {
	//数组不常用的创建方式:
	//1.创建数组,不初始化
	//格式:数据类型[] 数组名;
	int[] nums;
	//2.创建数组,并指定数组中的内容
	//格式:数据类型[] 数组名称 = new 数据类型[]{内容1,内容2,内容3...内容};
	int[] ages = new int[] {11,12,13,14};
}
public static void main(String[] args) {
	//数组不常用的创建方式:
	//1.创建数组,不初始化
	//格式:数据类型[] 数组名;
	int[] nums;
	nums = new int[10];

注意
使用数组不当, 会出现如下问题:
数组未赋值: 空指针异常
超出长度的下标操作: 数组越界异常
注意:数组的长度在创建时就固定了。

public static void main(String[] args) {
	//常见问题
	//1.数组下标越界问题;
	//int[] nums = {10,11,12,13,14};
	//System.out.println(nums[5]);
	//2. 空指针问题
	int[] nums = null;
	System.out.println(nums[1]);
}

2.找出数组的最值

//寻找数组中最大值|最小值
public static void main(String[] args) {
	int[] nums = {10,30,40,33,22,20,11,0};
	//1.创建一个变量,用于存储遍历数组时发现的最大值
	int n = nums[0];
	//2.循环取出数组中的每一个内容,从1开始
	for(int i=1;i<nums.length;i++) {
		//将数组中的每一个内容与n比较,如果比n大,则将n的值赋值为这个内容。
		n = n<nums[i]?n:nums[i];
	}
	System.out.println(n);
}
Scanner input = new Scanner(System.in);
int[] nums = new int[10];
System.out.println("请输入10个整数:");
for (int i = 0;i < nums.length;i++) {
	nums[i]=input.nextInt();    		
}
int max=nums[0];
int min=nums[0];
for (int i = 1;i<nums.length;i++) {
	max = max>nums[i]?max:nums[i];
	min = min<nums[i]?min:nums[i];

}
System.out.println("最小值为:"+min);
System.out.println("最大值为:"+max);  

3.数组常用算法

冒泡排序 原理:

–比较相邻的元素。如果第一个比第二个大,就交换他们两个。
–对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的 数。
–针对所有的元素重复以上的步骤,除了最后一个。
–持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
名字由来:
是因为最小(或最大)的元素会经由交换慢慢“浮”到数列的顶端(降序或升序),就如同水中的气泡最终会上浮到 顶端一样,故名“冒泡排序”。
升序排列的口诀:
N个数字来排队
两两相比小靠前,
外层 循环length-1
内层循环length-i-1
降序排序的口诀:
N个数字来排队
两两相比大靠前,
外层 循环length-1
内层循环length-i-1

//冒泡排序
public static void main(String[] args) {
	int[] nums = {20,15,18,13,30,60};
	int temp;
	//外层循环控制的是,比较的次数
	//外层循环次数:length-1
	for(int i=0; i<nums.length-1;i++) {
		//内层循环控制的是,每轮比较的次数
		//第i轮(i从0开始计算),比较次数为:length-i-1
		for(int j=0;j<nums.length-i-1;j++) {
			if(nums[j]>nums[j+1]) {
				//两两相比,满足移动条件
				temp = nums[j];
				nums[j] = nums[j+i];
				nums[j+1] = temp;
			}
		}
	}
	
	//排序已经完成,下面是遍历打印查看的过程
	for(int i=0; i<nums.length;i++) {
		System.out.println(nums[i]);
	}
}			

4.二分查找

概述 原理 数组动态扩容 学习集合知识点时, 重点讲解。 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求数组数据必须采用顺 序存储结构有序排列。 首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;否则利用 中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则进一步查 找后子数组。
重复以上过程,直到找到满足条件的数据,则表示查找成功,
直到子数组不存在为止,表示查找不成功。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/**
*二分查找(折半查找)
*/
public static viod main(Steing[] args) {
	int[] nums = {10,20,30,40,50,60,70,80,90};
	
	int num = -100;
	
    int minIndex = 0;
    
    int maxIndex = nums.length-1;
	
	int centerIdex = (minIndex+maxIndex)/2;
	while(true) {
		System.out.println("循环了一次")if(nums[centerIndex]>num) {
			//
			maxIndex = centerIndex-1;
		}else if(nums[centerIndex]<num) {
			//
			minIndex = centerIndex+1;
		}else {
			//
			break;
		}
		if(minIndex > maxIndex) {
			centerIndex = -1;
		}
		//
		centerIndex = (minIndex+maxIndex)/2:
	}
	System.out.println("位置:"+centerIndex);
} 

5.多维数组

/**
*创建格式:
*		数据类型[] 数组名 = new 数据类型[长度];
*		int[][] 二维数组名称 = new int[长度][];
*/
public static void main(String[] args) {
	int[][] nums = new int[10][];
	nums[0] = new int[] {1,2,4};
	System.out.println(nums[0][2]);
}	
import java.util.Scanner;

public class Demo01 {

	public static void main(String[] args) {
//选队长游戏训练任务
    System.out.println("输入d人数");
    Scanner scanner = new Scanner(System.in);
    //获得有多少人
    int num = scanner.nextInt();
    int[] nums = new int[num];
    for (int i = 0; i < nums.length; i++) {
        nums[i] = i + 1;
    }

    //记剩余人数
    int count = 0;
    //报数 1,2,3
    int index = 0;
    
    while (true){
        count = 0;
        //循环整个队伍
        for (int i=0; i < nums.length ;i++){
            //如果是没喊过3的人才进行报数,喊过的已经出局了,被记为-1
            if (nums[i] != -1){
                index++;
                if (index == 3){
                    //当报到3的时候归零,此时下标为i的人退出,数值变为-1
                    index = 0;
                    nums[i] = -1;
                }
            }
            if (nums[i] != -1){
                count++;
            }
        }
        if (count == 1){
            break;
        }
    }
    //遍历当前数组看哪个位置数组不为-1则输出下标
    for (int i = 1; i <= nums.length; i++) {
        if (nums[i-1] != -1){
            //从0开计数需要加1
            System.out.println("第"+(i)+"是队长");
        }
    }
}

总结

以上就是JAVA基础的内容,本文仅仅简单介绍了Java的使用方法,基础语法、流程控制、数组等。

创作不易点个赞谢谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值