iT邦幫忙

0

java 1A2B 重複數字檢測

  • 分享至 

  • xImage

大家好,我想請問您們java的問題,以下是關於1A2B的規則:
「請使用者輸入一個四個位數的正整數 作為答案,若四位數字中有數字重複,就要就要print出"數字不能重複"。 接著開始進行猜數字,每回合輸入一個四位數整數( 每一位數不可重複),根據輸入回答幾A幾B。 若玩家達成4A0B則印出”Bingo!”並結束遊戲, 若猜了十次仍未解出,則印出”Game over!”並結束遊 戲,若是過程中有出現重複數字,就要print出"數字不能重複"並且不入猜的次數。」
我目前是print出"數字不能重複"的那兩個部分沒有完成,剛剛試了很多次但是都失敗,所以想要請教您們,以下是我的程式。

package HelloWorld;

import java.util.Scanner;

public class Game {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("輸入猜數字遊戲答案(數字不重複)");
String ans = scanner.nextLine();
char [] num = ans.toCharArray();

     for(int i = 1;i<=10;i++)

{int a=0;int b=0;
System.out.println("開始進行遊戲,請輸入四位數字(數字不重複)");
Scanner scn= new Scanner(System.in);
String ans2=scn.nextLine();
char [] num2 = ans2.toCharArray();

if(num2[0]==num[0])
a=a+1;
if(num2[1]==num[1])
a=a+1;
if(num2[2]==num[2])
a=a+1;
if(num2[3]==num[3])
a=a+1;
if(num2[0]==num[1])
b=b+1;
if(num2[0]==num[2])
b=b+1;
if(num2[0]==num[3])
b=b+1;
if(num2[1]==num[0])
b=b+1;
if(num2[1]==num[2])
b=b+1;
if(num2[1]==num[3])
b=b+1;
if(num2[2]==num[0])
b=b+1;
if(num2[2]==num[1])
b=b+1;
if(num2[2]==num[3])
b=b+1;
if(num2[3]==num[0])
b=b+1;
if(num2[3]==num[1])
b=b+1;
if(num2[3]==num[2])
b=b+1;

if(a==4) {
System.out.println("共可猜10次,這是第"+i+"次");
System.out.println("Bingo!");
System.exit(0);
}
else {
if(i!=10) {
System.out.println("共可猜10次,這是第"+i+"次");
System.out.println(a+"A"+b+"B");
System.out.println("加油,請繼續猜");}
else {
System.out.println("共可猜10次,這是第"+i+"次");
System.out.println(a+"A"+b+"B");
}
}

}
System.out.println("Game Over!");
}

}

wiseguy iT邦超人 1 級 ‧ 2022-10-14 08:14:46 檢舉
還好AB遊戲只猜4個數字,不然你中間那坨比對,可能要長到天邊去了。
是不是改成這樣就好?
```
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if (num2[i]==num[j]){
if (i==j)
a++;
else
b++;
}
}
}
```
canrong iT邦新手 2 級 ‧ 2022-10-14 08:42:09 檢舉
```
String numbers = "1234";
if(!numbers.matches("[0-9]{4}"))
{
System.out.println("請輸入四位整數");
}
String[] stringArr = numbers.split("");
List<String> stringList = Arrays.asList(stringArr);
boolean isOk = stringList.stream().distinct().count() == 4;
if(!isOk)
{
System.out.println("數字不得重複");
}
```
canrong iT邦新手 2 級 ‧ 2022-10-14 08:53:02 檢舉
Stream是java8以上的 所以要看使用的版本
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-10-14 14:37:26
最佳解答

換個角度寫
1.把字串裡重覆的字元刪掉
2.跟原來字串做比較,相同表示沒有重覆,不同表示有重覆字元

其中第1點的程式如下
資料來源附在最後面

static String removeDuplicate(char str[], int n)
    {
        // Used as index in the modified string
        int index = 0;
 
        // Traverse through all characters
        for (int i = 0; i < n; i++)
        {
 
            // Check if str[i] is present before it
            int j;
            for (j = 0; j < i; j++)
            {
                if (str[i] == str[j])
                {
                    break;
                }
            }
 
            // If not present, then add it to
            // result.
            if (j == i)
            {
                str[index++] = str[i];
            }
        }
        return String.valueOf(Arrays.copyOf(str, index));
    }

資料來源

0
柳丁柚
iT邦新手 1 級 ‧ 2022-10-14 09:16:15

對java不熟所以大概講一下做法就好
首先複製輸入並排序
接著陣列內的元素與後一位比對
依序比完就能知道有沒有重複

或是土法煉鋼
四個字元分別存入不同變數
互相比較

我要發表回答

立即登入回答