java 2分钟_Java怎么判断他是否在2分钟内执行了任务?

展开全部

package test;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Timer;

import java.util.TimerTask;

/**

* Created by Administrator on 2017/8/22.

*/

public class mian {

static String player1 = "1号玩家";

static String player2 = "2号玩家";

static String attacker = player1;//默认player1先攻击

static String beAttacker = player2;//默认player2先被攻击

static boolean isTimeOver = false;//是否攻击超时

public static void main(String[] args) {

while (true) {

System.out.println(attacker + "攻击回合e69da5e887aa3231313335323631343130323136353331333363383436,是否发动攻击? 是:1 否:任意符号  回车确定.");

getSystemIn();

}

}

/**

* 获取控制台的命令;

*/

public static void getSystemIn() {

Timer timer = new Timer();

timerTest(timer);

boolean attacked = false;//是否成功攻击

try {

while (isTimeOver == false) {//是否超时

if (System.in.available() == 0) continue;//用户时候在控制台输出了命令

BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));

String s = sc.readLine();//读取用户命令

if ("1".equals(s)) {//攻击命令

attack(attacker, beAttacker);//调用攻击方法

attacked = true;//攻击成功

} else {

System.out.println(attacker + "主动放弃攻击,攻守转换!");

}

timer.cancel();//用户给出指令,取消定时器.

break;//跳出接受命令功能

}

if (attacked == false && isTimeOver == true) {//只有用户没有攻击,并且攻击超时时才打印

System.out.println(attacker + "攻击超时,攻守转换!");

}

isTimeOver = false;//将攻击超时标志重新置为flase

attackTransition(attacker, beAttacker);//攻守转换

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 攻守转换

*

* @param _attacker   攻击者

* @param _beAttacked 被攻击者

*/

public static void attackTransition(String _attacker, String _beAttacked) {

String cache = null;

cache = _attacker;

attacker = _beAttacked;

beAttacker = cache;

}

public static void timerTest(Timer timer) {

timer.schedule(new TimerTask() {

public void run() {

new Thread(new Runnable() {

@Override

public void run() {

try {

isTimeOver = true;//将超时标志置为true

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}).start();

}

}, 2000*60);// 设定指定的时间time,此处为60*2000毫秒(2分钟)

}

/**

* 攻击方法

*

* @param attacker   攻击者

* @param beAttacked 被攻击者

*/

public static void attack(String attacker, String beAttacked) {

System.out.println(attacker + "开始攻击" + beAttacked);

}

}

结果:

7cedb8d56bae3542961207b276487d4b.png

看你的逻辑挺好玩的.这里不要试图使用Scanner,因为Scanner会阻塞当前线程.除非有方法能够主动打破阻塞(我没找到).所以这里我自己写了个读取的小逻辑.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值