java数组笔记

数组的声明:

一维数组的声明方式   type[] varName;     或 type varName[];java声明数组中是不能指定长度的,例如 int a[5];//非法

数组对象的创建:

java中使用关键字 new来创建数组对象,格式,  数组名 = new 数组元素的类型[数组元素的个数]

元素为引用数据类型的数组中的每一个元素都需要实例化

数组的初始化(静态初始化,动态初始化)动态初始化:数组定义与为数组元素分配空间和赋值的操作分开进行

例如  int a[] ;

         a =  new int[4];

静态初始化:在定义数组的同时就为数组元素分配空间并赋值

例如:int a[] = new int[5];

数组元素的默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐初始化


public class Count3Quit
{            
	//数三退一的程序
	public static void main(String[] args){
	   //定义一个布尔型数组,里面放500个人,若都存在,则true,反之则为false
	   boolean[] arr = new boolean[500];
	   for(int i = 0;i < arr.length; i++){
	    arr[i] = true;
	   }
	   int leftCount = arr.length;//定义圈内剩余人数
	   int count = 0;//计时器,数三归0
	   int index = 0;//记录数数人的位置
	   while(leftCount > 1){
	     if(arr[index] == true){
	     count++;//数数
		 if(count == 3){
		 //当数到3的时候
		 arr[index]=false;//退出该人
		 leftCount--;//剩余人数减一
		 count=0;//计数器归0
		 }
	   }
	   index++;
	   

	   //判断index是否到了500,到了500要归0
	   if(index==500){
	   index=0;
	   }

	}
	//输出留下的最后一个人,
   for(int i=0;i<arr.length;i++){
      if(arr[i] == true){
	  System.out.print(i);
	  }
   }
}
}


public class Count3Quit2
{
	public static void main(String[] args){
		//定义一个500个小孩的圈
	KidCircle kc = new KidCircle(500);
	//定义计数器,数三退一
    int countNo =0;//记数
	//从第一个小孩开始数数
	Kid k = kc.first;
	while(kc.count>1){
	countNo++;
	if(countNo == 3){
	countNo = 0;
	kc.delete(k);
	}
	k = k.right;
	}
	System.out.println(kc.first.id);
	}
}

//定义对象(小孩)
class Kid
{
	int id;//定义编号
	Kid left;//左边的小孩
	Kid right;//右边的小孩
}

class KidCircle
{
	int count = 0 ;//定义圈内有多少个小孩
	Kid first, last;

	//定义构造方法
	KidCircle(int n){
		for(int i=0;i<n;i++){
		add();
		}
	}

//定义一个添加小孩的方法
void add(){
 Kid k = new Kid();
 k.id = count;
 if(count <= 0){
  first = k;
  last = k;
  k.left = k;
  k.right = k;
 }else{
   last.right = k;//最后一个小孩的右手等于新添加进来的小孩
    k.left = last;//新添加进来的小孩的左手等于最后一个小孩
	k.right = first;//新添加进来的小孩的右手等于第一个小孩
	first. left = k;//第一个小孩的左手等于新添加进来一个小孩
	last = k;//把最后一个小孩修改为新添加进来的 小孩
 }
 count++;//圈内人数加一
}

void delete(Kid  k){
	if(count <= 0){
	return ;
	}else if(count == 1){
	  first = last = null;
	}else{
	k.left .right = k.right;//k左边的小孩的右手拉着k右边的小孩
	k.right.left = k.left;//k右边小孩的左手拉着k左边的小孩
     //如果删除的是第一个小孩
	if(k == first){
      first = k.right;//第一个小孩是删除小孩的右边小孩
	}else if( k == last){
		//如果删除的是最后一个小孩
		last = k.left;
	}
	}
	
	count--;
}
		
}

public class DateSort
{
	public static void main(String[] args){
	Date[] date=new Date[5];
	date[0]=new Date(2006,5,4);
	date[1]=new Date(2006,7,4);
	date[2]=new Date(2008,5,4);
	date[3]=new Date(2004,5,9);
	date[4]=new Date(2004,5,4);
	
	//用冒泡法排序
	bubleSort(date);
	for(int i=0;i<date.length;i++){
	   System.out.println(date[i]);
	}
}
	//定义冒泡方法
public static Date[] bubleSort(Date[] d){
        int len=d.length;
		for(int i =len-1;i>=1;i--){
		    for(int j =0;j<=i-1;j++){
			  if(d[j].compare(d[j+1])>0){
			      Date temp=d[j];
				  d[j]=d[j+1];
				  d[j+1]=temp;
			  }
			}
		}
		return d;
	}
}	
class Date{
	int year,month,day;
Date(int y,int m,int d){
		  year=y;
		  month=m;
		  day=d;
}
public int compare(Date date){
	 return year > date.year ? 1
			   : year < date.year ? -1
			   : month > date.month ? 1
			   : month < date.month ? -1
			   : day > date.day ? 1
			   : day < date.day ? -1 : 0;
}
public String toString(){
	  return "year:month:day:"+year+"-"+month+"-"+day;
	}
}



