首先是使用ArrayList实现猜数字游戏,先看看最终实现(注:我输入的数据是特意输入的,你们也可尝试别的数字),本代码是优化后的.
import java.util.ArrayList;
import java.util.Collection;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
Collection<Integer> c3 = new ArrayList<>();
String regex="([0-9&\\s])+";
String input ;
String input2;
int c1=0;
int c2=0;
do {
System.out.println("请输入您第一个数据");
input = new Scanner(System.in).nextLine();
System.out.println("请输入您第二个数据");
input2 = new Scanner(System.in).nextLine();
if (input.matches(regex)) {
System.out.println("恭喜输入成功");
} else {
System.out.println("您输入有误");
continue;
}
if (input2.matches(regex)) {
System.out.println("恭喜您输入成功");
} else {
System.out.println("您输入数据有误");
continue;
}
String[] a = input.split(" ");
String[] b = input2.split(" ");
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
if (a[i].equals(b[j])) {
if (i == j) {
c3.add(j);
c1++;
break;
}
}
}
}
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
if (a[i].equals(b[j])) {
if (c3.contains(j)) {
continue;
} else {
c3.add(j);
c2++;
}
}
}
}
System.out.println(c1+"A"+c2+"B");
/**请输入您第一个数据
1 2 1 2 1
请输入您第二个数据
1 2 2 2 2
恭喜输入成功
恭喜您输入成功
3A2B
*/
}while(!input.matches(regex));
}
}
注:这是优化前的代码.在写的过程中,本案例出现了问题如下图所示,问题是在最后遍历到玩家输入的倒数第二个数字的时候,会直接break内层循环,所以最终不会统计到最后那个数字2.
import java.util.ArrayList;
import java.util.Collection;
import java.util.Scanner;
public class demo3 {
public static void main(String[] args) {
Collection<Integer> c3 = new ArrayList<>();
String regex="([0-9&\\s])+";
String input ;
String input2;
int c1=0;
int c2=0;
do {
System.out.println("请输入您第一个数据");
input = new Scanner(System.in).nextLine();
System.out.println("请输入您第二个数据");
input2 = new Scanner(System.in).nextLine();
if (input.matches(regex)) {
System.out.println("恭喜输入成功");
} else {
System.out.println("您输入有误");
continue;
}
if (input2.matches(regex)) {
System.out.println("恭喜您输入成功");
} else {
System.out.println("您输入数据有误");
continue;
}
String[] a = input.split(" ");
String[] b = input2.split(" ");
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
if (a[i].equals(b[j])) {
if (i == j) {
c3.add(j);
c1++;
break;
} if (c3.contains(j)) {
continue;
} else {
c3.add(j);
c2++;
}
}
}
}
System.out.println(c1+"A"+c2+"B");
/**请输入您第一个数据
1 2 1 2 1
请输入您第二个数据
1 2 2 2 2
恭喜输入成功
恭喜您输入成功
3A1B*/
}while(!input.matches(regex));
}
}
利用数组实现,同时也可以利用扩容来实现代码的优化
int[] a=Arrays.CopyOf(from,a.length+1);
//代码改进也可以选择用扩容来实现int[] a=Arrays.CopyOf(from,a.length+1);
import java.util.Scanner;
public class demo1 {
public static void main(String[] args) {
String regex="([0-9&\\s])+";
String input ;
String input2;
int c1=0;
int c2=0;
do{
System.out.println("请输入您第一个数据");
input=new Scanner(System.in).nextLine();
System.out.println("请输入您第二个数据");
input2=new Scanner(System.in).nextLine();
if(input.matches(regex)){
System.out.println("恭喜输入成功");
}
else {
System.out.println("您输入有误");continue;
}
if(input2.matches(regex)){
System.out.println("恭喜您输入成功");
}
else {
System.out.println("您输入数据有误");
continue;
}
String[] a=input.split(" ");
String[] b=input2.split(" ");
int[] c =new int[10];
int d=0;
for (int i = 1; i <a.length+1 ; i++) {
for(int j = 1;j<b.length+1;j++){
if (a[i-1].equals(b[j-1])) {
if (i == j) {
c[d] = j ;
d++;
c1++;
break;
} else {
int k = 0;
while (c[k] != j ) {
k++;
if(k>d){
break;
}
}
if (k>d) {
c2++;
c[d++] = j ;
}
}
}
}
}
System.out.println(c1+"A"+c2+"B");
/**请输入您第一个数据
1 2 3 4
请输入您第二个数据
1 3 2 4
恭喜输入成功
恭喜您输入成功
2A2B*/
}while(!input.matches(regex));
}
}