猜数字游戏 使用了ArrayList 和 普通数组实现

这篇博客探讨了如何使用ArrayList和普通数组实现猜数字游戏,并重点讲述了在使用ArrayList时遇到的问题及其优化过程,包括代码优化前后的对比,特别指出在遍历过程中避免错过最后一个数字的处理方式。
摘要由CSDN通过智能技术生成

首先是使用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));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值