帮忙想一下根据一个不断重复的序列号来获取到一个不重复的号码的逻辑,

n_e_e_d 2013-08-07 09:37:54

//任务批次ID(每次任务的ID)
private static volatile int smNo =0; //序列号,循环进位,满了之后再从0开始计位
//获取任务批次ID
public static synchronized int getsnMo() {


if(smNo==3)
{
smNo=0;
}
int a=smNo;
++smNo;
return a;
}



上面的代码是每次获取一个序列号!这个序列号徘徊在0-3之间!就是我每次获取到得值分别为:0,1,2,3,0,1,2,3,0,1,2,3,
现在想做一个判断就是当获取到得序列号重复的时候,我就让他在前一个值的基础上加1,即当获取到得值为3时,下次获取到得值就是4,不让他显示0了,后面的依次类推,也就是说我要的值是0,1,2,3,4,5,6,7,8,9,10,11直到最大值,请问该怎么弄呢?就是如下面的数字这样对应:请高手指导下:
0,1,2,3,0,1,2,3,0,1,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,...
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,...
...全文
266 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
n_e_e_d 2013-08-12
  • 打赏
  • 举报
回复
引用 22 楼 tcmakebest 的回复:
晕了,到底闹哪样
已经做出来,就是根据一个0,1,2,3,0,1,2,3...的循环然后获取0,1,2,3,4,5,6,...的数字
tcmakebest 2013-08-11
  • 打赏
  • 举报
回复
晕了,到底闹哪样
n_e_e_d 2013-08-08
  • 打赏
  • 举报
回复
引用 20 楼 soyestrellafortuna 的回复:
那就做个全局变量做计数器。每循环一次计数器加一。
恩,谢谢!
soyestrellafortuna 2013-08-08
  • 打赏
  • 举报
回复
那就做个全局变量做计数器。每循环一次计数器加一。
n_e_e_d 2013-08-08
  • 打赏
  • 举报
回复
引用 18 楼 soyestrellafortuna 的回复:
[quote=引用 17 楼 n_e_e_d 的回复:] [quote=引用 15 楼 soyestrellafortuna 的回复:] [quote=引用 13 楼 n_e_e_d 的回复:] [quote=引用 12 楼 soyestrellafortuna 的回复:] 我觉得应该还有一个计数器,计算smNo的循环的次数。否则你每一次都清零了。没法统计啊。
	public static void main(String[] args) {
		int a = 0;
		for (int y = 0; y <= 20; y++) {

			for (int i = 0; i <= 3; i++) {
				System.out.println("i = " + i);
				System.out.println("a =    " + (i + 4 * a));
				if (i == 3) {
					a++;
				}
			}
		}
	}
确实不错,高手啊! 不过我要是写一个方法,每次给这个方法里传一个值,这个值是固定的0,1,2,3,0,1,2,3,0...然后再在这个方法里返回一个值,这个值就是1,2,3....N,该怎么写呢![/quote] 我觉得这样实现不科学。只传0,1,2,3一个数字,无法判断当前是第几次调用了。因为第一次调用和第二次调用肯定结果应当是不一样的。[/quote] 在方法里判断假如传过来的是0的话,就用一个计数器计数,重复一次0就计数一次,可以吗?[/quote] 16楼的建议你可以考虑。另外你用计数机计数,你确保你传过来的数都是依照0,1,2,3这样的吗?如果是。可以尝试一下的。[/quote] 值时0,1,2,3,0,1,2,3....的顺序可以保证的
soyestrellafortuna 2013-08-08
  • 打赏
  • 举报
回复
引用 17 楼 n_e_e_d 的回复:
[quote=引用 15 楼 soyestrellafortuna 的回复:] [quote=引用 13 楼 n_e_e_d 的回复:] [quote=引用 12 楼 soyestrellafortuna 的回复:] 我觉得应该还有一个计数器,计算smNo的循环的次数。否则你每一次都清零了。没法统计啊。
	public static void main(String[] args) {
		int a = 0;
		for (int y = 0; y <= 20; y++) {

			for (int i = 0; i <= 3; i++) {
				System.out.println("i = " + i);
				System.out.println("a =    " + (i + 4 * a));
				if (i == 3) {
					a++;
				}
			}
		}
	}
确实不错,高手啊! 不过我要是写一个方法,每次给这个方法里传一个值,这个值是固定的0,1,2,3,0,1,2,3,0...然后再在这个方法里返回一个值,这个值就是1,2,3....N,该怎么写呢![/quote] 我觉得这样实现不科学。只传0,1,2,3一个数字,无法判断当前是第几次调用了。因为第一次调用和第二次调用肯定结果应当是不一样的。[/quote] 在方法里判断假如传过来的是0的话,就用一个计数器计数,重复一次0就计数一次,可以吗?[/quote] 16楼的建议你可以考虑。另外你用计数机计数,你确保你传过来的数都是依照0,1,2,3这样的吗?如果是。可以尝试一下的。
n_e_e_d 2013-08-08
  • 打赏
  • 举报
回复
引用 15 楼 soyestrellafortuna 的回复:
[quote=引用 13 楼 n_e_e_d 的回复:] [quote=引用 12 楼 soyestrellafortuna 的回复:] 我觉得应该还有一个计数器,计算smNo的循环的次数。否则你每一次都清零了。没法统计啊。
	public static void main(String[] args) {
		int a = 0;
		for (int y = 0; y <= 20; y++) {

			for (int i = 0; i <= 3; i++) {
				System.out.println("i = " + i);
				System.out.println("a =    " + (i + 4 * a));
				if (i == 3) {
					a++;
				}
			}
		}
	}
