3

私は学校のプロジェクトに取り組んでいますが、これを理解できません。私は非常に初心者レベルの初心者です。

tickets[19][6]各チケットに 6 つの int を持つ 20 チケットという 2 次元配列があります。winner[5]これらの 20 個のチケットを、.txt ファイルから読み取った、6 つの数字を持つ通常の int 配列と比較しようとしています。

両方の配列は次のように記述されています。

public static int[] winner = new int[5]
public static int[][] tickets = new int[19][5]

私はこれに非常に慣れていないことを覚えておいてください。事前に助けていただければ幸いです。

編集これは、ユーザー入力を2次元配列に割り当てるために使用しているループです。全体を調べたときに、それが無限ループであることに気付きました。コードを書くことはもっと….まあ、書くことだと思っていました!これまでのところ、デバッグの芸術に似ているようです。

static void ticketNumberArray(){

    int number = 1;        // which of the six numbers you need from the ticket
    int ticketCount = 1;   // which ticket (out of 20) you are currently on

    while(ticketCount<21){ // sentinel controlled while loop,
                           // will continue until the twentieth ticket is entered
        System.out.println("Please type number " +number+ " of ticket number " +ticketCount+ ".");
                           //asks for the numbers of the ticket your currently on

        Scanner keyboard = new Scanner(System.in); // initiates a scanner variable

        int ticketNumber = keyboard.nextInt();     // assigns user input to the double variable ticketNumber
                                                   // and initializes as a double

        tickets[ticketCount-1][number-1]=ticketNumber;  // assigns user input into a 2-d array

        number++;           //Sentinel variable

        if(number==7){      //loop that controls the ticket count, every 6 numbers ='s one ticket
            ticketCount++;
            number=1;
        }
    }
}
4

2 に答える 2

3

まず[ ]、配列を宣言するときに入力する数値は、配列のサイズです。したがって、6つのアイテムで配列を作成するには、を置く必要があります[6]。インデックスには0->5の番号が付けられます。

配列内のチケットの「行」をループしてtickets、勝者の配列と比較するだけです。各行は個別のチケットです。2D配列の「列」は、チケットを構成する個々の番号になります。

Arrays.equalチケット内の個々の番号の順序が重要な場合は、ルイの提案を使用できます。0-1-2-3(つまり、勝者がである場合にのみチケットで勝つことができ0-1-2-3ます-ほとんどの宝くじはあなたが任意の組み合わせに勝つことを可能にします。)

for(int i=0; i < tickets.length; i++)
{
   int[] ticket = tickets[i];

   if(Arrays.equals(ticket, winner))
   {
      // This one is the winner

      // For efficiency you should probably stop looping
      break;
   }
}

編集:

多くのイントロ教授は、学生がAPIを使用するときにそれを嫌います。したがって、独自のequals関数を作成する必要があります。

private static boolean areEqual(int[] a, int[] b)
{ 
   if(a == null && b == null)
       return true;

   // Not equal if one is null and the other is not     
   if(a == null || b == null)
       return false;

   if(a.length != b.length)
       return false;

   // When we get here we have to check each element, one by one
   // Implementation left as exercise :-)
}
于 2012-04-23T00:38:13.257 に答える
1

チケットの整数は 5 つですか、それとも 6 つですか? あなたの質問は矛盾しています。

いずれにせよ、チケットの整数が一致するかどうかを確認したいだけの場合、つまり、まったく同じ値がまったく同じ順序で含まれているかどうかを確認したい場合、最も簡単な解決策はArrays.equals(int[], int[]).

于 2012-04-23T00:30:52.963 に答える