gpt4 book ai didi

java - 改进数组检查方法

转载 作者:行者123 更新时间:2023-12-02 11:57:56 24 4
gpt4 key购买 nike

我有以下方法可以接收来自用户的数字数组和来自计算机的数字数组。然后它会检查用户输入的数字是否正确以及是否与计算机生成的数字处于正确的位置。例如,如果用户输入 2341 并且计算机编号为 2358,则结果数组将为 2200(正确位置的两个正确数字,两个错误的数字)。该方法工作得很好,我想知道如何使它更简洁并减少代码。


@Override
public String checkValues(String [] userInput, int [] computerNumber)
{
int flag = 0;
String [] validate = {""};
//Results can be put inside an int array
//int [] results = new int[4];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (Integer.parseInt(userInput[i]) == computerNumber[j]) {
if (i==j) {
validate[0]+="2";
flag++ ;
}
}
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (Integer.parseInt(userInput[i])==computerNumber[j] && (i!=j)) {
validate[0]+="1";
flag++;
}
}
}
switch(flag)
{
case 0: validate[0]+="0000"; break;
case 1: validate[0]+="000"; break;
case 2: validate[0]+="00"; break;
case 3: validate[0]+="0"; break;
}
return validate[0];
}

*****全类***

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package mastermind2;
import java.util.*;
import java.util.regex.*;
/**
*
* @author sarth
*/
public class MM implements MasterMindInterface {

String[][] grid = new String[10][4];

/*
* DrawGame Void method draws the grid
*/
@Override
public void drawGame()
{
System.out.println("------------------------");
System.out.println("| " + "X" + " | " + "X" + " | " + "X" + " | " + "X" + " |");
System.out.println("------------------------ -----");

for (int i = 0; i < grid.length; i++) {
System.out.println("| " + " | " + " | " + " | " + " |==| | |");

System.out.println("------------------------ -----");
}
}//End of Draw Game method

/*
* New Game method asks the user to type in 4 unique numbers
*Returns the numbers at the end
*@Param unserInput - an array where the 4 numbers entered by the user are stored
*/
@Override
public int [] newGame()
{
//Regular expression so only numbers are entered
String match = "[0-9]+";
Pattern p = Pattern.compile(match);
Scanner input = new Scanner(System.in);
int [] userInput = new int[4];
System.out.println("Please enter a unique 4 digit number with spaces in between");
try
{
String userNum = input.nextLine();

Matcher m = p.matcher(userNum);

if (m.find())
{
String [] tempNum = userNum.split(" ");
userInput[0] = Integer.parseInt(tempNum[0]);
userInput[1] = Integer.parseInt(tempNum[1]);
userInput[2] = Integer.parseInt(tempNum[2]);
userInput[3] = Integer.parseInt(tempNum[3]);
}
else
{
System.out.println("Invalid entry by user nothing was found");
}
}
catch(ArrayIndexOutOfBoundsException ex){}
return userInput;
}

/*
* Method generates 4 digit random number between 1 and 8
*/
@Override
public int [] generateCompNum()
{
int [] random = new int [4];
List<Integer>compNumber = new ArrayList<>(4);
//add numbers 1 to 8 in the list
for (int i = 1; i <= 8; i++)
{
compNumber.add(i);
}
//Shuffle the list
Collections.shuffle(compNumber);
//Put for random numbers into the secondary list after shuffle
for (int i = 0; i < random.length; i++)
{
random[i] = compNumber.get(i);
}

//System.out.println(Arrays.toString(random));
return random;
}

@Override
public String checkValues(String [] userInput, int [] computerNumber)
{
int flag = 0;
String [] validate = {""};
//Results can be put inside an int array
//int [] results = new int[4];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (Integer.parseInt(userInput[i]) == computerNumber[j]) {
if (i==j) {
validate[0]+="2";
flag++ ;
}
}
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (Integer.parseInt(userInput[i])==computerNumber[j] && (i!=j)) {
validate[0]+="1";
flag++;
}
}
}
switch(flag)
{
case 0: validate[0]+="0000"; break;
case 1: validate[0]+="000"; break;
case 2: validate[0]+="00"; break;
case 3: validate[0]+="0"; break;
}
return validate[0];
}//End of checkValue method

@Override
public void updateGame(String[][] resultArray,String[] clueArray) {
System.out.println(" ---------------");
System.out.println("| "+"X"+" | "+"X"+" | "+"X"+" | "+"X"+" | ");

for(int i=0;i<10;i++){
System.out.println(" ---------------"+" ----");
System.out.println("| "+resultArray[i][0]+" | "+resultArray[i][1]+" | "+resultArray[i][2]+" | "+resultArray[i][3]+" | "+"=="+"|"+clueArray[i]+"|");
}
System.out.println(" ---------------"+" ----");
System.out.println("");

}


public void finalUpdateGame(String [][] resultArray, String[] clueArray, int [] secretCodeArray)
{
System.out.println(" ---------------");
System.out.println("| "+secretCodeArray[0]+" | "+secretCodeArray[1]+" | "+secretCodeArray[2]+" | "+secretCodeArray[3]+" | ");

for(int i=0;i<10;i++){
System.out.println(" ---------------"+" ----");
System.out.println("| "+resultArray[i][0]+" | "+resultArray[i][1]+" | "+resultArray[i][2]+" | "+resultArray[i][3]+" | "+"=="+"|"+clueArray[i]+"|");
}

System.out.println(" ---------------"+" ----");

System.exit(0);
}
}

****主要方法*****

package mastermind2;

/**
*
* @author sarth
*/
public class MasterMind2 {


public static String [][] board = new String[10][4];
public static int [] tempComp;
public static String [] computerNum = new String[10];

public static void main(String[] args)
{
//Calling the MM class with all methods
MM mastermind = new MM();
//Initialize the board
for (int i = 0; i<10;i++) {
for (int j = 0; j< 4; j++) {
board[i][j] = "";
}
}

for (int i = 0; i < 10; i++)
{
computerNum[i]= " ";
}
//Call the draw game method
mastermind.drawGame();
tempComp = mastermind.generateCompNum();
//give user 10
for (int i = 9; i > 0; i--)
{
int temp[] = mastermind.newGame();
for(int j = 0; j< 4; j++)
{
board[i][j]+=temp[j];
}
computerNum[i] = mastermind.checkValues(board[i], tempComp);

if(Integer.parseInt(computerNum[i])==2222)
{
mastermind.finalUpdateGame(board, computerNum, tempComp);
}
else
{
mastermind.updateGame(board,computerNum);
}
}
}
}

还有一个界面,但我想我不必发布它:P

因此,用户有 10 次尝试猜测计算机生成的 4 位数字。计算机生成 1 到 8 之间唯一的 4 位数字。如果用户猜对了数字,则游戏结束,如果对数为 2351,用户输入 8743,则结果数组显示 0000,如果数字正确但位置错误显示 1111,如果它们都正确则结果数组显示 2222

最佳答案

问题是用户输入 2458 对 2358 可能应该返回 3033。
所以至少有一个首先必须计算匹配:

public String checkValues(String[] userInput, int[] computerNumber) {
int right = 0;
int wrong = 0;
for (int i = 0; i < computerNumber.length; ++i) {
if (i >= userInput.length) {
++wrong;
} else if (userInput[i].equals(computerNumber[i])) {
++right;
} else {
++wrong;
}
}
//Would have been nice: return new int[] { right, wrong };
String rightText = String.valueOf(right);
...
}

还有一点要做。

关于java - 改进数组检查方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47460084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com