【问题标题】:Java - how to add + 1 to variable every x seconds while not not stopping the program?Java - 如何在不停止程序的情况下每 x 秒向变量添加 + 1?
【发布时间】:2016-09-02 09:28:51
【问题描述】:

我是一名新程序员,我正在用 java 制作控制台/文本策略游戏。

我的程序就像你在 while (true) switch case 中一样工作,如果你按 1 来收集木头,2 来收集石头,那么你有选项,就像这样,我想让你的木头、石头、食物自动收集我不知道如何使它欢迎任何帮助,

简化后的代码如下所示

  while (true) {
        Scanner in = new Scanner(System.in);
        String volbačlověk = in.nextLine();

        switch (volbačlověk) {
            case "1":
                wood = wood + 1;
                break;
            case "2":
                stone = stone + 1;
                break;
            case "3":
                food = food + 1;
                break;
         }
     }

基本上我想要做的是让案例 1、2、3 每 x 秒自动完成一次,所以它就像你自动收集这些材料一样,在 switch 案例中有构建选项。

由于我是编程新手,请具体说明我不会感到羞耻,我必须以某种方式学习它。

【问题讨论】:

  • 什么会自动收集?顺便说一句,wood = wood + 1 更常写成wood++
  • 使用Timer
  • 而既然这是每秒执行一次,你打算如何停止无限循环???
  • 我建议使用变量来存储玩家收集的每种商品的数量;然后编写方法,根据“自动收集”开始后经过的时间量计算商品的总金额,并加上“手动收集”的金额。
  • 实际上我使用了比 wood++ 更难的公式,我只是简化了它以明确我的代码是什么样的。

标签: java


【解决方案1】:

您可以使用Timer 类来实现资源的自动增加:

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            // Increase value here...
        }
    }, 0, 1000); // 1000 = 1 Sek.

另见此处: How to use Timer class to call a method, do something, reset timer, repeat?

【讨论】:

  • Timer 不再是真正值得称赞的方法 - 已经有很长时间了。使用ScheduleExecutorService
  • 我试过这个,在论坛的某个地方找到了它,但我的问题是我不能把我的变量,比如木头,石头放在这个区域,或者我把这个计时器放在了代码的错误部分?跨度>
【解决方案2】:

您不需要高级的东西来做到这一点。 如果你有就足够了:

  1. 在时间点 t0 的资源(木材、石头等)的数量
  2. 每种资源的生长因子,即每个时间单位的木材数量。
  3. 到t0的实际时间差

然后你可以计算那个时间点的资源。

【讨论】:

  • 你能告诉我更多关于这个的信息吗?因为我对包括时间在内的编程没有真正的经验
  • @VáclavStýblo 假设木材每单位时间增长 2 个单位。假设某个时间有 3 个单位的木材。 5 个时间单位之后是多少个单位? 13岁,肯定的。您无需每隔一秒增加一次“wood”变量即可知道这一点。
【解决方案3】:

好的,所以你想每隔 x 秒从 switch 运行一些随机代码而不提供输入,对吧?

好吧,由于您是一名新程序员,所以在您的代码中, 你可以通过生成一些随机数直到你的切换范围来做到这一点,

然后让程序的线程休眠一段时间,例如:

while(true){
   Random random = new Random();
   switch(random.nextInt(3)){
     case 1:
          ////////blah blah
     break;
     ......... more alike
   }
   Thread.sleep(x seconds here);
}

【讨论】:

  • 其实他是一个新程序员,如果我要谈论工人或更多线程,他可能会很严厉。
  • 谢谢,我已经知道如何使用 sleep 但这不是我想要的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 2014-05-31
  • 1970-01-01
相关资源
最近更新 更多