2013-10-24 28 views
0

我曾经有一些基本的Java技能,但自从我使用它们已经有几年了。我的程序做了我想要的一切,但我需要它运行该程序1000次,并保持总计rtCorrectrtIncorrect。这2个总数实际上是我最终需要的唯一东西(即我只需要最后注释掉的语句)。我不确定是否应该在我的主要方法中添加外部循环,或者如果我应该有一个单独的方法。我并不担心它很漂亮,所以我宁愿只用一个简单的循环在主要方法中完成。外部循环运行我的程序1000次并保持一个计数 - Java

import java.util.Random; 

public class Thesis { 

     public static void main (String [] args){ 

     int correct = 0; 
     int incorrect = 0; 
     int rtCorrect = 0; 
     int rtIncorrect = 0; 


      while(correct<20 && incorrect<20){ 
        Random rand = new Random(); 
        int pickedNumber = rand.nextInt(100); 
        if (pickedNumber<52){ 
         correct++; 
        } 
        else if (pickedNumber>51){ 
         incorrect++; 
        } 
        if (correct == 20){ 
         rtCorrect = rtCorrect + correct + incorrect; 
        } 
        else if (incorrect == 20){ 
         rtIncorrect = rtIncorrect + incorrect + correct; 
        } 
       } 

     } 
     System.out.printf("Correct: %d Incorrect: %d", correct, incorrect); 
     System.out.printf ("\nCorrect Response Time: %d\nIncorrect Response Time: %d", rtCorrect, rtIncorrect); 
     //System.out.printf ("\nTotal Correct RT's: %d \nTotal Incorrect RT's: %d", totalRTCorrect, totalRTIncorrect); 

    } 

} 

这是我曾尝试:

import java.util.Random; 

public class Thesis { 

