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