Java基础语法之数组训练——数组常见算法与逻辑

1查找某个整数

定义一个长度为10的整形数组nums,循环输入10个整数,然后将输入一个整数,查找此整数,找到并输出下标,没找到给出提示

package day01_text1;

import java.util.Scanner;

public class demo03 {
/*定义一个长度为10的整形数组nums,循环输入10个整数,
 * 然后将输入一个整数,查找此整数,找到并输出下标,没找到给出提示
*/
	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		int[]nums= new int[10];
		System.out.println("请输入10个整数");
	    for(int i=0;i<nums.length;i++)
	    	nums[i]=input.nextInt();//用nums的下标i来接受输入的10个数
		   System.out.println("请输入要查找的数");
		  int chaZhaoDeShu =input.nextInt();
		  
		  for(int i=0;i<nums.length;i++) {
			 if(nums[i]==chaZhaoDeShu) {
	    	System.out.println("找到了,位置下标为"+i);
	    	 break;
	         }else if(i==nums.length-1)//如果比对到最后一次依然没有匹配的,才输出没有找到
	    	System.out.println("没有找到");
		  }
	   }
	}

代码执行截图:

找出数组的最值

定义一个整型数组长度为10的nums,循环输入10个数,求出他们的最大值,最小值

package day01_text1;

import java.util.Scanner;

public class demo03 {
/* 定义一个整型数组长度为10的nums
 * 循环输入10个数,求出他们的最大值,最小值
*/
	public static void main(String[] args) {
	Scanner input =new Scanner(System.in);
          int[] nums =new int[10];
          System.out.println("请输入10个数");
	for(int i=0;i<nums.length;i++) 
		  nums[i] =input.nextInt();
	
         int zuiDaZhi=nums[0];
         int zuiXiaoZhi=nums[0];
         
	for(int i=0;i<nums.length;i++) 
		zuiDaZhi=zuiDaZhi>nums[i]?zuiDaZhi:nums[i];
	    System.out.println("最大值为:"+zuiDaZhi);
	    
	for(int i=0;i<nums.length;i++) 
		zuiXiaoZhi=zuiXiaoZhi<nums[i]?zuiXiaoZhi:nums[i];
	System.out.println("最小值为:"+zuiXiaoZhi);
	}
 }

代码执行截图:

3 、两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并输出他们的数组下标

假设每种输入只会对应一个答案,不能重复利用这个数组中同样的元素。

示例:

给定nums = [2, 7, 11, 15], target = 9

因为nums[0] + nums[1] = 2 + 7 = 9

所以输出 0,1

package day01_text1;

public class demo03 {
/*两数之和 
*给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并输出他们的数组下标 
*假设每种输入只会对应一个答案,不能重复利用这个数组中同样的元素。 
*示例: 
*给定nums = [2, 7, 11, 15], target = 9 
*因为nums[0] + nums[1] = 2 + 7 = 9 
*所以输出 0,1
*/
	public static void main(String[] args) {
		int[] nums = {2,7,11,15};
		int target=26;//目标值
		boolean zhenJia =false;//用来判断是否找到,置初始值为false
		for(int i=0;i<nums.length;i++) {
			for(int j=i+1;j<nums.length;j++) {//j从i+1开始,就不会重复利用
				if(nums[i]+nums[j]==target) {
					System.out.println("找到了相对应的两个值,下标分别是"+i+"和"+j);
					zhenJia =true;//找到了则置为true
					break;
				 }
			 }
		  }
		if(!zhenJia)
			System.out.println("没有找到相对应的两个值");
	  }
  }

代码执行截图:

4、排序并查找

对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找元素6并输出排序后的下标

package day01_text1;

public class demo03 {
/*对数组{1,3,9,5,6,7,15,4,8}进行排序,
*然后使用二分查找元素6并输出排序后的下标。 
*/
	public static void main(String[] args) {
		int[] nums = {1,3,9,5,6,7,15,4,8};
		int temp;//创建一个第三方变量用来转换数值
		for(int i=0;i<nums.length-1;i++) {//外层循环-1
			for(int j=0;j<nums.length-i-1;j++) {//内层循环-i-1
				if(nums[j]>nums[j+1]){
					temp=nums[j];
					nums[j]=nums[j+1];
					nums[j+1]=temp;
				}
			}
		}
		System.out.println("排序后顺序为:");
		for(int i=0;i<nums.length;i++) {
			System.out.print("\t"+nums[i]);
		}
		int minIndex=0;//最小坐标
		int  maxIndex=nums.length-1;//最大坐标
		int centerIndex=(minIndex+maxIndex)/2;//中间坐标
		int chaZhao =6;//要查找的数字
		while(true) {
			if(nums[centerIndex]>chaZhao) {
				maxIndex=centerIndex-1;
			}
				else if(nums[centerIndex]<chaZhao) {
					minIndex=centerIndex+1;
				}else {
					break;
				}
			  if(minIndex>maxIndex) {
				  centerIndex=-1;
				  break;
			}
			  centerIndex=(minIndex+maxIndex)/2;
		}
		if(centerIndex==-1) {
			System.out.println("\n"+"没找到");
		}else
		System.out.println("\n"+"找到了,下标为"+centerIndex);
	  }
  }

代码执行截图:

5、移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12] 输出: [1,3,12,0,0]  

package day01_text1;

public class demo03 {
/*移动零 
*给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 
*示例: 
*输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 
*/
public static int[] hanShu(int[] nums) {
	 int index1=0;//定义两个下标索引
	 int index2=0;//同时指向第一个下标
	 while(index2<nums.length) {
		 if(nums[index2]!=0) {//如果索引2指向的!=0
			 nums[index1]=nums[index2];//则索引1=索引2
			 index1++;//两个索引同时指向下一个和下标
			 index2++;
		 }else {//如果索引2=0,则索引1不动,索引2指向下一个下标
			 index2++;
		 }
	     }
	 for(int i=index1;i<nums.length;i++) {
		 nums[i]=0;//从索引1开始到最后一个都置为0
	 }
	return nums;
}
	public static void main(String[] args) {
	 int[] nums= {0,1,0,3,12,8,2,0,};
	    int[] newNums=hanShu(nums);//调用函数
	 for(int i=0;i<newNums.length;i++) {
		 System.out.print("\t"+nums[i]);
	    }
     }
  }

代码执行结果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值