——- android培训、java培训、期待与您交流! ———-
JAVA自学系列
期待与您的交流
一、关于数组的定义和一些列操作
类似
int[] arr = new int[2];
或者
int arr[] = new int [2];
或者
int[] arr = new int[]{1,2,3,4};
或者
int[] arr= {1,2,3,4};
几种方式都是可以用来定义一个数组,然后数组名前面的修饰符int也可以切换成其它诸如byte这些。
1.数组的遍历
for(int x=0;x<数组长度;x++)
{
数组[x];
}
数组有一个length属性可以用来获取数组长度
2.取最值
这里用取最大值举例子
int a=数组[0]
for(int x=1;x<数组长度;x++)
{
if(a>数组[x])
a = 数组[x];
}
最后得出的a的值,一定是数组中最大值
此处注意,for内x的初始值是1而不是0.因为a的初始值为数组[0]
2.排序,此处列举两种,冒泡法和比较法
这两种方法其实都差不多,
冒泡法
for(int x=0;x<数组长度-1;x++)
{
for(int y=0;y<数组长度-x-1;y++)
{
if(数组[y]>数组[y+1]);
两值互换;
}
}
比较法
for(int x=0;x<数组长度-1;x++)
{
for(int y=x;y<数组长度;y++)
{
if(数组[x]>数组[y]);
两值互换;
}
}
可以看出这两种方法在语言上看上去是差不多的,然后执行过程中的差别冒泡挨个将最值排到顶端,而比较法是从头开始每个元素都与之后的所有元素做比较,所以冒泡法效率更高一点。
3.数组元素的查找
有脚标的情况下可以直接通过,数组[x]的方法获取元素
而有元素的情况下只需要
for(int x=0;x<数组长度;x++)
{
if(数组[x]==元素)
return x;
}
就可以得到该元素脚标的值,在编写此类程序的时候,一般有一个惯例,就是如果所提供的元素在函数中不存在,则我们给出返回值-1,因为负数在数组脚标中是不可能出现的,所以用-1来表示查无此元素。
此外若可以确定一个数组中数据是顺序排序的,则此时我们可以使用中间值法来进行更有效率的查找
int x=数组长度-1;
int y=0;
int mu=(x+y)/2;
for(;mu
{
if(元素>数组[mu])
{
y=mu+1;
mu=(x+y)/2;
}
else if (元素<数组[mu])
{
x=mu-1;
mu=(x+y)/2;
}
else
return mu;
}
元素在数组中不存在;
二、进制的转换
1.十进制转二进制:整数部分除二取余,最后将得出的二进制数串从后往前读,完成 小数部分,乘二取整法,最后得出的结果从前往后读
StringBuffer sb = new StringBuffer()
while(num>0)
{
sb.append(num%2);
num=num/2;
}
输出(sb.reverse());
2.十进制转十六进制:
最后是关于数组相关操作的一点调试过的代码
/*
需求:定义一个数组,并对该数组进行排序,取最值,插入元素,取出元素,取出元素的脚标的操作
思路和步骤:
1.定义数组arr_1,给出一组初始数据
2.针对所需要实现的几个功能,分别创建函数
1.printData()依次打印数组元素
2.buSort()冒泡排序,
3.seSort()选择排序,
4.getMax()取最大值,
5.getMin()取最小值,
6.outData()取出元素极其脚标
注意,当函数有返回值的时候,定义函数时候的数据类型修饰符需要与返回值类型一样
*/
import java.util.Scanner;
class ArrayDemo
{
//printData()遍历数组数据,打印数组数据个数,并依次打印数组元素极其脚标并制表
//数组长度可以使用数组的length获取
public static void printData(int[] arr)
{
//定义len取arr长度,方便使用,用for循环完成数组的输出
int len=arr.length;
System.out.println(len+"个元素");
for(int x=0;x { //print和println都用作输出,区别在于后者在输出完成后自动键入换行 System.out.print(x+"\t"); System.out.println(arr[x]); } } //buSort()冒泡排序,正序, //双for循环,依次将每个元素与从做往右同右边紧挨的元素做对比,若比右边大则互换位置 public static void buSort(int[] arr) { int len=arr.length; //第一层for循环,x for(int x=0;x { //第二层for循环,-x是因为每次比较的次数都越来越少,-1是为了防止数值越界 for(int y=0;y { if(arr[y] { int temp = arr[y]; arr[y] = arr[y+1]; arr[y+1] = temp; } } } //输出结果 printData(arr); } //seSort()选择排序,正序 public static void seSort(int[] arr) { int len=arr.length; /*选择排序和冒泡排序语言上最大的不懂就在于第二层for循环上 y的初始值是x+1而冒泡排序y的初始值是0 这两者在执行上的区别就在于: 冒泡排序是元素两两相比 而比较排序是从最开始的值开始,依次同右边的所有值相比较 */ for(int x=0;x { for(int y=x+1;y { if(arr[x]>arr[y]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } } printData(arr); } //getMax()取最大值,只需要遍历函数一次然后输出最大值极其脚标即可 public static int getMax(int[] arr) { int max = arr[0],len=arr.length; //for循环处x初始化值之所以是1,是因为max的初始化值是arr[0],没必要再同自己做一次比较 for(int x=1;x { if(arr[x]>max) { max = arr[x]; } } return max; } //getMin()取最小值,本质上同上一个函数取最大值相同,只不过if语句的比较变为arr[x] public static int getMin(int[] arr) { int min = arr[0],len=arr.length; //for循环处x初始化值之所以是1,是因为max的初始化值是arr[0],没必要再同自己做一次比较 for(int x=1;x { if(arr[x] { min = arr[x]; } } return min; } //outData()根据元素取出对应的脚标 //arr依然为数组,x为函数所需要获取的数据值 public static int outData(int[] arr,int a) { int len = arr.length; for(int x=0;x { if(arr[x]==a) { return x; } } //返回-1值是做此类操作时的惯例,当返回值为-1时,代表该值在数组中不存在 return -1; } //以下函数主要为了方便代码阅读 // // // //主函数 /*public static void main(String[] args) { System.out.println("well"); } */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] arr_1 = new int[]{3,5,1,6,13,4,9,7,12,19,8,11}; //为了程序系统之后的复用性,我们定义另外一个数组,将原数组复制,需要的时候可以还原数组状态。 int[] arrRe = arr_1; /*根据我们定义的几个函数,因为有可能需要输入元素data 而其它几个函数则不需要除数组外的其它变量,因此我们定义data并且不给其赋初始值 作为接受用户输入元素值,定义cho初始值为0来接收用户的选项 使用println输出来打印供用户阅读的界面 */ int cho = 0; int data; boolean x = true,y = true; for(;y==true;) { for(;x==true;x=false) { System.out.println("*******************************************************"); System.out.println("1.打印本数组元素"); System.out.println("2.用冒泡法对数组进行排序并打印结果"); System.out.println("3.用选择法对数组进行排序并打印结果"); System.out.println("4.打印数组中的最大值"); System.out.println("5.打印数组中的最小值"); System.out.println("6.查询元素的脚标"); System.out.println("7."); System.out.println("8.重新打印界面"); System.out.println("9.结束"); System.out.println("*******************************************************"); } //接受用户输入 cho = Integer.parseInt(sc.next()); switch (cho) { case 1: //打印数组,用已定义好的函数就可以完成 printData(arr_1); break; case 2: buSort(arr_1); break; case 3: seSort(arr_1); break; case 4: System.out.println(getMax(arr_1)); break; case 5: System.out.println(getMin(arr_1)); break; case 6: data = Integer.parseInt(sc.next()); System.out.println(outData(arr_1,data)); break; case 7: break; case 8: x=true; break; case 9: System.out.println("结束"); y=false; break; default: break; } } } } ——- android培训、java培训、期待与您交流! ———- JAVA自学系列
期待与您的交流