java實現(xiàn)猜數(shù)字游戲教程
一.游戲規(guī)則
輸入不重復(fù)的4位數(shù),輸出A:1,B:1,
其中A表示位置和數(shù)字都正確,B表示數(shù)字正確位置不正確
假如用戶輸入1234,隨機數(shù)為1405 輸出為A:1,B: 2,
用戶輸入1432,隨機數(shù)為1405 輸出為A:2,B: 2,
二.實現(xiàn)思路
1.獲取用戶輸入,判斷輸入是否正確,使用遞歸,如果不正確一直提示輸入直到正確為止
2.生成不重復(fù)的隨機數(shù),使用洗牌算法。
3.判斷數(shù)據(jù)是否正確,如果條件全部滿足直接跳出循環(huán)
三.代碼實現(xiàn)
import java.util.Random;
import java.util.Scanner;
public class game {
public static void main(String[] args) {
// i次數(shù),y位數(shù)
System.out.println(mathgame(6, 4));
}
// 用戶輸入
public static double panduan(int y) {
System.out.println("輸入" + y + "位整數(shù)數(shù)");
Scanner scanner = new Scanner(System.in);
double userinput = scanner.nextDouble();
if (userinput < (1 * Math.pow(10, y - 1)) || userinput > (1 * Math.pow(10, y) - 1)) {
System.out.println("輸入錯誤");
return panduan(y);
}
if (userinput % 1 != 0) {
System.out.println("請不要輸入小數(shù)");
return panduan(y);
}
return userinput;
}
// 不重復(fù)的隨機數(shù)
public static int rodem(int lan) {
Random r = new Random();
// 生成0-9隨機數(shù)
int arr[] = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
for (int i = 0; i < lan; i++) {
int rodem = r.nextInt(arr.length - i);
int temp = arr[lan - 1 - i];
arr[lan - 1 - i] = arr[rodem];
arr[rodem] = temp;
}
// 判斷第一項不能為0
if (arr[0] == 0) {
int temp = arr[0];
int m = arr[r.nextInt(lan-1)+1];
arr[0] = m;
arr[m] = temp;
}
int result = 0;
for (int i = 0; i < lan; i++) {
result = result * 10 + arr[i];
}
return result;
}
public static String mathgame(int i, int y) {
// 隨機數(shù)
String random = String.valueOf((int) rodem(y));
// a表示位置和數(shù)字都對
// b表示數(shù)字對順序不對
int a = 0;
int b = 0;
String result="失敗了";
for (int n = 0; n < i; n++) {
a = 0;
b = 0;
// 獲取用戶輸入
String userinput = String.valueOf((int) panduan(y));
// System.out.println(userinput + "用戶輸入的數(shù)據(jù)");
// System.out.println(random + "隨機數(shù)");
// 判斷a
for (int nft = 0; nft < y; nft++) {
// 處理數(shù)據(jù)判斷
if (random.charAt(nft) == userinput.charAt(nft)) {
a += 1;
}
// 判斷b
for (int nb = 0; nb < y; nb++) {
if (random.charAt(nft) == userinput.charAt(nb)) {
b += 1;
break;
}
}
}
System.out.println("A:" + a + "B:" + b);
if (a==y){
result="成功了";
break;
}
}
return result;
}
;
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于post請求內(nèi)容無法重復(fù)獲取的解決方法
這篇文章主要介紹了關(guān)于post請求內(nèi)容無法重復(fù)獲取的解決方法,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-03-03
MyBatis基礎(chǔ)支持DataSource實現(xiàn)源碼解析
這篇文章主要為大家介紹了MyBatis基礎(chǔ)支持DataSource實現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
Java把多個對象的list的數(shù)據(jù)合并的方法示例
在Java中合并多個List可以使用遍歷、Stream API或Apache Commons Collections,通過遍歷各個List并將元素添加到新List實現(xiàn)合并,Java 8提供了Stream API,使用Stream.of()和flatMap()可以簡潔地合并List,文中給出了多種方法示例,需要的朋友可以參考下2024-09-09
由@NotNull注解引出的關(guān)于Java空指針的控制
這是一些很容易學會的簡單技術(shù),但是對于代碼質(zhì)量和健壯性來說確實很重要。以我的經(jīng)驗,僅是第一個小技巧就已經(jīng)對改進代碼質(zhì)量具有很大的作用了2016-09-09

