Java彩票游戏:在数组中查找序列

Java彩票游戏:在数组中查找序列,java,Java,如何查看前2、3、4或所有数字是否是另一个数组的一部分?此处“彩票”生成10个数字1-100,“数字”获取用户的输入5次。该程序将用户的5个数字与彩票的1-5、2-6等数字进行比较。我试图查看用户是否猜到彩票数组中的序列,但我无法将其打印出来如果用户一个接一个地猜到2、3、4或所有数字,“你猜了2个nrs”。我增加了一个计数器,还尝试了switch语句,但不起作用 // to check if user guessed a sequence int counter=0; for

如何查看前2、3、4或所有数字是否是另一个数组的一部分?此处“彩票”生成10个数字1-100,“数字”获取用户的输入5次。该程序将用户的5个数字与彩票的1-5、2-6等数字进行比较。我试图查看用户是否猜到彩票数组中的序列,但我无法将其打印出来如果用户一个接一个地猜到2、3、4或所有数字,“你猜了2个nrs”。我增加了一个计数器,还尝试了switch语句,但不起作用

// to check if user guessed a sequence
int counter=0;
        
for (int i = 0; i < lottery.length - 5; i++) {  // 1-5
    for (int j = 0; j < numbers.length; j++) {
        if (lottery[i] == numbers[j]) {
            counter++;
        }           
    }
}
            
for (int i = 1; i < lottery.length - 4 ; i++) { // 2-6
    for (int j = 0; j < numbers.length; j++) {
        if (lottery[i] == numbers[j]) {
            counter++;
        }
    }
}
            
for (int i = 2; i < lottery.length - 3 ; i++) { // 3 -7 numbers of lottery array
    for (int j = 0; j < numbers.length; j++) {
        if (lottery[i] == numbers[j]) {
            counter++;
        }
    }
}

for (int i = 3; i < lottery.length - 2; i++) { // 4 - 8  numbers of lottery array
    for (int j = 0; j < numbers.length; j++) {
        if (lottery[i] == numbers[j]) {
            counter++;
        }
    }
}

for (int i = 4; i < lottery.length - 1; i++) {   // 5 -9  numbers of lottery array
    for (int j = 0; j < numbers.length; j++) {
        if (lottery[i] == numbers[j]) {
            counter++;
        }
    }
}

for (int i = 5; i < lottery.length ; i++) { // 6 -10  numbers of lottery array
    for (int j = 0; j < numbers.length; j++) {
        if (lottery[i] == numbers[j]) {
            counter++;
        }
    }
}

for (int i = 0; i < numbers.length && i < 2; i++) {      // 2 sequence
     counter = numbers[i];
}
        
for (int i = 0; i < numbers.length && i < 3; i++) {      // 3 sequence
     counter= numbers[i];
}

for (int i =0; i < numbers.length && i < 4; i++) {       // 4 sequence
     counter = numbers[i];
}

for (int i = 0; i < numbers.length; i++) {                // 5 sequence
     counter = numbers[i];
}
            
switch (counter) {
    case 1:
        System.out.println("You guessed one sequence");
        break;
    case 2:
        System.out.println("You guessed two sequences");
        break;
    case 3:
        System.out.println("You guessed three sequences");
        break;
    case 4:
        System.out.println("You guessed four sequences");
        break;
}
//检查用户是否猜到序列
int计数器=0;
对于(inti=0;i<1.length-5;i++){//1-5
对于(int j=0;j
您的代码有点混乱,很可能是因为您没有使用函数,因为您想要实现的是一个很好的代码,让我们看看:

static boolean isSubArray(int A[], int B[], int n, int m) 
{ 
    // Two pointers to traverse the arrays 
    int i = 0, j = 0; 
  
    // Traverse both arrays simultaneously 
    while (i < n && j < m) 
    { 
        // If element matches 
        // increment both pointers 
        if (A[i] == B[j]) 
        { 
            i++; 
            j++; 
            // If array B is completely 
            // traversed 
            if (j == m) 
                return true; 
        } 
          
        // If not, 
        // increment i and reset j 
        else
        { 
            i = i - j + 1; 
            j = 0; 
        } 
    } 
    return false; 
} 
那么现在呢?你需要检查每个长度,更大的长度。当然,一个简单的解决方案如下(检查):

导入java.util.array;
公共静态T[]子数组(T[]数组,整数beg,整数end){
返回数组.copyOfRange(数组,beg,end+1);
}
公共静态布尔checkAll(int A[],int B[],int n,int m,int子集){
对于(int i=0;i+subset0;计数器--){
if(全选(D,抽签,D.长度,抽签.长度,计数器)){
break;//找到匹配项,可以结束
}
}
System.out.println(“您猜测的长度序列:%d”,计数器);
我想我有点误解了你们想要实现的目标,所以同样的方法也适用于彩票序列:

//subset is probably 5 for lottery
public static int checkAll(int A[], int B[], int n, int m, int subset_A , int subset_B){
  int total = 0;//we return this 
  for(int i=0;i+subset_B<m;i++){ //each subset in lottery
   for(int j=0;j+subset_A<n;j++){ //each subset in guesses
    if(isSubArray(subArray(A,j,j+subset),subArray(B,i,i+subset), n, m)){
      total++;
    }
  }
  return total;
}
int occurences = 0;
for(int counter=lottery.length; counter>0; counter--){
      occurences+=checkAll(D, lottery, D.length, lottery.length, counter, 5);
}
System.out.println("Your guessed sequence (and its parts) was present %d times", occurences );
//彩票的子集可能是5
公共静态int checkAll(int A[],int B[],int n,int m,int subset_A,int subset_B){
int total=0;//我们返回这个

对于(int i=0;i+subset_BIf如果我对我提供的答案有任何改进,请让我知道,取消接受不会给我反馈:)
import java.util.Arrays;

public static<T> T[] subArray(T[] array, int beg, int end) {
    return Arrays.copyOfRange(array, beg, end + 1);
}

public static boolean checkAll(int A[], int B[], int n, int m, int subset){
  for(int i=0;i+subset<n;i++){ //i+subset must be within range
    //checking the current subset, iterate them all
    if(isSubArray(subArray(A,i,i+subset), B, n, m)){
      return true; //if it is there return true!
    }
  }
  return false; //no luck!
}

int lottery[] = {1,2,3,4,5,6,7,8,9,10};
int D[] = {1,3,4,5,9}; 
counter = 0;
for(counter=D.length; counter>0; counter--){
    if(checkAll(D, lottery, D.length, lottery.length, counter)){
      break; //we found match, can end
    }
}
System.out.println("You guessed sequence of length: %d ", counter);
//subset is probably 5 for lottery
public static int checkAll(int A[], int B[], int n, int m, int subset_A , int subset_B){
  int total = 0;//we return this 
  for(int i=0;i+subset_B<m;i++){ //each subset in lottery
   for(int j=0;j+subset_A<n;j++){ //each subset in guesses
    if(isSubArray(subArray(A,j,j+subset),subArray(B,i,i+subset), n, m)){
      total++;
    }
  }
  return total;
}
int occurences = 0;
for(int counter=lottery.length; counter>0; counter--){
      occurences+=checkAll(D, lottery, D.length, lottery.length, counter, 5);
}
System.out.println("Your guessed sequence (and its parts) was present %d times", occurences );