目錄
練習一:數字加密
練習二:數字解密
練習三:抽獎
解法一:
解法二:
練習四:雙色球
練習一:數字加密
需求:
某系統的數字密碼(大于0),比如1983,采用加密方式進行傳輸。
規則如下:
先得到每位數,然後每位數都加上5 , 再對10求餘,最後将所有數字反轉,得到一串新數。
舉例:
1 9 8 3
+5 6 14 13 8
%10 6 4 3 8
反轉 8 3 4 6
加密後的結果就是:8346
代碼示例:
public class Test6 {
public static void main(String[] args) {
/*
某系統的數字密碼(大于0)。比如1983,采用加密方式進行傳輸,
規則如下:
每位數加上5
再對10求餘,
最後将所有數字反轉,
得到一串新數。
*/
//分析:
//1.把整數裡面的每一位放到數組當中
int[] arr = {1, 9, 8, 3};
//2.加密
//每位數加上5
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 5;
}
//再對10求餘,
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] % 10;
}
//将所有數字反轉
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//8 3 4 6 --> 8346
//3.把數組裡面的每一個數字進行拼接,變成加密之後的結果
int number = 0;
for (int i = 0; i < arr.length; i++) {
number = number * 10 + arr[i];
}
System.out.println(number);
}
}
拓展:
public class Test7 {
public static void main(String[] args) {
//需求:
//把整數上的每一位都添加到數組當中
//反向推導
//1.計算出數組的長度
int number = 12345;
//定義一個變量臨時記錄number的值,就是為了第三步的時候再次使用
int temp = number;
//定義一個變量進行統計
int count = 0;
while(number != 0){
//每一次循環就去掉右邊的一個數字
number = number / 10;
//去掉一位計數器就自增一次。
count++;
}
//2.定義數組
//動态初始化
int[] arr = new int[count];
//3.把整數上的每一位都添加到數組當中
int index = arr.length -1;
while(temp != 0){//12345
//擷取temp裡面的每一位數組
int ge = temp % 10;
//再去掉右邊的那位數字
temp = temp / 10;
//把目前擷取到的個位添加到數組當中
arr[index] = ge;
index--;
}
//驗證結果 1 2 3 4 5
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
練習二:數字解密
把上一題加密之後的資料進行解密
代碼示例:
public class Test8 {
public static void main(String[] args) {
/*某系統的數字密碼(大于0)。比如1983,采用加密方式進行傳輸,
規則如下:
每位數加上5
再對10求餘,
最後将所有數字反轉,
得到一串新數。
按照以上規則進行解密:
比如1983加密之後變成8346,解密之後變成1983
*/
//1.定義數組記錄解密之後的結果
int[] arr = {8, 3, 4, 6};
//2.反轉
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//3.由于加密是通過對10取餘的方式進行擷取的
//是以在解密的時候就需要判斷,0~4之間+10 5~9數字不變
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 0 && arr[i] <= 4) {
arr[i] = arr[i] + 10;
}
}
//4.每一位減5
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] - 5;
}
//5.擷取數組裡面的每一位數字拼接成最終的結果
int number = 0;
for (int i = 0; i < arr.length; i++) {
number = number * 10 + arr[i];
}
System.out.println(number);
}
}
練習三:抽獎
需求:
一個大V直播抽獎,獎品是現金紅包,分别有{2, 588 , 888, 1000, 10000}五個獎金。請使用代碼模拟抽獎,列印出每個獎項,獎項的出現順序要随機且不重複。列印效果如下:(随機順序,不一定是下面的順序)
888元的獎金被抽出
588元的獎金被抽出
10000元的獎金被抽出
1000元的獎金被抽出
2元的獎金被抽出
解法一:
public class Test9 {
public static void main(String[] args) {
/* 需求:
一個大V直播抽獎,獎品是現金紅包,分别有{2, 588 , 888, 1000, 10000}五個獎金。
請使用代碼模拟抽獎,列印出每個獎項,獎項的出現順序要随機且不重複。
列印效果如下:(随機順序,不一定是下面的順序)
888元的獎金被抽出
588元的獎金被抽出
10000元的獎金被抽出
1000元的獎金被抽出
2元的獎金被抽出
*/
//分析:
//1.定義數組表示獎池
int[] arr = {2, 588, 888, 1000, 10000};
//2.定義新數組用于存儲抽獎的結果
int[] newArr = new int[arr.length];
//3.抽獎
Random r = new Random();
//因為有5個獎項,是以這裡要循環5次
for (int i = 0; i < 5; ) {
//擷取随機索引
int randomIndex = r.nextInt(arr.length);
//擷取獎項
int prize = arr[randomIndex];
//判斷目前的獎項是否存在,如果存在則重新抽取,如果不存在,就表示是有效獎項
boolean flag = contains(newArr, prize);
if(!flag){
//把目前抽取到的獎項添加到newArr當中
newArr[i] = prize;
//添加完畢之後,移動索引
i++;
}
}
//4.周遊newArr
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
//判斷prize在數組當中是否存在
//存在:true
//不存在:false
public static boolean contains(int[] arr,int prize){
for (int i = 0; i < arr.length; i++) {
if(arr[i] == prize){
return true;
}
}
return false;
}
}
解法二:
public class Test10 {
public static void main(String[] args) {
/* 需求:
一個大V直播抽獎,獎品是現金紅包,分别有{2, 588 , 888, 1000, 10000}五個獎金。
請使用代碼模拟抽獎,列印出每個獎項,獎項的出現順序要随機且不重複。
列印效果如下:(随機順序,不一定是下面的順序)
888元的獎金被抽出
588元的獎金被抽出
10000元的獎金被抽出
1000元的獎金被抽出
2元的獎金被抽出
*/
//1.把獎池裡面的所有獎項打亂順序
int[] arr = {2, 588, 888, 1000, 10000};
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
//擷取随機索引
int randomIndex = r.nextInt(arr.length);
//拿着i跟随機索引randomIndex上的值進行交換
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
//2.周遊獎池,從0索引開始擷取每一個獎項
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
練習四:雙色球
public class Test11 {
public static void main(String[] args) {
//1.生成中獎号碼
int[] arr = createNumber(); // 123456 7
System.out.println("=======================");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("=======================");
//2.使用者輸入彩票号碼(紅球 + 藍球)//654321
int[] userInputArr = userInputNumber();
//3.判斷使用者的中獎情況
//紅球 藍球
int redCount = 0;
int blueCount = 0;
//判斷紅球
for (int i = 0; i < userInputArr.length - 1; i++) {
int redNumber = userInputArr[i];
for (int j = 0; j < arr.length - 1; j++) {
if(redNumber == arr[j]){
redCount++;
//如果找到了,那麼後面的數字就沒有必要繼續比較了
//跳出内循環,繼續判斷下一個紅球号碼是否中獎
break;
}
}
}
//判斷藍球
int blueNumber = userInputArr[userInputArr.length-1];
if(blueNumber == arr[arr.length - 1]){
blueCount++;
}
//根據紅球的個數以及藍球的個數來判斷中獎情況
if(redCount == 6 && blueCount == 1){
System.out.println("恭喜你,中獎1000萬");
}else if(redCount == 6 && blueCount == 0){
System.out.println("恭喜你,中獎500萬");
}else if(redCount == 5 && blueCount == 1){
System.out.println("恭喜你,中獎3000");
}else if((redCount == 5 && blueCount == 0) || (redCount == 4 && blueCount == 1)){
System.out.println("恭喜你,中獎200");
}else if((redCount == 4 && blueCount == 0) || (redCount == 3 && blueCount == 1)){
System.out.println("恭喜你,中獎10");
}else if((redCount == 2 && blueCount == 1) || (redCount == 1 && blueCount == 1)|| (redCount == 0 && blueCount == 1)){
System.out.println("恭喜你,中獎5");
}else{
System.out.println("謝謝參與,謝謝惠顧");
}
}
public static int[] userInputNumber() {
//1.建立數組用于添加使用者購買的彩票号碼
//6個紅球 1個藍球 數組長度:7
int[] arr = new int[7];
//2.利用鍵盤錄入讓用輸入
Scanner sc = new Scanner(System.in);
//讓使用者輸入紅球号碼
for (int i = 0; i < 6; ) {
System.out.println("請輸入第" + (i + 1) + "個紅球号碼");
int redNumber = sc.nextInt();
//redNumber 在1~33 唯一不重複
if (redNumber >= 1 && redNumber <= 33) {
boolean flag = contains(arr, redNumber);
if (!flag) {
//不存在
//有效的,可以添加到數組當中
arr[i] = redNumber;
i++;
} else {
//存在
System.out.println("目前紅球号碼已經存在,請重新輸入");
}
} else {
System.out.println("目前紅球号碼超出範圍");
}
}
//讓使用者輸入籃球号碼
System.out.println("請輸入籃球号碼");
//1~16
while (true) {
int blueNumber = sc.nextInt();
if (blueNumber >= 1 && blueNumber <= 16) {
arr[arr.length - 1] = blueNumber;
break;
} else {
System.out.println("目前籃球号碼超出範圍");
}
}
return arr;
}
public static int[] createNumber() {
//1.建立數組用于添加中獎号碼
//6個紅球 1個藍球 數組長度:7
int[] arr = new int[7];
//2.随機生成号碼并添加到數組當中
//紅球:不能重複的 1 2 3 4 5 6
//藍球:可以跟紅球号碼重複 5
//生成紅球号碼并添加到數組當中
Random r = new Random();
for (int i = 0; i < 6; ) {
//擷取紅球号碼
int redNumber = r.nextInt(33) + 1;
boolean flag = contains(arr, redNumber);
if (!flag) {
//把紅球号碼添加到數組當中
arr[i] = redNumber;
i++;
}
}
//生成藍球号碼并添加到數組當中
int blueNumber = r.nextInt(16) + 1;
arr[arr.length - 1] = blueNumber;
return arr;
}
//用于判斷數組在數組中是否存在
public static boolean contains(int[] arr, int number) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == number) {
return true;
}
}
return false;
}
}