难题!!!
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);
}
}
}
```