最近有个需求:一个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即报栈溢出
分享到:
相关推荐
这些符号错误会影响到图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"是一个基于Python开发的人脸识别考勤解决方案。这个系统利用了PyQT5库,一个强大的GUI工具包,来构建用户界面,使得员工可以通过人脸识别进行签到和签退,从而提高考勤管理的效率和准确...
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 ...
### 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...
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 测试: 警报系统用于... ZZZ –区域编号(001-999)。 这是触发警报的区域的编号。 C –校验和。安装与配置安装适配器适配器的配置: 选择IP地址和端口以侦听Conctact-ID请求。 注册您的用户名称,
output <= "001"; elsif (a = b) then output ; else output <= "ZZZ"; -- 通常在实际应用中不会出现这种情况 end if; end process; g (2); m (1); l (0); end behave; ``` 这里的“`ZZZ`”表示不确定...
根据提供的信息,我们可以了解到ZY3-01星SC产品的前期数据命名规则如下: **Zy3_01a_mynnavp_PPPRRR_YYYYMMDD_hhmmss_tttt_sasmac_chn_xxx_zzz_##########SUF** - **卫星标识**: `Zy3` 表示ZY3-01卫星。 - **01a**...
TED*ZZZ*A5 NTE**FREEDESCRIPTION SE*19*0001 ``` 在此例中,**OTI**段表明了原报文856被拒绝(TR)。**TED**段提供了错误代码A5,而**NTE**段则给出了自由格式的描述信息,进一步解释了错误的原因。供应商需要根据...
在这个例子中,MEREQ001 是创建的增强组件,用于扩展采购申请的屏幕。 2. **EBAN 表的 CI_EBANDB 结构**: EBAN 表是 SAP 采购订单中的临时数据表,CI_EBANDB 是其相关的内部表结构,用于存储屏幕字段的值。在这里...