——- 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<x&mu>y;)
{
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<len;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<len-1,因为最后一位无需比较
for(int x=0;x<len-1;x++)
{
//第二层for循环,-x是因为每次比较的次数都越来越少,-1是为了防止数值越界
for(int y=0;y<len-x-1;y++)
{
if(arr[y]<arr[y+1])
{
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<len-1;x++)
{
for(int y=x+1;y<len;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<len;x++)
{
if(arr[x]>max)
{
max = arr[x];
}
}
return max;
}
//getMin()取最小值,本质上同上一个函数取最大值相同,只不过if语句的比较变为arr[x]<min而已
public static int getMin(int[] arr)
{
int min = arr[0],len=arr.length;
//for循环处x初始化值之所以是1,是因为max的初始化值是arr[0],没必要再同自己做一次比较
for(int x=1;x<len;x++)
{
if(arr[x]<min)
{
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<len;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自学系列
期待与您的交流