最近有个需求:一个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即报栈溢出
分享到:
相关推荐
ZZZ
zzz4 interface for website working
ZZZ Top
angularjs 路由,angular web
zookepper 3.6.2
nagosnagios,over\.soul.zzznagios,over\.soul.zzznagios,over\.soul.zzz
zzz大学xxx教育集团组织架构、管理流程及人力资源发展方案设计2.pptx
ZZZ_Project_Keygen_v1.4_Downloadly.ir.rar`````````````````````````````````````````
zzz
zzz-git安装包下载
索引色,分别对图片两部分进行直方图规定化、直方图均衡化、伽马矫正,有注释
Z.EntityFramework.Extensions注册机 破解 内含使用截图
南京发展史zzz.ppt
zzz.py
c代码-ZZZ习题
基于安卓Android个人理财系统zzz.zip
zzz-IT运维技术支持及售后服务方案.docx
jquery-easyui后台成型模板示例 919zzz.com整理
河北省通用技术会考总复习zzz分解PPT课件.pptx
zzz-IT运维技术支持及售后服务及方案.docx