Java学习之数组练习

1、今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。请你通过编写程序,求出一组人中的队长是原来第几位同学。

package com.day05.homework5;
import java.util.Scanner;
public class Captain {
     
	public static void main(String[] args) {
     
		Scanner scanner = new Scanner(System.in);
		System.out.println("总共有几位同学:");
		int num = scanner.nextInt();
		//定义一个数组
		boolean[] student =new boolean[num];
		//数组长度
		int numbers = student.length;
		int count=0;//存储报数
		int index=0;//存储索引下标
		
		//全部排号为true
		for (int i = 0; i <student.length; i++) {
     
			student[i]=true;
		}
		/*
		 * 开始从1报数
		 * 如果该同学报数为3,那么报数count清为0,该学生排号为false,并退出圈子,人数numbers-1,继续下一轮报数
		 * 如果报数到最后一位学生,从头开始
		 */
		while (numbers>1) {
     
			//如果排号为true的,报数+1
			if (student[index] ==true) {
     
				count++;
			}	
			if (count==3) {
     
				count=0;
				student[index]=false;
				numbers--;
			}
			index++;
			if (index==num) {
     
				index=0;
			}
		}
		//循环遍历找到排号没有变为false的学生为队长
		for(int i=0;i<student.length;i++) {
     
			if(student[i]==true) {
     
				System.out.println("队长是第"+(i+1)+"位同学");
			}
		}
	}
}

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

package com.day05.homework5;
import java.util.Scanner;
public class Demo1 {
     
	public static void main(String[] args) {
     
		Scanner scanner =new Scanner(System.in);
		System.out.println("请输入10个整数:");
		int [] nums = new int[10];
		for (int i = 0; i < nums.length; ) {
     
			System.out.println("第"+(i+1)+"个数字:");
			if (scanner.hasNextInt()) {
     
				nums[i] = scanner.nextInt();
				i++;
			}else {
     
				System.out.println("请输入一个整数");
			}
		}
		int index=0;//存储下标
		System.out.println("输入你要找的数字");
		int num2 = scanner.nextInt();
		for (int i = 0; i < nums.length; i++) {
     
			if (num2==nums[i]) {
     
				index = i;
				//System.out.println("该数字的下标为:"+index);
				break;
			}else {
     
				index=-1; 
			}
		}
		if (index!=-1) {
     
			System.out.println("该数字的下标为:"+index);
		}else {
     
			System.out.println("数字不存在");
		}
	}
}
 

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

package com.day05.homework5;
import java.util.Scanner;
public class Demo2 {
     
	public static void main(String[] args) {
     
		int [] nums = new int[10];
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入10位数:");
		for (int i = 0; i < nums.length; i++) {
     
			System.out.println("请输入第"+(i+1)+"个数字");
			if (scanner.hasNextInt()) {
     
				nums[i]=scanner.nextInt();
			}else {
     
				System.out.println("请输入一个整数:");
			}	
		}
		int max=nums[0];
		int min=nums[0];
		for (int i = 1; i < nums.length; i++) {
     
			if (max<nums[i]) {
     
				max=nums[i];
			}
			if (min>nums[i]) {
     
				min=nums[i];
			}
		}
		System.out.println("最大值为:"+max);
		System.out.println("最小值为:"+min);
	}
}

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

package com.day05.homework5;
import java.util.Scanner;
public class Demo3 {
     
	public static void main(String[] args) {
     
		Scanner scanner =new Scanner(System.in);
		System.out.println("请输入4个整数:");
		int [] nums = new int[4];
		for (int i = 0; i < nums.length;) {
     
			System.out.println("第"+(i+1)+"个数字:");
			if (scanner.hasNextInt()) {
     
				nums[i] = scanner.nextInt();
				 i++;
			}else {
     
				System.out.println("请输入一个整数");
			}
		}
		System.out.println("请输入目标值:");
		int target=0;
		if (scanner.hasNextInt()) {
     
			target = scanner.nextInt();
			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("两个数相加等于目标值的下标分别为:");
						System.out.println(i+","+j);
						break;
					}
				}
			}
		}else {
     
			System.out.println("请正确输入一个整数");
		}				
	}
}

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

package com.day05.homework5;
import java.util.Scanner;
public class Demo4 {
     
	public static void main(String[] args) {
     
		int [] nums={
     1,3,9,5,6,7,15,4,8};
		int temp=0;
		/**
		 * 数组排序
		 */
		//外层循环轮数
		for (int i = 0; i < nums.length-1; i++) {
     
			//每轮比较次数
			for (int j = 0; j < nums.length-i-1; j++) {
     
				if (nums[j]>nums[j+1]) {
     
					temp =nums[j];
					nums[j]=nums[j+1];
					nums[j+1]=temp;
				}
			}
		}
		//遍历数组
		for (int i = 0; i < nums.length; i++) {
     
			System.out.print(nums[i]+",");
		}
		/**
		 * 使用二分法查询目标值
		 */
		System.out.println();
		System.out.println("请输入你要查询的数据:");
		Scanner scanner = new Scanner(System.in);
		//存储输入目标值
		int target=0;
		if (scanner.hasNextInt()) {
     
			target = scanner.nextInt();
		}else {
     
			System.out.println("请正确输入一个整数");
		}
		int minIndex=0;//最小下标
		int maxIndex=nums.length-1;//最大下标
		int centerIndex=(maxIndex+minIndex)/2;//中间下标
		while (true) {
     
			if (nums[centerIndex]>target) {
     
				maxIndex=centerIndex-1;
			}else if (nums[centerIndex]<target) {
     
				minIndex=centerIndex+1;
			}else {
     
				break;
			}
			if (minIndex>maxIndex) {
     
				centerIndex=-1;
			}
			centerIndex=(maxIndex+minIndex)/2;
		}
		if (centerIndex!=-1) {
     
			System.out.println("值的下标为:"+centerIndex);
		}
	}
}

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

package com.day05.homework5;
public class Demo5 {
     
	public static void main(String[] args) {
     
		int[] nums={
     0,34,0,3,12};
		int temp=0;
		/**
		 * 数组排序
		 */
		//外层循环轮数
		for (int i = 0; i < nums.length-1; i++) {
     
			//每轮比较次数
			for (int j = 0; j < nums.length-i-1; j++) {
     
				if (nums[j]>nums[j+1]) {
     
					temp =nums[j];
					nums[j]=nums[j+1];
					nums[j+1]=temp;
				}
			}
		}
		//遍历数组
        for(int i=0;i<nums.length;i++){
     
            System.out.print(nums[i]+" ");
        }
        System.out.println("");
        System.out.println("移动后如下:"  );
        for(int i=0;i<nums.length;i++){
     
        	if (nums[i]==0) {
     
				int j=i+1;//非0数字的下标
				while (j<nums.length) {
     
					if (nums[j]!=0) {
     
						nums[i]=nums[j];
						nums[j]=0;
						break;
					}else {
     
						j++;
					}
					if (j==nums.length) {
     
						break;
					}
				}
			}
            System.out.print(nums[i]+" ");
        }
	}
}

你可能感兴趣的:(java,Java练习,后端,java)