JAVA数组.续

在数组中查找某个整数

package com.kab.task;

import java.util.Scanner;

/*
 * 1、查找某个整数
定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。 然后将输
入一个整数,查找此整数,找到 输出下标, 没找到给出提示。
 */

public class Task_010104_002_01 {

	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();
		}
		System.out.println("请输入一个要查找的数字:");
		int findNum=input.nextInt();
		//查找
		for(int i=0;i<nums.length;i++) {
			if(findNum==nums[i]) {
				System.out.println("数组中要查找的元素,下标是:"+i);
				break;
			}else if(i==nums.length-1) {
				System.out.println("没有找到!");//从头比到尾,比到最后一次依然没有成功输出:没有找到
			}
		}

	}

}

求最大最小值

package com.kab.task;

import java.util.Scanner;

/**
 * 2、找出数组的最值
定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。输出数组
的最大值、最小值。

 * @author 23802
 *
 */

public class Task_010104_002_2 {

	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 max=nums[0];
		int min=nums[0];
		//循环比对
		for(int i=1;i<nums.length;i++) {
			if(nums[i]>max) {
				max=nums[i];
			}
			if(nums[i]<min) {
				min=nums[i];
			}
		}
		System.out.println("最大值是:"+max);
		System.out.println("最小值是:"+min);
	}

}

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

package com.kab.task;

import java.util.Scanner;

/*
 * 3、两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和
为目标值的那两个整数,并输出他们的数组下标
假设每种输入只会对应一个答案,不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以输出 0,1

 */

public class Task_010104_002_3 {

	public static void main(String[] args) {
		int[] nums={1,2,145,7,11,15};
		int target=10;
		boolean flag=false;//标识是否找到-默认false
		for(int i=0;i<nums.length;i++) {
			for(int j=i+1;j<nums.length;j++) {
				if(nums[i]+nums[j]==target) {
					System.out.println("找到了满足条件的两个数字是:"+nums[i]+"--"+nums[j]+";两个数字的下标是:"+i+"--"+j);
					flag=true;
					break;
				}
			}
		}
		if (!flag)
			System.out.println("没有找到满足条件的!");
	}

}

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

package com.kab.task;
/**
 * 4、排序并查找 
 * 对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找元素
6 并输出排序后的下标。
 * @author 23802
 *
 */
public class Task_010104_002_4 {

	public static void main(String[] args) {
		int[] nums = {1,3,9,5,6,7,15,4,8};
		int temporary;
		int num=6;
		int minIndex=0;
		int maxIndex=nums.length-1;
		int centerIndex= (minIndex+maxIndex)/2;
		boolean flag=false;
		//外层循环控制的是比较轮数
		//外层循环次数:length-1
		for(int i = 0;i<nums.length-1;i++) {
			//内层循环控制的是每轮比较的次数
			//从第i轮(i为0开始计算),比较次数为:length-i-1
			for(int j=0;j<nums.length-i-1;j++) {
				if(nums[j]>nums[j+1]) {
					//两两相比,满足移动条件时
					temporary=nums[j];
					nums[j]=nums[j+1] ;
					nums[j+1]=temporary;
				}
			}
		}
		System.out.println("排序后:");
		for(int i=0;i<nums.length;i++) {
			System.out.print(nums[i]+"\t");
		}
		//二分查找
		while(true) {
			if(minIndex>maxIndex) {
				break;
			}
			if(nums[centerIndex]>num) {
				//中间数据较大
				maxIndex=centerIndex-1;
			}else if(nums[centerIndex]<num) {
				maxIndex=centerIndex+1;
			}else {
				//找到了数据  数据位置:centerIndex
				System.out.println("\n找到了!下标是:"+centerIndex);
				flag=true;
				break;
			}
			//当边界发生变化时,需要更新中间下标
			centerIndex= (minIndex+maxIndex)/2;
		}
		if(!flag) {
			System.out.println("数组中没有该元素!");
		}

	}

}

5 5 、移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时
保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0]

package com.kab.task;

public class Task_010104_002_5 {
	public static int[] moveZero(int[] nums) {
		//定义两个下标索引
				int index1=0;
				int index2=0;
				while(index2<nums.length) {
					if(nums[index2]!=0) {
						nums[index1]=nums[index2];
						index1++;
						index2++;
					}else {//该位置数组元素为0,直接让index2索引往前走
						index2++;
					}
					
					}
				//index1跟index2相差的数字应该是补齐2的个数
				for(int i =index1;i<nums.length;i++) {
					nums[i]=0;
					
					} 
			return nums;	
				
	}

	public static void main(String[] args) {
		int[] nums= {0,1,0,3,12};
		//调用函数
		int[] newNums=moveZero(nums);
		//打印数组
		for(int i=0;i<newNums.length;i++) {
			System.out.println(newNums[i]);
		}

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值