2013-09-27 86 views
0

我想创建一个抽奖程序,它创建四个随机数字,每个数字介于0和9之间(包括0和9)。这个程序要求用户猜测四个数字和每个用户猜测到4张随机数进行比较,并显示在赢得消息:java中的随机数字无法正常工作

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!!"); 
      } 
     } 
+5

它是如何“不正常工作? – Saggio

+0

试着正确地格式化你的代码(大括号,意向),它使得它很容易阅读。 – leonbloy

+0

有一个在线代码格式化程序 – 2013-09-27 20:24:45

回答

0

我看来像的问题是,一旦你匹配一个特定的数字,你应该从流通中被移除,使多种猜测相同的价值不算作匹配。一种解决方案是对randomNumber使用ArrayList,并在匹配时将其删除。如果您将您的// 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(); 

请注意,我选择来处理每一个猜测,因为它是阅读,而不是将它们存储在阵列中,以后再处理它们。

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!!