//2,4,6,7,3,5,1,9,8
//程序目的:从命令行中将这些数字读入。将数字依次放入数组中,然后返回一个排序之后的数组(按升序排序)
public class SortArray{
   public static void main(String[] args ){
	   //从命令行读入数字
	   int[] arr=new int[args.length];
	   for(int i=0;i<args.length;i++){
	        arr[i]=Integer.parseInt(args[i]);
	   }
	   print(arr);
	   //对数组进行排序
	   selectionSort(arr);
	   print(arr);
   }
   //定义选择排序来排序数组的大小:2 4 6 7 3 5 1 9 8 算法思想:拿2和后面的所有数据进行比较,找到3比他小,则将3调到前面来,
 /*  private static void selectionSort(int[] arr){
	   for(int i=0;i<arr.length;i++){
	     for(int j=i+1;j<arr.length;j++){
		   if(arr[j]<arr[i]){
		      int temp=arr[i];
			  arr[i]=arr[j];
			  arr[j]=temp;
		   }
		 }
	   }
   }*/
    private static void print(int[] a){
	   for(int i=0;i<a.length;i++)
	     {
		   System.out.print(a[i]+" ");
	    }
	System.out.println();
    }
	//换一种排序算法:2 4 6 7 3 5 1 9 8 算法思想:拿2和后面所有数据进行比较,找到3比他下,然后拿3和后面的数据比较,找到比3小的数据1,将1和2调换顺序,若没有找到则将3和1调换顺序

      private static void selectionSort(int[] a){
	   int k,temp;
	   for(int i=0;i<a.length;i++){
	   k=i;
	     for(int j=k+1;j<a.length;j++){
		   if(a[j]<a[k]){
		   k=j;
		   }
		 }
		  if(k!=i){
		 //交换位置
		 temp=a[i];
		 a[i]=a[k];
		 a[k]=temp;
		 }
	   }
	  }
}

public class TestArray{
public static void main(String[] args){
 int[] a={3,6,7,1,35,34,5,4};
/* for(int i=0;i<a.length;i++){
  System.out.print(a[i]+" ");
   }
   for(int i=0;i<args.length;i++){
	   System.out.println(args[i]);
   }*/
   if(args.length<3){
	   System.out.println("java TestArray \"n1\" \"op\" \"n2\"");
	   System.exit(-1);
  }
  double d1=Double.parseDouble(args[0]);
  double d2=Double.parseDouble(args[2]);
  double d=0;
  if(args[1].equals("+")) {
	  d=d1+d2;
  }else if(args[1].equals("-")){
	  d=d1-d2;
   }else if(args[1].equals("x")){
	   d=d1*d2;
   }else if(args[1].equals("/")){
	   d=d1/d2;
	}else {
		  System.out.println("参数有错误");
		  System.exit(-1);
	  }
	  System.out.println(d);

  }
}


public class TestDateSort
{
	public static void main(String[] args){
	Date[] date = new Date[5];
	date[0] = new Date(2006,5,4);
	date[1] = new Date(2006,7,4);
	date[2] = new Date(2008,5,4);
	date[3] = new Date(2004,5,9);
	date[4] = new Date(2004,5,4);

	Date d = new Date(2006,7,4);
	//对date数组进行排序
	bubbleSort(date);
	for(int i =0; i<date.length;i++){
	System.out.println(date[i].toString());
	}
	System.out.println(binsearch(date,d));

	}

	public static void bubbleSort(Date[] date){
	int len = date.length;
	for(int i = len-1;i>=1;i--){
	 for(int j = 0;j<=i-1;j++){
	 if(date[j].compare(date[j+1])>0){
	 Date temp = date[j];
	 date[j] = date[j+1];
	 date[j+1] = temp;
	 }
	 }
	}
	}


	public static int binsearch(Date[] date,Date d){
		if(date.length==0) return -1;
		int startPos = 0;
		int endPos = date.length-1;
		int m = (startPos + endPos)/2;
		while(startPos<= endPos){
			if(d.compare(date[m])==0) return m;
			if(d.compare(date[m])>0){
			startPos = m+1;
			}
			if(d.compare(date[m])<0){
			endPos = m-1;
			}
			m = (startPos+endPos)/2;
		}
	return -1;
	}

}

class Date
{ int year,month,day;
    Date(int y,int m,int d){
	this.year = y;
	this.month = m;
	this.day = d;
	}

	public int compare(Date date){
	return year>date.year?1
		  :year<date.year?-1
		  :month>date.month?1
		  :month<date.month?-1
		  :day>date.day?1
		  :day<date.day?-1:0;
	}

	public String toString(Date date){
	   return "year-month-day"+date.year+"-"+date.month+"-"+date.day;
	}
}

public class TestSearch
{
	public static void main(String[] args){
	int a[] = {1,3,6,8,9,10,12,18,20,34};
	int i = 12;
	System.out.println(search(a,i));
	System.out.println(binarySearch(a,i));
	}

	public static int search(int[] a,int num){
	for(int i=0;i<a.length;i++){
		if(a[i] == num){
		return i;
		}
		
	}
	return -1;
	}

	public static int binarySearch(int[] a,int num){
         if(a.length ==0) return -1;
		 int startPos = 0;
		 int endPos = a.length-1;
		 //取中间值
		 int m= (startPos+endPos)/2;
		 //循环直到开始指针小于结束指针时停止
		 while(startPos<= endPos){
			 //如果中间位置值正好等于要找的数,返回中间数的下标值
			 if(num == a[m]) return m;
			 //如果要找的数大于中间位置的值,则在中间位置的右边找,
			 //将右边位置的下一个作为起始位置,重新二分,找中间数
			 if(num>a[m]){
			 startPos = m+1;
			 }
			 //如果要找的数小于中间位置的值,将结束位置减一,重新二分
			 if(num<a[m]){
			 endPos = m-1;
			 }
			 m=(startPos+endPos)/2;
		 }
return -1;


	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值