     public static void main (String [] args){ 

     int correct = 0; 
     int incorrect = 0; 
     int rtCorrect = 0; 
     int rtIncorrect = 0; 


     for (int j = 0; j < 1000;j++){ 
      int totalRTIncorrect = 0; 
      int totalRTCorrect = 0; 

      while(correct<20 && incorrect<20){ 
        Random rand = new Random(); 
        int pickedNumber = rand.nextInt(100); 
        if (pickedNumber<52){ 
         correct++; 
        } 
        else if (pickedNumber>52){ 
         incorrect++; 
        } 
        if (correct == 20){ 
         rtCorrect = rtCorrect + correct + incorrect; 
        } 
        else if (incorrect == 20){ 
         rtIncorrect = rtIncorrect + incorrect + correct; 
        } 
       } 

       totalRTIncorrect = totalRTIncorrect + rtIncorrect; 
       totalRTCorrect = totalRTCorrect + rtCorrect; 
       System.out.printf ("\nTotal Correct RT's: %d \nTotal Incorrect RT's: %d", totalRTCorrect, totalRTIncorrect); 
     } 

import java.util.Random; 

public class Thesis { 

     public static void main (String [] args){ 

     int correct = 0; 
     int incorrect = 0; 
     int rtCorrect = 0; 
     int rtIncorrect = 0; 
     int totalRTIncorrect = 0; 
     int totalRTCorrect = 0; 

     for (int j = 0; j < 1000;j++){ 

      while(correct<20 && incorrect<20){ 
        Random rand = new Random(); 
        int pickedNumber = rand.nextInt(100); 
        if (pickedNumber<52){ 
         correct++; 
        } 
        else if (pickedNumber>52){ 
         incorrect++; 
        } 
        if (correct == 20){ 
         rtCorrect = rtCorrect + correct + incorrect; 
        } 
        else if (incorrect == 20){ 
         rtIncorrect = rtIncorrect + incorrect + correct; 
        } 
       } 

       totalRTIncorrect = totalRTIncorrect + rtIncorrect; 
       totalRTCorrect = totalRTCorrect + rtCorrect; 
     } 
     System.out.printf ("\nTotal Correct RT's: %d \nTotal Incorrect RT's: %d", totalRTCorrect, totalRTIncorrect); 
     //System.out.printf("Correct: %d Incorrect: %d", correct, incorrect); 
     //System.out.printf ("\nCorrect Response Time: %d\nIncorrect Response Time: %d", rtCorrect, rtIncorrect); 


    } 

} 

这些都不是给我什么,我需要一个。第一个只打印1000次程序的一个迭代,第二个给我一个RT为34000,或者任何RT在一次迭代中达到1000,另一个RT为0

+0

是的,您可以在外部循环中调用main()(通过编写另一个main()方法),也可以使用shell脚本调用jvm循环。如何为你的程序做这件事并不重要。 –

回答

2

要么。我会建议(因为你刚接触它)只是在你的代码中放一个for循环,当它工作的时候,如果你愿意,可以将它重构成单独的方法。

如果你重构它到一个新的方法,我建议做在你的main()

MyClass myclass = new MyClass(); 
myclass.runProgram(); 

,然后有runProgram()做的循环,而另一种方法你已经拥有的东西,并保持当前计数作为MyClass的成员变量。避免链接一个静态调用的负载,并且必须有返回值。

好...这部分是要解决下面的评论:

public static void main (String [] args){ 


      int totalRTIncorrect = 0; 
      int totalRTCorrect = 0; 

      for (int j = 0; j < 1000;j++){ 

       int correct = 0; 
       int incorrect = 0; 
       int rtCorrect = 0; 
       int rtIncorrect = 0; 

       while(correct<20 && incorrect<20){ 
        ... 
+0

我试图把它全部包装在for循环中。我尝试了两种不同的方式来做这件事,但都没有给我需要的数据(见编辑)。 – user2916352

+0

看看你的rtCorrect和rtIncorrect。他们是否应该在你的外部循环中声明?否则,当你看起来每个循环都要从头开始时,它们会增加每个循环的千循环次数。 – Aaron

+0

我可能是错的,因为不知道为什么你需要做1000次,但在你的原始代码中,你初始化所有的变量为0,然后做while循环。现在你引入了一个outer for循环,但你的变量只能初始化为0次。也许你只需要for循环之外的总数,剩下的就是他们以前的for循环。 – Aaron

0

在这种情况下,因为你知道你经常要代码回路,可以使用一个for loop。语法如下:

for(counter; termination condition; incremental step) 

因此,例如:

for(int x = 0; x < 1000; x++) 

在你的代码的情况下,你只要把这个包在你的方法如下:

for(int x =0; x < 1000; x++) { 

while(correct<20 && incorrect<20){ 
       Random rand = new Random(); 
       int pickedNumber = rand.nextInt(100); 
       if (pickedNumber<52){ 
        correct++; 
       } 
       else if (pickedNumber>51){ 
        incorrect++; 
       } 
       if (correct == 20){ 
        rtCorrect = rtCorrect + correct + incorrect; 
       } 
       else if (incorrect == 20){ 
        rtIncorrect = rtIncorrect + incorrect + correct; 
       } 
    } 
} 

然后当代码完成后,打印出你的值,然后你将获得1000个案的抽样数据,虽然在一个更科学的记录中,如果你正在为论文写这个,而你正在处理一个PRNG(Pse udo随机数发生器),那么你需要一个比这更大的采样框。 :)

+0

嗨,非常感谢您的帮助。我已经尽可能将我的方法封装在for循环中,但无法让它给我所需的信息。我的问题是,如果我在for循环中初始化了我想要的新变量(totalRtCorrect和totalRTIncorrect),然后尝试仅在for循环外一次打印总计,而不是每次都重新初始化为0,并且如果将语句移动到print他们进入for循环,然后它只打印出一个RT 1000次。我会尝试发布我的两个代码版本来澄清 – user2916352

+0

我编辑了我的问题,以显示我尝试的两件事 – user2916352