2022年4月23日 星期六

java:連續亂數取不重複整數值寫法練習

一、方法一 (利用陣列,並利用list.contains找出與陣列不同的數值)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class test {
public static void main(String[] args) {
//宣告listData為ArrayList
List<Integer> listData=new ArrayList<>();
//參數1為起始值,參數2為結束值,參數3為要取得的數目數
listData=uniqueNumber(1,15,10);
//System.out.println("增序排序後順序");
Collections.sort(listData);
//用forEach跑迴圈印出清單的數值,看看有沒有取到
listData.forEach((e) -> {
System.out.print("取得的值"+e+"\n");
});
}
//建立某範圍數字不重複取值函式,參數1為起始值,參數2為結束值,參數3為要取得的數目數
public static ArrayList<Integer> uniqueNumber(int startNumber,int endNumber,int counts){
//建立要存值的清單,名稱為number
List<Integer> number=new ArrayList<> ();
// 建立隨機取值的變數randomCount,預設為0
int randomCount=0;
//利用while迴圈決定跑幾次,當清單的長度小於你設定的值就,執行裡面的程式
while(number.size()<counts){
//設定亂數,範圍為由startNumber至endNumber間的數字
randomCount=(int)(Math.random()*(endNumber-startNumber))+startNumber;
//假如number清單中沒有包含此亂數值,就將新值加入新的清單
if(!number.contains(randomCount)){
number.add(randomCount);
};
}
//回傳清單

return (ArrayList<Integer>) number;
}
}

二、方法二  (利用hashmap key值不重複的原理排除重複值)

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

public class test4{
public static void main(String[] args) {
//宣告listData為ArrayList
List<Integer> listData=new ArrayList<Integer>();
//參數1為起始值,參數2為結束值,參數3為要取得的數目數
listData=uniqueNumber(1,15,10);
//用forEach跑迴圈印出清單的數值,看看有沒有取到
listData.forEach((e) -> {
System.out.print("取得的值"+e+"\n");
});
}
//建立某範圍數字不重複取值函式,參數1為起始值,參數2為結束值,參數3為要取得的數目數
public static List<Integer> uniqueNumber(int startNumber,int endNumber,int counts){
//創建HashMap為HashMap<Integer, Integer>
HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
//返回hashMap鍵值的 set
Set<Integer> keySet = hashMap.keySet();
int randomCount=0;
//當hashMap清單的長度小於你設定取得的數量,就執行裡面的程式
while(hashMap.size()<counts){
//取得變數
randomCount=(int)(Math.random()*(endNumber-startNumber))+startNumber;
//透過for決定要跑幾次迴圈,迴圈跑的次數是(你設定取得的數量-目前已有的haspmap數量)
//,因為主鍵值相同會覆蓋,所以不用排除,如果不夠就重跑上一層的while,直到滿足需要的次數
for(int i=0;i<(counts-hashMap.size());i++){
//把每次的隨機取出值加入,後面的值應該就是隨便都可以,這裡設定的是1.....到你要的次數。
hashMap.put(randomCount, i+hashMap.size());
}
}
//建立number清單,並將Haspmap主鍵存入
List<Integer> number = new ArrayList<Integer>(keySet);
//將清單利用Collections.sort排序
Collections.sort(number);
return number;
}
}

三、方法三(只透過for while 和if迴圈)

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class test1{
public static void main(String[] args) {
//宣告listData為ArrayList
List<Integer> listData=new ArrayList<Integer>();
//參數1為起始值,參數2為結束值,參數3為要取得的數目數
listData=uniqueNumber(1,15,10);
//用forEach跑迴圈印出清單的數值,看看有沒有取到
listData.forEach((e) -> {
System.out.print("取得的值"+e+"\n");
});
}
//建立某範圍數字不重複取值函式,參數1為起始值,參數2為結束值,參數3為要取得的數目數
public static List<Integer> uniqueNumber(int startNumber,int endNumber,int counts){

//宣告number為ArrayList清單

List<Integer> number=new ArrayList<>();

int randomCount=0;
//當hashMap清單的長度小於你設定取得的數量,就執行裡面的程式
while(number.size()<counts){
//設定一布林值變數,用以判斷是否要存入變數
Boolean check=true;
//取得變數
randomCount=(int)(Math.random()*(endNumber-startNumber))+startNumber;

//透過迴圈,將number清單目前有的資料取出
for(int i=0;i<number.size();i++){
//比對亂數和清單的所有值相同,如相同就執行裡面的程式
if(randomCount==number.get(i)){
//設定檢查值為否
check=false;
}
}
//假如check為真才存入
if(check==true){
number.add(randomCount);
}
}
//將清單值排序
Collections.sort(number);
return number;
}
}

沒有留言:

張貼留言