确实不错,高手啊! 不过我要是写一个方法,每次给这个方法里传一个值,这个值是固定的0,1,2,3,0,1,2,3,0...然后再在这个方法里返回一个值,这个值就是1,2,3....N,该怎么写呢![/quote] 我觉得这样实现不科学。只传0,1,2,3一个数字,无法判断当前是第几次调用了。因为第一次调用和第二次调用肯定结果应当是不一样的。[/quote] 在方法里判断假如传过来的是0的话,就用一个计数器计数,重复一次0就计数一次,可以吗?
n_e_e_d 2013-08-07
  • 打赏
  • 举报
回复
引用 4 楼 feier00 的回复:
LZ要的序列号就是1,2,3.。。N吗?还是你用这个代替了? 要是就是从1到N这么简单,干嘛还根据0,1,2,3换啊,直接每次+1就行了
0123,0123,重复的也要 0,1,2,3,4,5...N也要,该怎么弄呢!
跳蚤图 2013-08-07
  • 打赏
  • 举报
回复
LZ要的序列号就是1,2,3.。。N吗?还是你用这个代替了? 要是就是从1到N这么简单,干嘛还根据0,1,2,3换啊,直接每次+1就行了
MiceRice 2013-08-07
  • 打赏
  • 举报
回复
显然你只能用另一个计数器来保证得到不重复的。不管你是直接计数,还是记录清0的次数。
n_e_e_d 2013-08-07
  • 打赏
  • 举报
回复
上面的代码是要先获取0,1,2,3,0,1,2,3,这样的序列号使用,随后要根据这些序列号在转为1,2,3,4,5,6,7,8,9,这种形式!第一次获取的可重复的序列号要使用,后面还要根据这些序列号再转换撑不重复的使用!
引用 1 楼 ldh911 的回复:
把 if 注释掉不就完毕了? 或者你另外定义一个计数器。
MiceRice 2013-08-07
  • 打赏
  • 举报
回复
把 if 注释掉不就完毕了? 或者你另外定义一个计数器。
  • 打赏
  • 举报
回复
= = 有种东西叫全局变量。。方法每执行一次 就+1。。。孩子 加油。。
soyestrellafortuna 2013-08-07
  • 打赏
  • 举报
回复
引用 13 楼 n_e_e_d 的回复:
[quote=引用 12 楼 soyestrellafortuna 的回复:] 我觉得应该还有一个计数器,计算smNo的循环的次数。否则你每一次都清零了。没法统计啊。
	public static void main(String[] args) {
		int a = 0;
		for (int y = 0; y <= 20; y++) {

			for (int i = 0; i <= 3; i++) {
				System.out.println("i = " + i);
				System.out.println("a =    " + (i + 4 * a));
				if (i == 3) {
					a++;
				}
			}
		}
	}
确实不错,高手啊! 不过我要是写一个方法,每次给这个方法里传一个值,这个值是固定的0,1,2,3,0,1,2,3,0...然后再在这个方法里返回一个值,这个值就是1,2,3....N,该怎么写呢![/quote] 我觉得这样实现不科学。只传0,1,2,3一个数字,无法判断当前是第几次调用了。因为第一次调用和第二次调用肯定结果应当是不一样的。
n_e_e_d 2013-08-07
  • 打赏
  • 举报
回复
传入的值,就是getsmNo里获取的值!
n_e_e_d 2013-08-07
  • 打赏
  • 举报
回复
引用 12 楼 soyestrellafortuna 的回复:
我觉得应该还有一个计数器,计算smNo的循环的次数。否则你每一次都清零了。没法统计啊。
	public static void main(String[] args) {
		int a = 0;
		for (int y = 0; y <= 20; y++) {

			for (int i = 0; i <= 3; i++) {
				System.out.println("i = " + i);
				System.out.println("a =    " + (i + 4 * a));
				if (i == 3) {
					a++;
				}
			}
		}
	}
确实不错,高手啊! 不过我要是写一个方法,每次给这个方法里传一个值,这个值是固定的0,1,2,3,0,1,2,3,0...然后再在这个方法里返回一个值,这个值就是1,2,3....N,该怎么写呢!
soyestrellafortuna 2013-08-07
  • 打赏
  • 举报
回复
我觉得应该还有一个计数器,计算smNo的循环的次数。否则你每一次都清零了。没法统计啊。
	public static void main(String[] args) {
		int a = 0;
		for (int y = 0; y <= 20; y++) {

			for (int i = 0; i <= 3; i++) {
				System.out.println("i = " + i);
				System.out.println("a =    " + (i + 4 * a));
				if (i == 3) {
					a++;
				}
			}
		}
	}
n_e_e_d 2013-08-07
  • 打赏
  • 举报
回复
引用 10 楼 soyestrellafortuna 的回复:
不知道我理解的对不对
好像还不可以!...
soyestrellafortuna 2013-08-07
  • 打赏
  • 举报
回复
不知道我理解的对不对
soyestrellafortuna 2013-08-07
  • 打赏
  • 举报
回复
smNo每0,1,2,3算一次循环的话。 a=smNo+4*smNo的循环次数
加载更多回复(3)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