0

それぞれが 0 から 9 (両端を含む) までの 4 つの乱数を作成する宝くじプログラムを作成したいと考えています。このプログラムは、ユーザーに 4 つの数字を推測するように要求し、各ユーザーの推測を 4 つの乱数と比較して、当選メッセージを次のように表示します。

No matches  0 points
Any one digit matching  5 points
Any two digits matching 100 points
Any three digits matching   2,000 points
All four digits matching    1,000,000 points

プログラムは実行されますが、いくつかの論理エラーがあります。たとえば、出力は次のようになります。

Random numbers:2 3 3 4
Guess numbers: 1 2 5 7-->1 matching digit
Guess numbers: 3 5 7 3-->2 matching digits
Guess numbers: 3 3 3 1-->2 matching digits
Guess numbers: 3 3 3 3-->2 matching digits
public class Lottery
{           
    public static void main(String[] args) {
        final  int LIMIT=10; 
        int totalCount=0;
        int totalPoint;
        Random random=new Random(); //creating object of random class       
        Scanner input=new Scanner(System.in);//creating object of scanner class     
        //declaring two arrays
        int[] guessNumber= new int[4];
        int[] randomNumber=new int[4];       

 for(int i=0;i<4;i++)
   {            

    randomNumber[i]=random.nextInt(LIMIT);//returns value between 0 to 9(inclusive)     
   }     

for(int i=0;i<4;i++)
   {
    System.out.println("Enter your first guess number from 0 to 9:");
    guessNumber[i]=input.nextInt(); 
    } 



for (int i = 0; i < 4; i++)
   {
    for (int j = 0; j < 4; j++) 
      {

        if (randomNumber[i] == guessNumber[j])
           {
        ++totalCount; 
        break; 
        }
       }
   }        

   if(totalCount == 1)
     {
        totalPoint=5;
      }
   else if(totalCount == 2)
     {
        totalPoint=100;
      }
   else if(totalCount == 3)
      {
        totalPoint=2000;
      }
    else if(totalCount == 4)
       {
        totalPoint=100000;
       }    
    else
       {
       totalPoint=0;
       }


//dispalying points 
    System.out.println("You have earned " +totalPoint+ "points!!");
            }
      }
4

2 に答える 2

0

問題は、特定の数字を一致させたら、同じ値の複数の推測が一致としてカウントされないように、その数字を流通から削除する必要があることです。1 つの解決策は、 に ArrayList を使用しrandomNumber、一致した場合にそれらを削除することです。// declaring two arraysコメントとtotalPoint割り当ての間にあるものを次のように置き換えると、例に関して要求したことを行うようです。

int guess;
ArrayList<Integer> randomNumber = new ArrayList<Integer>();

for (int i = 0; i < 4; i++) {
   randomNumber.add(random.nextInt(LIMIT));
}

for (int i = 0; i < 4; i++) {
   System.out.print("Enter your guess number from 0 to 9: ");
   guess = input.nextInt();
   for (int j = 0; j < randomNumber.size(); ++j) {
      if (randomNumber.get(j) == guess) {
         ++totalCount;
         randomNumber.remove(j);
         break;
      }
   }
}
input.close();

推測を配列に格納して後で処理するのではなく、読み取りごとに処理することを選択したことに注意してください。

于 2013-09-27T21:23:54.570 に答える
0

全体的なロジックは問題ないようです。私の理解が正しければ、別の出力が必要なだけです。このようなものを出力に使用します。

String guessNumbers = "";
String randomNumbers = "";
for (int i = 0; i < 4; i++){
    randomNumbers += randomNumber[i]+" ";
    guessNumbers += guessNumber[i]+" ";
}
System.out.println("Random numbers: "+randomNumbers);
System.out.println("Guess numbers: "+guessNumbers+" --> # of matching digits "+totalCount);
System.out.println("You have earned " +totalPoint+ " points!!");

これは現在印刷されているものです:

Random numbers: 2 9 7 4 
Guess numbers: 7 4 5 2  --> # of matching digits 3
You have earned 2000 points!!
于 2013-09-27T20:27:01.053 に答える