`
jaystefanie
  • 浏览: 8215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从“001”到“ZZZ”

阅读更多
最近有个需求:一个3位数的字符串默认值从"001",判断与数据库的的无序数据是否重复,如果重复就加1,再验证,"999"之后第一位变为字母即"A00"开始,依此类推一直到"ZZZ"。如:"001"、"999"、"A00"、"A99"、"B00"、"Z99"、"ZA0"、"ZZZ"。
于是写了一个方法。然后想测试下这个方法,便出现了一下代码:
public class NextValueDemo {

	public static void main(String[] args) {
		test("001", 0);
	}
	
	public static void test(String value, int count){
		count++;
		if("ZZZ".equals(value)){
			System.out.println(count);
			return;
		}else{
			value = nextValue(value);
			test(value, count);
		}
	}
	
	public static String nextValue(String value){
		if("999".equals(value)){
			return "A00";
		}else if("Z99".equals(value)){
			return "ZA0";
		}else if("ZZ9".equals(value)){
			return "AAA";
		}else if("ZZZ".equals(value)){
			return "已到最大值";
		}
		char[] c = value.toCharArray();
		for(int i=c.length-1;i>=0;i--){
			if('9' == c[i]){
				c[i] = '0';
			}else if('Z' == c[i]){
				c[i] = 'A';
			}else{
				c[i]++;
				break;
			}
		}
		return String.valueOf(c);
	}
}


得到:3885(有误)

然后想看看具体生成了哪些:
public class NextValueDemo {

	public static void main(String[] args) {
		test("001", 0);
	}
	
	public static void test(String value, int count){
		count++;
		if("ZZZ".equals(value)){
			System.out.println(count);
			return;
		}else{
			value = nextValue(value);
			System.out.print(value + " ");
			if(count % 100 == 0){
				System.out.println();
			}
			test(value, count);
		}
	}
	
	public static String nextValue(String value){
		if("999".equals(value)){
			return "A00";
		}else if("Z99".equals(value)){
			return "ZA0";
		}else if("ZZ9".equals(value)){
			return "AAA";
		}else if("ZZZ".equals(value)){
			return "已到最大值";
		}
		char[] c = value.toCharArray();
		for(int i=c.length-1;i>=0;i--){
			if('9' == c[i]){
				c[i] = '0';
			}else if('Z' == c[i]){
				c[i] = 'A';
			}else{
				c[i]++;
				break;
			}
		}
		return String.valueOf(c);
	}
}


在打印到"ZC1"后 报出了个异常:
Exception in thread "main" java.lang.StackOverflowError
	at java.nio.Buffer.<init>(Unknown Source)
	at java.nio.CharBuffer.<init>(Unknown Source)
	at java.nio.HeapCharBuffer.<init>(Unknown Source)
	at java.nio.CharBuffer.wrap(Unknown Source)
	at sun.nio.cs.StreamEncoder$CharsetSE.implWrite(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at java.io.OutputStreamWriter.write(Unknown Source)
	at java.io.BufferedWriter.flushBuffer(Unknown Source)
	at java.io.PrintStream.write(Unknown Source)
	at java.io.PrintStream.print(Unknown Source)
	at org.zhuang.NextValueDemo.test(NextValueDemo.java:16)
	at org.zhuang.NextValueDemo.test(NextValueDemo.java:20)
	at org.zhuang.NextValueDemo.test(NextValueDemo.java:20)
        ......


嗯。栈溢出。

嗯。为什么呢?

补充:
又想了想 似乎和+1无关
于是又写了个这个:
public class Test {

	public static void main(String[] args) {
		test(0);
	}
	
	public static void test(int count){
		if(6930 == count){
			System.out.println("\r\n~~~~~~~~~~~" + count);
		}else{
			count++;
			test(count);
		}
	}

}


6930是极限 6931即报栈溢出
分享到:
评论

相关推荐

    勘误如下:在两次希格斯-双重峰模型中,e + e-对撞机处ZZZ和ZWW顶点的CP违规

    这些符号错误会影响到图2的结果,因此对于理解CP违规效应及其测量至关重要。 #### 三、修正后的公式详解 1. **修正后的公式(3.4)**: \[ f_{Z}^{(4)}(p_1^2)=\frac{2\alpha}{\pi\sin^3(2\theta_W)}\frac{1}{M_Z...

    face人脸识别考勤系统 0.001

    "face人脸识别考勤系统 0.001"是一个基于Python开发的人脸识别考勤解决方案。这个系统利用了PyQT5库,一个强大的GUI工具包,来构建用户界面,使得员工可以通过人脸识别进行签到和签退,从而提高考勤管理的效率和准确...

    Electro-optic effects induced by the built-in electric field in a {001}-cut silicon crystal

    Pockel’s effect and optical rectification induced by the built-in electric field in the space charge region of a silicon surface layer are demonstrated in a {001}-cut high-resistance silicon ...

    TribonM2Hull项目初始化[归纳].pdf

    ### Tribon M2 Hull ...这包括了从项目配置文件的修改到船壳曲面设置的具体操作,以及创建本地工程和Hull初始化的过程。通过这种方式,可以确保项目启动时的各项设置符合需求,从而为后续的设计工作提供坚实的基础。

    集成测试文档

    - **ZZZ**:测试编号,范围在[001;999]内。 **示例:** - VT_INIT_NOM_000:初始化测试案例,采用不同的命名形式,通常是VTD中的首个测试案例。 - VT_7SNY_DKEY_ROB_003 - VT_87SMD_DIAG_DTC9301_NOM_001 - VT_DIAG...

    Optical rectification in surface layers of germanium

    Based on the experimental results, the ratios of the two effective second-order susceptibility components χzzz(2eff)/χzxx(2eff) for Ge(001), Ge(110), and Ge(111) surface layers can be estimated to ...

    ioBroker.contactid:防盗报警系统的联系人ID服务器

    ioBroker.contactid 测试: 警报系统用于... ZZZ –区域编号(001-999)。 这是触发警报的区域的编号。 C –校验和。安装与配置安装适配器适配器的配置: 选择IP地址和端口以侦听Conctact-ID请求。 注册您的用户名称,

    VHDL和FPGA实现四位数据比较器

    output &lt;= "001"; elsif (a = b) then output ; else output &lt;= "ZZZ"; -- 通常在实际应用中不会出现这种情况 end if; end process; g (2); m (1); l (0); end behave; ``` 这里的“`ZZZ`”表示不确定...

    ZY3-01星SC产品命名规范20160217.pdf

    根据提供的信息,我们可以了解到ZY3-01星SC产品的前期数据命名规则如下: **Zy3_01a_mynnavp_PPPRRR_YYYYMMDD_hhmmss_tttt_sasmac_chn_xxx_zzz_##########SUF** - **卫星标识**: `Zy3` 表示ZY3-01卫星。 - **01a**...

    沃尔玛WalmartEDI解决方案之824报文解读.docx

    TED*ZZZ*A5 NTE**FREEDESCRIPTION SE*19*0001 ``` 在此例中,**OTI**段表明了原报文856被拒绝(TR)。**TED**段提供了错误代码A5,而**NTE**段则给出了自由格式的描述信息,进一步解释了错误的原因。供应商需要根据...

    采购申请:屏幕增强 、 BAPI增强、创建采购申 请代码

    在这个例子中,MEREQ001 是创建的增强组件,用于扩展采购申请的屏幕。 2. **EBAN 表的 CI_EBANDB 结构**: EBAN 表是 SAP 采购订单中的临时数据表,CI_EBANDB 是其相关的内部表结构,用于存储屏幕字段的值。在这里...

Global site tag (gtag.js) - Google Analytics