数组(排序,for-each)

1. 安装Eclipse

其实就是一个java的编辑软件
可以让我们直接可视化创建项目,编程
一键跑程序
不再需要通过CMD命令
会很方便 简洁(其实我比较喜欢他的自动补全功能)

老师提到了几点:
1 代码字体大小(其实我没啥感觉,哈哈哈 需要改我都直接CTRL+ -进行修改了)
2 Windows→General→Workspace→Text file encoding→Other : UTF-8(老师说是全球通用这样,对接工程会方便一些 )
3.ALT+/ 可以自动补全(我自己记得 哈哈哈 要慎用)
4.全部注释:CTRL+SHIFT+/

2. 数组

数组是:一种数据类型,内存空间连续,元素数据类型相同。(数组下标从0开始)
直接输出对应数组,输出的是对应的地址。
数组.length 返回数组有多少个元素(可以用这个结合遍历,输出数组所有元素)

2.1for-each循环

for(数组元素类型 变量:数名){}
直接用这个循环 把数组全部赋值给变量。

2.2数组初始化

穷举法:
① int[ ]变量名 = {X,X,X};//这种方法,必须在声明数组变量时一起使用
(即不可以先声明变量,再赋值)
②int[ ]变量名 = new int [ ] {X,X,X};//这种可以先声明变量,再赋值

指定数组长度:
int [ ] ages = new int [10];//数组中最多可以保存10个元素(整形 默认值是0,浮点型 默认值 0.0 Boolean型 是 false ,char 型 是空)

2.2.X二维数组(用的少,了解即可)

二维数组:数组中的数组。

int [] [] ages = {{1,1,1,1,1}{1,1,1,1,1}{1,1,1,1,1,1}};//穷举法
int [] [] ages = new int [] []{{1,1,1,1,1}{1,1,1,1,1}{1,1,1,1,1,1}};//穷举法
int [] [] ages = new int [3] [5];//有三个一维数组,每个一维数组有5个元素。

如何遍历:

  for(int i = 0 ; i < ages.length; i++){//ages.length 二维数组中有多少个一位数组
  		int [] dates =ages [i];
  		for (int j = 0; i<dates,length ;i++){//一维数组中有多少个元素
  		int date = dates[j];
  		}
  }

//或者直接这样:

for(int[] dates: ages){
	for(int date:dates){
	}
}

3.值传递与地址传递

①值传递

int a =12;
int b = a ;

②地址传递

int[] array = {12,22};
int[] Sum = array;//因为直接传递数组,实质传递的是地址

总结区别:
其实这个东西之前有学过
包括学校汇编语言也有讲过
通俗点说
传值,相当于在内存(寄存器)的新位置,将同样的值放入,改变该变量的值,不会影响原先变量的大小;
而传地址,相当于将原变量的地址与新变量进行共享,该内存(寄存器)受到两个人的共享,任何一方对起进行改变,双方都会进行改变。

4.冒泡排序

两两比较 ,然后逐次将大的值,或者小的值移向我们想转移的方向。
实例代码:

int [] array = {1,2,3,4,5,6};
for(int j =1;j<array.length;j++){//外围共Length次,意思是每个数都要进行冒泡
for(int i =0 ;i<array.length-j;i++){//内层是length-j次,因为第一个数,他需要跟四个数比较,第二个数需要跟剩下的三个数进行比较,这样可以节省运算空间等
	int current = array[i];
	int next = array [i+1];
	if(current>next){
		array[i]=next;
		array[i+1]=current;
		}
	}
}

5.插入排序

int[]array = {1,2,4,5,3};

for(int i =1; i<array.length;i++){
int willdata = array[i];//待插入数
//第一步要找位置
int j =0 
for(; j<i;j++ ){
if (array[j] >willdata){
	break;
}
}
//第二步做移动

for(int k = i;k>j;k--){
	array[k]=array[k-1];
}

//做插入
array[j]=willdata;
}

将序列分成两部分,一部分有序,一部分无序,通过插入排序,将无序的部分插入的有序的部分,
从而完成排序。

作业:

在这里插入图片描述

1.

对于第一题我的第一思路是
对称即需要多次判断,可以用for循环
呢么循环次数应该就是 数组长度 / 2(偶数刚好是一半,而奇数则由于中间的数不需要比较,所以整除刚好会忽略,所以)
比较的话,应该是 定义 i,数组长度-i,这样比较
代码如下:

public class Test {
	public static void main (String[] args) {
		//因为还未学习到输入,输出,所以只能假设个数组进行判断
		int [] array1 = new int [] {1,2,3,4,3,2,1};		
		
		int m = array1.length;

		
		for(int i=0;i<=m/2-1;i++) {
			if(array1[i]!=array1[m-i-1]) {
				System.out.print("不是对称序列");
				return;//直接返回,不执行下边代码
										}	
			else {continue;}
								}
		System.out.print("是对称序列");
		
		
	}

结果:
在这里插入图片描述
想法:
这个题在真正写的时候
第一,要注意数组下标是从0开始,到length-1解说;
第二,我们由于要不停比较,所以直接将不符合相等的,进行跳出循环,并输出不是对称
但是由于我们如果相等的话,还需要一直进行,所以我们如果能完全运行完循环,一直都合适,这样才能输出 是 对称序列
因此 我们不能让 不是对称的,输出 不对称 和 对称 两个结果
所以我们必须要用 return;

2.

由于自身长度为10,且已经按递增排列,要求用户输入一个数后,插入适当位置
因为仅输入一个数
所以我们不需要做插入排序
只需要 插入
然后对右侧的数 统一往右移动一位即可

代码如下:

public class Test1 {
	public static void main(String[] args) {
		int[] array = new int[]{1,2,3,4,5,6,8,9,13,15,7};
		int Len = 10;//已知的数组长度为10
		int a =  array[array.length-1];//待插入数的位置
		//先进行找位置
		int i = 0 ;
		for ( ; i < array.length-1; i++) {
			if (array[i]>a) {
				break;//因为已经明确按从小到大顺序,所以一单大于,则立马终止
			}
			
		}
		//找到位置后,进行移位,从第length-1位开始移动,移动到i位
		for(int j=array.length-1;j>=i;j--) {
			array[j]=array[j-1];
				}
		//进行插入
		array[i] = a ;
		//输出检测
		for(int Ts1:array) {
			System.out.print(Ts1+",");
		}
		
	}
		
}

结果如下:
在这里插入图片描述
可以发现已经完成排序
想法:
写这个题的时候,会因为去纠结循环的次数啊,循环的边界啊,以及最后遍历的代码咋写
因为真的听了,需要好好的去记忆
好好的练习
在写这个代码的时候,我又报错
也有去翻阅笔记,代码该咋写
总之这样子一会一定要加强练习啦,不然,不然下次还要再对着抄,多麻烦鸭,要掌握。

总结:
今天晚上把课听了,作业写了,耗时不算太久
但是今天也是第一次写作业
会出现报错的一天
因为有些代码需要固定格式
以及数组的边界限制等
所以会耽误一些时间在找错,调试方面
在报错的时候
真的会很不开心
不知道为什么自己会出错
但是最后还是自己解决了
哈哈哈
有点不太想问别人
有问题自己真解决不了了
再百度
再自己理解
因为好多情况下
问完别人
有一种科技黑箱的感觉
直接拿来改,拿来用
从而会忽视为什么这样
今天天气很晒,
我也很困
期待明天
难搞哦,加油吧少年。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值