刚刚看到这题时,没懂问什么。仔细想了想,发现有点难度,这是第一次写的代码。
package com.Liti;
/**
* 创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同
* @author Eser Tired
*
*/
import java.util.*;
public class Test16 {
public static void main(String[] args){
int[] nums = new int[6];
//给每一个元素赋值
for(int i = 0; i < nums.length; i++){
nums[i] = (int) (Math.random()*30+1);
//判断是否赋过相同值
for(int j = 0; j < i; j++){
if(i == 0){
break;
}
if(nums[j]==nums[i]){
while(nums[j]!=nums[i]){
nums[i] = (int) (Math.random()*30+1);
}
}
}
}
System.out.println(Arrays.toString(nums));
}
}
但是我突然发现,这个算法是错的。。。
然后我进行修改
package com.Liti;
import java.util.Arrays;
/**
* 创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同
*
*/
public class Test16_2 {
public static void main(String[] args) {
int[] nums = new int[6];
//给每一个元素赋值
for(int i = 0; i < nums.length; i++){
nums[i] = (int) (Math.random()*30+1);
//判断前,假设没有相同值
boolean isFlag = true;
while (isFlag){
//判断是否赋过相同值
isFlag = false;
for (int j = 0; j < i; j++){
if (nums[j] == nums[i]){
isFlag = true;
nums[i] = (int) (Math.random()*30+1);
break;
}
}
}
}
System.out.println(Arrays.toString(nums));
}
}
这个算法保证了正确性。但是时间复杂度很高。
现在还没想出好的解决方法