62,614
社区成员
发帖
与我相关
我的任务
分享
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args){
String[] result_array = randomNum();
Scanner scanner = new Scanner(System.in);
boolean loop = false;
do{
for(int j=0;j<8;j++){
System.out.println("请输入要猜的3位数字");
String str = scanner.nextLine();
int correct_number =0;//猜对的数字数量
int correct_position = 0;//猜对的位置数量
for(int k=0;k<3;k++){
if(str.contains(result_array[k])){
correct_number++;
if(str.indexOf(result_array[k])==k){
correct_position++;
}
}
}
System.out.println("有"+correct_number+"个数字正确");
System.out.println("有"+correct_position+"个位置正确");
if(correct_position==3){
System.out.println("很好,猜中了");
break;
}
}
System.out.println("再来一次? Y/N");
String str = scanner.nextLine();
if(str.equalsIgnoreCase("Y")){
loop = true;
result_array = randomNum();
}else{
loop = false;
}
}while(loop==true);
}
/**
* 随机生成目标数字
* @return
*/
public static String[] randomNum(){
List<String> list = new ArrayList<String>();
Random random = new Random();
for(int i=0;i<10;i++){
list.add(i+"");
}
String[] array = new String[3];
for(int i=0;i<array.length;i++){
array[i] = list.remove(random.nextInt(list.size()));
}
return array;
}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class NumberGuess {
static String guess;
static List<String> list = new ArrayList<String>();
public static void main(String[] args) {
String[] result_array = randomNum();
init();
guess = list.get(0);
boolean loop = false;
do {
for (int j = 0; j < 8; j++) {
String str = guess;
System.out.println(str);
int correct_number = 0;// 猜对的数字数量
int correct_position = 0;// 猜对的位置数量
for (int k = 0; k < 3; k++) {
if (str.contains(result_array[k])) {
correct_number++;
if (str.indexOf(result_array[k]) == k) {
correct_position++;
}
}
}
System.out.println("有" + correct_number + "个数字正确");
System.out.println("有" + correct_position + "个位置正确");
if (correct_position == 3) {
System.out.println("很好,猜中了");
break;
}
guess = guess(correct_number, correct_position);
}
// System.out.println("再来一次? Y/N");
// String str = scanner.nextLine();
String str = "N";// 现在这里只做一次
if (str.equalsIgnoreCase("Y")) {
loop = true;
result_array = randomNum();
} else {
loop = false;
}
} while (loop == true);
}
/**
* 初始化list,里面的值是从012-987之间的没有重复数字的值。
*/
private static void init() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i != j) {
for (int k = 0; k < 10; k++) {
if (k != i && k != j) {
list.add(String.valueOf(i) + String.valueOf(j)
+ String.valueOf(k));
}
}
}
}
}
}
/**
* 猜数字
* @param correctNumber
* @param correctPosition
* @return
*/
private static String guess(int correctNumber, int correctPosition) {
if(correctNumber == 0) {
Iterator<String> iterator = list.iterator();
List<String> temp = new ArrayList<String>();
while(iterator.hasNext()) {
String str = iterator.next();
if(containsCount(str, guess) == 0 && samePostionCount(str, guess) <= correctPosition){// && samePostionCount(str, guess) <= correctPosition) {
temp.add(str);
}
}
list = temp;
} else if(correctNumber == 1) {
Iterator<String> iterator = list.iterator();
List<String> temp = new ArrayList<String>();
while(iterator.hasNext()) {
String str = iterator.next();
if(containsCount(str, guess) == 1 && samePostionCount(str, guess) <= correctPosition){// && samePostionCount(str, guess) <= correctPosition) {
temp.add(str);
}
}
list = temp;
} else if(correctNumber == 2) {
Iterator<String> iterator = list.iterator();
List<String> temp = new ArrayList<String>();
while(iterator.hasNext()) {
String str = iterator.next();
if(containsCount(str, guess) == 2 && samePostionCount(str, guess) <= correctPosition){// && samePostionCount(str, guess) <= correctPosition) {
temp.add(str);
}
}
list = temp;
} else {
Iterator<String> iterator = list.iterator();
List<String> temp = new ArrayList<String>();
while(iterator.hasNext()) {
String str = iterator.next();
if(containsCount(str, guess) == 3 && samePostionCount(str, guess) <= correctPosition){// && samePostionCount(str, guess) <= correctPosition) {
temp.add(str);
}
}
list = temp;
}
guess = list.get(0);
return guess;
}
/**
* 计算字符串str1和str2共同包含的字符的个数。
* @param str1
* @param str2
* @return
*/
private static int containsCount(String str1, String str2) {
int count = 0;
for(int i=0; i<str2.length(); i++) {
if(str1.contains(String.valueOf(str2.charAt(i)))) {
count ++;
}
}
return count;
}
/**
* 计算字符串str1和str2对应位置字符相同的个数。
* @param str1
* @param str2
* @return
*/
private static int samePostionCount(String str1, String str2) {
int count = 0;
for(int i=0; i<str2.length(); i++) {
if(str1.charAt(i) == str2.charAt(i)) {
count ++;
}
}
return count;
}
/**
* 随机生成目标数字
*
* @return
*/
public static String[] randomNum() {
List<String> list = new ArrayList<String>();
Random random = new Random();
for (int i = 0; i < 10; i++) {
list.add(i + "");
}
String[] array = new String[3];
for (int i = 0; i < array.length; i++) {
array[i] = list.remove(random.nextInt(list.size()));
}
return array;
}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class NumberGuess {
static String guess;
static List<String> list = new ArrayList<String>();
public static void main(String[] args) {
String[] result_array = randomNum();
init();
guess = list.get(0);
boolean loop = false;
do {
for (int j = 0; j < 8; j++) {
String str = guess;
System.out.println(str);
int correct_number = 0;// 猜对的数字数量
int correct_position = 0;// 猜对的位置数量
for (int k = 0; k < 3; k++) {
if (str.contains(result_array[k])) {
correct_number++;
if (str.indexOf(result_array[k]) == k) {
correct_position++;
}
}
}
System.out.println("有" + correct_number + "个数字正确");
System.out.println("有" + correct_position + "个位置正确");
if (correct_position == 3) {
System.out.println("很好,猜中了");
break;
}
guess = guess(correct_number, correct_position);
}
// System.out.println("再来一次? Y/N");
// String str = scanner.nextLine();
String str = "N";// 现在这里只做一次
if (str.equalsIgnoreCase("Y")) {
loop = true;
result_array = randomNum();
} else {
loop = false;
}
} while (loop == true);
}
/**
* 初始化list,里面的值是从012-987之间的没有重复数字的值。
*/
private static void init() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i != j) {
for (int k = 0; k < 10; k++) {
if (k != i && k != j) {
list.add(String.valueOf(i) + String.valueOf(j)
+ String.valueOf(k));
}
}
}
}
}
}
/**
* 猜数字
* @param correctNumber
* @param correctPosition
* @return
*/
private static String guess(int correctNumber, int correctPosition) {
if(correctNumber == 0) {
Iterator<String> iterator = list.iterator();
List<String> temp = new ArrayList<String>();
while(iterator.hasNext()) {
String str = iterator.next();
if(containsCount(str, guess) == 0) {
temp.add(str);
}
}
list = temp;
} else if(correctNumber == 1) {
Iterator<String> iterator = list.iterator();
List<String> temp = new ArrayList<String>();
while(iterator.hasNext()) {
String str = iterator.next();
if(containsCount(str, guess) == 1) {
temp.add(str);
}
}
list = temp;
} else if(correctNumber == 2) {
Iterator<String> iterator = list.iterator();
List<String> temp = new ArrayList<String>();
while(iterator.hasNext()) {
String str = iterator.next();
if(containsCount(str, guess) == 2) {
temp.add(str);
}
}
list = temp;
} else {
Iterator<String> iterator = list.iterator();
List<String> temp = new ArrayList<String>();
while(iterator.hasNext()) {
String str = iterator.next();
if(containsCount(str, guess) == 3 && samePostionCount(str, guess) <= correctPosition) {
temp.add(str);
}
}
list = temp;
}
guess = list.get(0);
return guess;
}
/**
* 计算字符串str1和str2共同包含的字符的个数。
* @param str1
* @param str2
* @return
*/
private static int containsCount(String str1, String str2) {
int count = 0;
for(int i=0; i<str2.length(); i++) {
if(str1.contains(String.valueOf(str2.charAt(i)))) {
count ++;
}
}
return count;
}
/**
* 计算字符串str1和str2对应位置字符相同的个数。
* @param str1
* @param str2
* @return
*/
private static int samePostionCount(String str1, String str2) {
int count = 0;
for(int i=0; i<str2.length(); i++) {
if(str1.charAt(i) == str2.charAt(i)) {
count ++;
}
}
return count;
}
/**
* 随机生成目标数字
*
* @return
*/
public static String[] randomNum() {
List<String> list = new ArrayList<String>();
Random random = new Random();
for (int i = 0; i < 10; i++) {
list.add(i + "");
}
String[] array = new String[3];
for (int i = 0; i < array.length; i++) {
array[i] = list.remove(random.nextInt(list.size()));
}
return array;
}
}
if(str.indexOf(result_array[k])>=0) {
time1.add(result_array[k]);
}
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
static String[] guess = randomNum();
//结果中没有包含的数字
static List<String> time0 = new ArrayList<String>();
//结果有包含的数字
static List<String> time1 = new ArrayList<String>();
//所包含数字的全排列
static List<String> all = new ArrayList<String>();
//如果是第一次的话,就生成全排列,否则的话从all中选择
static boolean first = true;
public static void main(String[] args){
String[] result_array = randomNum();
Scanner scanner = new Scanner(System.in);
boolean loop = false;
do{
for(int j=0;j<8;j++){
String str = arrayToString(guess);
System.out.println(str);
int correct_number =0;//猜对的数字数量
int correct_position = 0;//猜对的位置数量
for(int k=0;k<3;k++){
if(str.contains(result_array[k])){
correct_number++;
if(str.indexOf(result_array[k])==k){
correct_position++;
}
if(str.indexOf(result_array[k])>=0) {
time1.add(result_array[k]);
}
}
}
System.out.println("有"+correct_number+"个数字正确");
System.out.println("有"+correct_position+"个位置正确");
if(correct_position==3){
System.out.println("很好,猜中了");
break;
}
guess = guess(correct_number);
}
//System.out.println("再来一次? Y/N");
//String str = scanner.nextLine();
String str = "N";//现在这里只做一次
if(str.equalsIgnoreCase("Y")){
loop = true;
result_array = randomNum();
}else{
loop = false;
}
}while(loop==true);
}
private static String[] guess(int correctNumber) {
List<String> list = new ArrayList<String>();
String[] array = new String[3];
Random random = new Random();
for(int i=0;i<10;i++){
list.add(i+"");
}
if(correctNumber == 0) {//如果没有猜对的数字,就把这次猜的这几个数加入time0,然后在后面移除。
for(String s : guess) {
time0.add(s);
}
} else if(correctNumber == 3) {//如果数字都猜对了,是第一次的话就全排列猜对的数字,否则的话就从全排列中随机选取一个结果返回,并从全排列中移除这个结果。
if(first) {
List<String> data = new ArrayList<String>();
for(String s : guess) {
data.add(s);
}
sort(data, new ArrayList<String>());
first = false;
} else {
all.remove(arrayToString(guess));
String str = all.remove(random.nextInt(all.size()));
for(int i=0; i<str.length(); i++) {
array[i] = String.valueOf(str.charAt(i));
}
return array;
}
} else {//如果猜对了一个或两个数字,就把这次猜错的数字加入time0,然后在后面移除。
for(String s : guess) {
if(!time1.contains(s)) {
time0.add(s);
}
}
}
for(String s : time0) {
list.remove(s);
}
for(int i=0;i<array.length;i++){
array[i] = list.remove(random.nextInt(list.size()));
}
return array;
}
/**
* 生成包含的数字的全排列
* @param datas
* @param target
*/
private static void sort(List<String> datas, List<String> target) {
if (target.size() == guess.length) {
StringBuffer sb = new StringBuffer();
for (String str : target)
sb.append(str);
all.add(sb.toString());
return;
}
for (int i = 0; i < datas.size(); i++) {
List<String> newDatas = new ArrayList<String>(datas);
List<String> newTarget = new ArrayList<String>(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}
/**
* 字符数组转换为字符串
* @param guess
* @return
*/
private static String arrayToString(String[] guess) {
StringBuffer sb = new StringBuffer();
for(String s : guess) {
sb.append(s);
}
return sb.toString();
}
/**
* 随机生成目标数字
* @return
*/
public static String[] randomNum(){
List<String> list = new ArrayList<String>();
Random random = new Random();
for(int i=0;i<10;i++){
list.add(i+"");
}
String[] array = new String[3];
for(int i=0;i<array.length;i++){
array[i] = list.remove(random.nextInt(list.size()));
}
return array;
}
}