其实就是一个java的编辑软件
可以让我们直接可视化创建项目,编程
一键跑程序
不再需要通过CMD命令
会很方便 简洁(其实我比较喜欢他的自动补全功能)
老师提到了几点:
1 代码字体大小(其实我没啥感觉,哈哈哈 需要改我都直接CTRL+ -进行修改了)
2 Windows→General→Workspace→Text file encoding→Other : UTF-8(老师说是全球通用这样,对接工程会方便一些 )
3.ALT+/ 可以自动补全(我自己记得 哈哈哈 要慎用)
4.全部注释:CTRL+SHIFT+/
数组是:一种数据类型,内存空间连续,元素数据类型相同。(数组下标从0开始)
直接输出对应数组,输出的是对应的地址。
数组.length 返回数组有多少个元素(可以用这个结合遍历,输出数组所有元素)
for(数组元素类型 变量:数名){}
直接用这个循环 把数组全部赋值给变量。
穷举法:
① int[ ]变量名 = {X,X,X};//这种方法,必须在声明数组变量时一起使用
(即不可以先声明变量,再赋值)
②int[ ]变量名 = new int [ ] {X,X,X};//这种可以先声明变量,再赋值
指定数组长度:
int [ ] ages = new int [10];//数组中最多可以保存10个元素(整形 默认值是0,浮点型 默认值 0.0 Boolean型 是 false ,char 型 是空)
二维数组:数组中的数组。
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){
}
}
①值传递
int a =12;
int b = a ;
②地址传递
int[] array = {12,22};
int[] Sum = array;//因为直接传递数组,实质传递的是地址
总结区别:
其实这个东西之前有学过
包括学校汇编语言也有讲过
通俗点说
传值,相当于在内存(寄存器)的新位置,将同样的值放入,改变该变量的值,不会影响原先变量的大小;
而传地址,相当于将原变量的地址与新变量进行共享,该内存(寄存器)受到两个人的共享,任何一方对起进行改变,双方都会进行改变。
两两比较 ,然后逐次将大的值,或者小的值移向我们想转移的方向。
实例代码:
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;
}
}
}
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;
}
将序列分成两部分,一部分有序,一部分无序,通过插入排序,将无序的部分插入的有序的部分,
从而完成排序。
对于第一题我的第一思路是
对称即需要多次判断,可以用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;
由于自身长度为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+",");
}
}
}
结果如下:
可以发现已经完成排序
想法:
写这个题的时候,会因为去纠结循环的次数啊,循环的边界啊,以及最后遍历的代码咋写
因为真的听了,需要好好的去记忆
好好的练习
在写这个代码的时候,我又报错
也有去翻阅笔记,代码该咋写
总之这样子一会一定要加强练习啦,不然,不然下次还要再对着抄,多麻烦鸭,要掌握。
总结:
今天晚上把课听了,作业写了,耗时不算太久
但是今天也是第一次写作业
会出现报错的一天
因为有些代码需要固定格式
以及数组的边界限制等
所以会耽误一些时间在找错,调试方面
在报错的时候
真的会很不开心
不知道为什么自己会出错
但是最后还是自己解决了
哈哈哈
有点不太想问别人
有问题自己真解决不了了
再百度
再自己理解
因为好多情况下
问完别人
有一种科技黑箱的感觉
直接拿来改,拿来用
从而会忽视为什么这样
今天天气很晒,
我也很困
期待明天
难搞哦,加油吧少年。