数组好难!!!!

131 阅读3分钟

难题!!!

1. 向数组中添加非0数字:循环接受用户输入非0数字,并添加到数组中,重复元素不可以添加

 package com.java4;
 ​
 import java.util.Scanner;
 ​
 /**
  * @author : Mr.Shan
  * @version : 1.0
  * @Date : Created in 9:11 2022/6/18
  * bz :
  *  5、【附加】向数组中添加非0数字:循环接受用户输入非0数字,并添加到数组中,重复元素不可以添加,具体要求如下:
  *   4)在main方法中创建长度为10的数组,并全部初始化为0。
  *   5)main方法中接受用户从键盘输入一个数字
  *   a)如果是0,则提示错误并重新输入;
  *   b)如果不是0,则调用自定义方法find(),查找该数在数组中是否存在;
  *   i.如果存在,则提示该数已存在,不可以向数组中插入,然后询问用户是否继续输入下一个数
  *   ii.如果不存在,则调用自定义方法insert(),向数组中添加此数,返回添加的位置,添加成功询问用户是否继续输入下一个元素,直到用户不想再输入或者数组已满,则停止循环
  *   6)main方法中输出添加结束之后的数组
  *   7)int find(int arr[],int num):用于查找num在arr数组中是否存在,如果存在,返回该数在数组中的位置,若不存在,则返回10(二分法查找)
  *   8)int insert(int arr,int num): 用于向arr数组中添加num元素,在arr数组中查找第一个为0的元素,
  *   将num的值添加到该位置,并返回添加成功之后的位置,如果找不到为0的数字,则返回10,代表数组已满,不可以再插入。
  */
 public class arrDemo {
     public static void main(String[] args) {
         int c = 0, d = 0;   //用来接收find和insert方法的返回值
         int[] arr = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
         Scanner scanner = new Scanner(System.in);
 ​
 ​
         int num=0;
       a:  for (int i = 0; i <arr.length ; i++) {
             while (true) {    //输入非0的数,第一个数很难处理!!!!!!
                 System.out.println("请输入一个数:");
                 num = scanner.nextInt();
                 if (num == 0) {
                     System.out.println("重新输入:");
                 } else {
                     break;
                 }
             }
 ​
 ​
             c = find(arr, num);
             if (c == 10) {
                 System.out.println("该数在数组中不存在");
                 d = insert(arr, num);
 ​
                 System.out.println("添加成功,是否继续添加y/n");
                 String s = scanner.next();
                 if (s.equals("n")) {
                     break a;  //打断大循环
                 }
 ​
             } else {
                 System.out.println("该数在数组中存在,且索引为" + c);
                 i--;  //不加这句话,重复多少次,末尾就多几个0
                 System.out.println("是否继续添加y/n");
                 String s = scanner.next();
                 if (s.equals("n")) {
                     break a;  //打断大循环
                 }
 ​
             }
         }
 ​
 ​
 ​
 // ======================输出结果===================
         System.out.println("==================");
         for (int j = 0; j < arr.length; j++) {
 ​
             System.out.println(arr[j] + " ");
         }
 ​
     }
 ​
 //=============================================================
     //find方法-顺序查找
 //  用于查找num在arr数组中是否存在,如果存在,返回该数在数组中的位置,若不存在,则返回10
     public static int find(int arr[], int num) {
         int index = 10;
 ​
         for (int i = 0; i < arr.length; i++) { //顺序查找
             if (arr[i] == num) {
                 index = i;
                 break;
             }
 ​
         }
 ​
         return index;
     }
 ​
 //================================================================此路不通,二分法源代码
     //findTwo二分法查找
 //    public static int findTwo(int arr[],int num){
 //        int index=10;
 //
 //        int start = 0;
 //        int end = arr.length - 1;
 //        while (start <= end) {
 //            int mid = (start + end) / 2;
 //            if (num > arr[mid]) {
 //                start = mid + 1;
 //            } else if (num < arr[mid]) {
 //                end = mid - 1;
 //            }else {
 //                return mid;
 //            }
 //
 //        }
 //        return index;
 //    }
 ​
 ​
 ​
 ​
 //==========================================================
     //    insert方法
 //    用于向arr数组中添加num元素,在arr数组中查找第一个为0的元素,
 //             将num的值添加到该位置,并返回添加成功之后的位置,如果找不到为0的数字,则返回10,代表数组已满,不可以再插入。
     public static int insert(int arr[], int num) {
         int index2 = 10;
         for (int i = 0; i < arr.length; i++) { //顺序查找
             if (arr[i] == 0) {
                 index2 = i + 1;
                 arr[i] = num;
                 break;
 ​
             }
 ​
         }
 ​
         return index2;
     }
 }

经典题型 用嵌套循环实现:数组中的数据不重复

2. 向数组中加6个不重复的随机数(双色球)

   package com.java4;
   ​
   import java.util.Random;
   ​
   /**
    * @author : Mr.Shan
    * @version : 1.0
    * @Date : Created in 7:20 2022/6/18
    * bz :双色球
    */
   public class Demo { 
       public static void main(String[] args) {
           int[] arr = new int[6];
           Random rand = new Random(); //生成随机数
   ​
           for (int i = 0; i < arr.length; i++) {
               arr[i] = rand.nextInt(33) + 1;//生成(1-33)的随机数
               for (int j = 0; j < i; j++) {
                   if (arr[i] == arr[j]) {
                       i--; //这里是精髓!!!!
                   }
               }
           }
           //输出结果
           for (int i : arr)   
            {
               System.out.println(i);
           }
   ​
       }
   }
   ​
  ```