请教一个Java的“序列号生成类”的故障调试的解决方案.. java源代码产品序列号计算Java调试算法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package cjco;import java.util.Calendar;import java.util.Random;import java.util.Scanner; public class Makeatest { int myindex = 0; static int[] a = new int[37]; static char[] code = new char[36]; static char[] data = new char[36]; int random = 0; StringBuilder str0; static int len0,len1,len2,len3 = 0; String[] buffer,codebuffer = null; static int random0_4 = 0; static int random1_50 = 0; static int random1_50jumb5 = 0; int numbuffer = 0; String Localrelationship = ""; String LocalMyPlace = ""; int MyPlacelog = 0; String LocalMyFriPlace = ""; int MyFriPlacelog = 0; String Mymonth,Myday,Myyear = ""; String OurCustomerProductsInfo = ""; String Localrelationship0 = ""; String LocalRoleNum0 = ""; String LocalRoleNum1 = ""; String LocalMyplace = ""; String LocalMyFriplace = ""; static int month = 0 ; static int day = 0; public Makeatest(){ for(int i =0;i<100;i++){ String str = printlnSportCode(Localrelationship0,LocalRoleNum0,LocalRoleNum1,LocalMyPlace,LocalMyFriPlace); System.out.println(str); } } public void GetUserRightsCode(){ Random random = new Random(); a[0]=random.nextInt(85-72)+72; a[1]=65; a[2]=66; a[3]=67; //索引值为第4位的授权码的意义是:最高级别用户授权的含义. a[4] = 68; a[5]=45; a[6]=69; a[7]=70; a[8]=a[0]*2/3; a[9]=random.nextInt(57-48)+48; a[10] = a[1]+5; a[18]=5*(random.nextInt(27-22)+22)+a[1]; a[11]=45; a[12]=65; a[13]=random.nextInt(90-65)+65; a[14]=random.nextInt(90-65)+65; a[15]=random.nextInt(90-65)+65; a[16]=random.nextInt(57-48)+48; a[17]=45; a[18]=65; a[19]=random.nextInt(90-65)+65; a[20]=65; a[21]=random.nextInt(90-65)+65; a[22]=a[20]+2; a[23]=45; a[24]=random.nextInt(57-48)+48; a[25]=random.nextInt(90-65)+65; if(!(65<=a[19]&&a[19]<=74)){ a[26]=a[19]-10; }if(!(81<=a[19]&&a[19]<=90)){ a[26]=a[19]+10; } a[20]=a[22]-2; } public String No1stcreatfirst(String str){ char[] code0 = str.toCharArray(); code0[27]=(char)53; String str0 = String.valueOf(code0); str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第一级别教师授权码"+str0; StringBuilder str18 = new StringBuilder(str0); int sdoihf = str18.indexOf("码"); str18.insert(sdoihf+29, "曌"); Recv.mycustomerSyscodenum++; return str18.toString(); } public String No2ndcreatfirst(String str){ char[] code0 = str.toCharArray(); code0[27]=(char)52; String str0 = String.valueOf(code0); str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第二级别教师授权码"+str0; StringBuilder str18 = new StringBuilder(str0); int sdoihf = str18.indexOf("码"); str18.insert(sdoihf+29, "曌"); Recv.mycustomerSyscodenum++; return str18.toString(); } public String No3rdcreatfirst(String str){ char[] code0 = str.toCharArray(); code0[27]=(char)51; String str0 = String.valueOf(code0); str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第三级别教师授权码"+str0; StringBuilder str18 = new StringBuilder(str0); int sdoihf = str18.indexOf("码"); str18.insert(sdoihf+29, "曌"); Recv.mycustomerSyscodenum++; return str18.toString(); } public String No4thcreatfirst(String str){ char[] code0 = str.toCharArray(); code0[27]=(char)50; String str0 = String.valueOf(code0); str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第四级别教师授权码"+str0; StringBuilder str18 = new StringBuilder(str0); int sdoihf = str18.indexOf("码"); str18.insert(sdoihf+29, "曌"); Recv.mycustomerSyscodenum++; return str18.toString(); } public String No5thcreatfirst(String str){ char[] code0 = str.toCharArray(); code0[27]=(char)49; String str0 = String.valueOf(code0); str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第五级别教师授权码"+str0; StringBuilder str18 = new StringBuilder(str0); int sdoihf = str18.indexOf("码"); str18.insert(sdoihf+29, "曌"); Recv.mycustomerSyscodenum++; return str18.toString(); } public String NoHostcreatfirst(String str){ StringBuilder str10 = new StringBuilder(str); str10.insert(0, "关公的青龙偃月刀网络培训学校产品序列号"); int sdoihf = str10.indexOf("码"); str10.insert(sdoihf+29, "曌"); int len = len3 + len2+len1+len0; int confirmnum = day + month; String confirmnum0 = String.valueOf(confirmnum); if(confirmnum0.length()==2){ myindex= Integer.parseInt(String.valueOf(confirmnum0.charAt(1))); }else{ myindex= Integer.parseInt(String.valueOf(confirmnum0.charAt(0))); } int mynextindex = len; char[] buffer = new char[51]; buffer[12] = (char)(65+myindex); buffer[20] = (char)(65+mynextindex); String str20 = ""; str20 = new String(buffer); str20 = Recv.mycustomerSyscodenum+str20; Recv.mycustomerSyscodenum++; return str20; } //序列号防伪机制.:第242行.代码作用位置: public String GetOurCustomerProductfirstRights(String str) { String DateInfo="";//日期信息 String RoleInfo="";//角色信息 if(LocalRoleNum0.length()==1){ LocalRoleNum0 = "00"+LocalRoleNum0; } if(LocalRoleNum0.length()==2){ LocalRoleNum0 = "0" + LocalRoleNum0; } if(LocalRoleNum1.length()==1){ LocalRoleNum1 = "00" + LocalRoleNum1; } if(LocalRoleNum1.length()==2){ LocalRoleNum1 = "0" + LocalRoleNum1; } Calendar ca = Calendar.getInstance(); int year = ca.get(Calendar.YEAR); Myyear = String.valueOf(year).substring(2,4); month=ca.get(Calendar.MONTH);//获取月份 month++; day=ca.get(Calendar.DATE);//获取日 Mymonth = String.valueOf(month); if((len0 = Mymonth.length())==1) Mymonth = "0"+Mymonth; Myday = String.valueOf(day); if((len1 = Myday.length())==1) Myday = "0"+Myday; len2 = Myyear.length(); //序列号防伪机制.:3个值的和,所指向的索引位置,为三个值的变量的和的个位的值. len3 = len2+len1+len0; int myconfirmdata = Integer.parseInt(Myday.substring(1)); System.out.println("+++++++++++++"+myconfirmdata); DateInfo= Myyear+Mymonth+Myday ; if(month==12){ month = 1; year ++; } Myyear = String.valueOf(year).substring(2); Mymonth = String.valueOf(month); String ExpiryDateInfo = Myyear+String.valueOf(Integer.parseInt(Mymonth)+1)+Myday; RoleInfo=String.valueOf(Localrelationship)+LocalRoleNum0+LocalRoleNum1+LocalMyPlace+LocalMyFriPlace; String myconfirmcode = String.valueOf(len3); OurCustomerProductsInfo=DateInfo+RoleInfo+ExpiryDateInfo; StringBuilder str0 = new StringBuilder(OurCustomerProductsInfo); for(int i = 2;i<30;i=i+3){ str0.insert(i, '¥'); } str0.insert(myconfirmdata,myconfirmcode); String str1 = str0.toString(); buffer = str1.split("¥"); String MyOrderNum = ""; for(int i =0;i<10;i++){ codebuffer[i]= Recv.OurCoreWeapon.get(buffer[i]); MyOrderNum = MyOrderNum + codebuffer[i]; } return MyOrderNum; } //生成系统序列号. public String getMynextCodework(String relationship,String MyRole0Num,String MyRole1Num,String MyPlace,String MyFriPlace){ Localrelationship0 = relationship; LocalRoleNum0 = MyRole0Num; LocalRoleNum1 = MyRole1Num; LocalMyPlace = MyPlace; LocalMyFriplace = MyFriPlace; GetUserRightsCode(); Scanner Input = new Scanner(System.in); String MyData = Input.next(); data = MyData.toCharArray(); a[28]=data[0]; a[29]=data[1]; a[30]=data[2]; a[31]=data[3]; a[32]=data[4]; a[33]=data[5]; a[34]=data[6]; a[35]=data[7]; for(int i = 28;i<35;i++){ System.out.println(i+" "+a[i]); } a[1] = a[1]+a[28]; a[2]= a[2] + a[29]; String str = new String(); for(int j = 0;j<28;j++){ System.out.println(j+" "+a[j]); } for(int j = 0;j<36;j++){ code[j] = (char)a[j]; } str = new String(code); String str19 = GetOurCustomerProductfirstRights(str); StringBuilder str0 = new StringBuilder(str19); String str1 = NoHostcreatfirst(str0.toString()); return str1; } public String printlnSportCode(String relationship,String MyRole0Num,String MyRole1Num,String MyPlace,String MyFriPlace){ Localrelationship0 = relationship; LocalRoleNum0 = MyRole0Num; LocalRoleNum1 = MyRole1Num; LocalMyPlace = MyPlace; LocalMyFriplace = MyFriPlace; Scanner Input = new Scanner(System.in); String MyData = Input.next(); data = MyData.toCharArray(); a[28]=data[0]; a[29]=data[1]; a[30]=data[2]; a[31]=data[3]; a[32]=data[4]; a[33]=data[5]; a[34]=data[6]; a[35]=data[7]; for(int i = 28;i<35;i++){ System.out.println(i+" "+a[i]); } a[1] = a[1]+a[28]; a[2]= a[2] + a[29]; String[] str = new String[200]; for(int i = 0;i<200;i++){ GetUserRightsCode(); for(int j = 0;j<28;j++){ System.out.println(j+" "+a[j]); } for(int j = 0;j<36;j++){ code[j] = (char)a[j]; } str[i] = new String(code); str0 = new StringBuilder(str[i]); } return NoHostcreatfirst(str0.toString()); } public static void main(String[] args){ new Makeatest(); }} 现在我运行第二个类型,在console窗口中输入“今日时间”,格式为:“20140303”,之后,得到的序列号为: 希望得到高手的指导: 我的错误,出在什么地方? 为什么会有上面的结果出现? 如何修改? 我用debug模式跟了一遍,问题锁定在: 上述的第277行的printlnSportCode();方法,它能够在执行完毕后,返回值的第313行的代码,str0,是有值的,但是经过了本行的: } return NoHostcreatfirst(str0.toString()); } 代码:“NoHostcreatfirst(str0.toString());”方法的作用后,未能够返回一个值. 于是,我跟到这个方法体中进行查看: 我发现这个方法中的所有的局部作用域的变量的值,都没有得到赋值. 只有成员作用域的值得到了赋值. 希望大家能够相助: 为什么这个“NoHostcreatfirst()”方法,他的作用域中的语句以及变量,会有这个结果. 谢谢大家!! 1、首先你代码有 Scanner Input = new Scanner(System.in);那运行的时候你要在控制台输入信息才行。2、 str[i] = new String(code);你这样封装不行,指定一个字符编码,比如 str[i] = new String(code,"utf8"); 方名师姐,感谢您的点拨!! 方名师姐,如果我的这里的code[]数组,是一个char[]型的数组,那应该怎么办? 求方名师姐版主,再次相助!! 自顶一个!! 求CSDN中的高手相助!! 怎样可以灵活运用多态? 关于在MAP里面做合计的问题 smgp中的deliver包中的状态报告中的content解码 请问个CSS的基本问题 高手请帮看个错误源的问题....(通常是怎么引起的...刚刚学会给分) 请问怎么将一幅图片分成9个同样大小的部分??并显示出来 初学JAVA,请大侠们指教 java 接口中再定义接口 算怎么回事 两个对象怎样通信? Java爱好者联合起来,建立Java论坛 新手求大神帮助 关于SOCKET心跳连接问题,求教
import java.util.Random;
import java.util.Scanner; public class Makeatest {
int myindex = 0;
static int[] a = new int[37];
static char[] code = new char[36];
static char[] data = new char[36];
int random = 0;
StringBuilder str0;
static int len0,len1,len2,len3 = 0;
String[] buffer,codebuffer = null;
static int random0_4 = 0;
static int random1_50 = 0;
static int random1_50jumb5 = 0;
int numbuffer = 0;
String Localrelationship = "";
String LocalMyPlace = "";
int MyPlacelog = 0;
String LocalMyFriPlace = "";
int MyFriPlacelog = 0;
String Mymonth,Myday,Myyear = "";
String OurCustomerProductsInfo = "";
String Localrelationship0 = "";
String LocalRoleNum0 = "";
String LocalRoleNum1 = "";
String LocalMyplace = "";
String LocalMyFriplace = "";
static int month = 0 ;
static int day = 0;
public Makeatest(){
for(int i =0;i<100;i++){
String str = printlnSportCode(Localrelationship0,LocalRoleNum0,LocalRoleNum1,LocalMyPlace,LocalMyFriPlace);
System.out.println(str);
}
}
public void GetUserRightsCode(){
Random random = new Random();
a[0]=random.nextInt(85-72)+72;
a[1]=65;
a[2]=66;
a[3]=67;
//索引值为第4位的授权码的意义是:最高级别用户授权的含义.
a[4] = 68;
a[5]=45;
a[6]=69;
a[7]=70;
a[8]=a[0]*2/3;
a[9]=random.nextInt(57-48)+48;
a[10] = a[1]+5;
a[18]=5*(random.nextInt(27-22)+22)+a[1];
a[11]=45;
a[12]=65;
a[13]=random.nextInt(90-65)+65;
a[14]=random.nextInt(90-65)+65;
a[15]=random.nextInt(90-65)+65;
a[16]=random.nextInt(57-48)+48;
a[17]=45;
a[18]=65;
a[19]=random.nextInt(90-65)+65;
a[20]=65;
a[21]=random.nextInt(90-65)+65;
a[22]=a[20]+2;
a[23]=45;
a[24]=random.nextInt(57-48)+48;
a[25]=random.nextInt(90-65)+65;
if(!(65<=a[19]&&a[19]<=74)){
a[26]=a[19]-10;
}if(!(81<=a[19]&&a[19]<=90)){
a[26]=a[19]+10;
}
a[20]=a[22]-2;
}
public String No1stcreatfirst(String str){
char[] code0 = str.toCharArray();
code0[27]=(char)53;
String str0 = String.valueOf(code0);
str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第一级别教师授权码"+str0;
StringBuilder str18 = new StringBuilder(str0);
int sdoihf = str18.indexOf("码");
str18.insert(sdoihf+29, "曌");
Recv.mycustomerSyscodenum++;
return str18.toString();
}
public String No2ndcreatfirst(String str){
char[] code0 = str.toCharArray();
code0[27]=(char)52;
String str0 = String.valueOf(code0);
str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第二级别教师授权码"+str0;
StringBuilder str18 = new StringBuilder(str0);
int sdoihf = str18.indexOf("码");
str18.insert(sdoihf+29, "曌");
Recv.mycustomerSyscodenum++;
return str18.toString();
} public String No3rdcreatfirst(String str){
char[] code0 = str.toCharArray();
code0[27]=(char)51;
String str0 = String.valueOf(code0);
str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第三级别教师授权码"+str0;
StringBuilder str18 = new StringBuilder(str0);
int sdoihf = str18.indexOf("码");
str18.insert(sdoihf+29, "曌");
Recv.mycustomerSyscodenum++;
return str18.toString();
} public String No4thcreatfirst(String str){
char[] code0 = str.toCharArray();
code0[27]=(char)50;
String str0 = String.valueOf(code0);
str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第四级别教师授权码"+str0;
StringBuilder str18 = new StringBuilder(str0);
int sdoihf = str18.indexOf("码");
str18.insert(sdoihf+29, "曌");
Recv.mycustomerSyscodenum++;
return str18.toString();
}
public String No5thcreatfirst(String str){
char[] code0 = str.toCharArray();
code0[27]=(char)49;
String str0 = String.valueOf(code0);
str0 = String.valueOf(Recv.mycustomerSyscodenum)+"第五级别教师授权码"+str0;
StringBuilder str18 = new StringBuilder(str0);
int sdoihf = str18.indexOf("码");
str18.insert(sdoihf+29, "曌");
Recv.mycustomerSyscodenum++;
return str18.toString();
}
public String NoHostcreatfirst(String str){
StringBuilder str10 = new StringBuilder(str);
str10.insert(0, "关公的青龙偃月刀网络培训学校产品序列号");
int sdoihf = str10.indexOf("码");
str10.insert(sdoihf+29, "曌");
int len = len3 + len2+len1+len0;
int confirmnum = day + month;
String confirmnum0 = String.valueOf(confirmnum);
if(confirmnum0.length()==2){
myindex= Integer.parseInt(String.valueOf(confirmnum0.charAt(1)));
}else{
myindex= Integer.parseInt(String.valueOf(confirmnum0.charAt(0)));
}
int mynextindex = len;
char[] buffer = new char[51];
buffer[12] = (char)(65+myindex);
buffer[20] = (char)(65+mynextindex);
String str20 = "";
str20 = new String(buffer);
str20 = Recv.mycustomerSyscodenum+str20;
Recv.mycustomerSyscodenum++;
return str20;
} //序列号防伪机制.:第242行.代码作用位置:
public String GetOurCustomerProductfirstRights(String str) {
String DateInfo="";//日期信息
String RoleInfo="";//角色信息
if(LocalRoleNum0.length()==1){
LocalRoleNum0 = "00"+LocalRoleNum0;
} if(LocalRoleNum0.length()==2){
LocalRoleNum0 = "0" + LocalRoleNum0;
} if(LocalRoleNum1.length()==1){
LocalRoleNum1 = "00" + LocalRoleNum1;
}
if(LocalRoleNum1.length()==2){
LocalRoleNum1 = "0" + LocalRoleNum1;
}
Calendar ca = Calendar.getInstance();
int year = ca.get(Calendar.YEAR);
Myyear = String.valueOf(year).substring(2,4);
month=ca.get(Calendar.MONTH);//获取月份
month++;
day=ca.get(Calendar.DATE);//获取日
Mymonth = String.valueOf(month);
if((len0 = Mymonth.length())==1)
Mymonth = "0"+Mymonth;
Myday = String.valueOf(day);
if((len1 = Myday.length())==1)
Myday = "0"+Myday;
len2 = Myyear.length();
//序列号防伪机制.:3个值的和,所指向的索引位置,为三个值的变量的和的个位的值.
len3 = len2+len1+len0;
int myconfirmdata = Integer.parseInt(Myday.substring(1));
System.out.println("+++++++++++++"+myconfirmdata);
DateInfo= Myyear+Mymonth+Myday ;
if(month==12){
month = 1;
year ++;
}
Myyear = String.valueOf(year).substring(2);
Mymonth = String.valueOf(month);
String ExpiryDateInfo = Myyear+String.valueOf(Integer.parseInt(Mymonth)+1)+Myday;
RoleInfo=String.valueOf(Localrelationship)+LocalRoleNum0+LocalRoleNum1+LocalMyPlace+LocalMyFriPlace;
String myconfirmcode = String.valueOf(len3);
OurCustomerProductsInfo=DateInfo+RoleInfo+ExpiryDateInfo;
StringBuilder str0 = new StringBuilder(OurCustomerProductsInfo);
for(int i = 2;i<30;i=i+3){
str0.insert(i, '¥');
}
str0.insert(myconfirmdata,myconfirmcode);
String str1 = str0.toString();
buffer = str1.split("¥");
String MyOrderNum = "";
for(int i =0;i<10;i++){
codebuffer[i]= Recv.OurCoreWeapon.get(buffer[i]);
MyOrderNum = MyOrderNum + codebuffer[i];
}
return MyOrderNum;
}
//生成系统序列号.
public String getMynextCodework(String relationship,String MyRole0Num,String MyRole1Num,String MyPlace,String MyFriPlace){
Localrelationship0 = relationship;
LocalRoleNum0 = MyRole0Num;
LocalRoleNum1 = MyRole1Num;
LocalMyPlace = MyPlace;
LocalMyFriplace = MyFriPlace;
GetUserRightsCode();
Scanner Input = new Scanner(System.in);
String MyData = Input.next();
data = MyData.toCharArray();
a[28]=data[0];
a[29]=data[1];
a[30]=data[2];
a[31]=data[3];
a[32]=data[4];
a[33]=data[5];
a[34]=data[6];
a[35]=data[7];
for(int i = 28;i<35;i++){
System.out.println(i+" "+a[i]);
}
a[1] = a[1]+a[28];
a[2]= a[2] + a[29];
String str = new String();
for(int j = 0;j<28;j++){
System.out.println(j+" "+a[j]);
}
for(int j = 0;j<36;j++){
code[j] = (char)a[j];
}
str = new String(code);
String str19 = GetOurCustomerProductfirstRights(str);
StringBuilder str0 = new StringBuilder(str19);
String str1 = NoHostcreatfirst(str0.toString());
return str1;
}
public String printlnSportCode(String relationship,String MyRole0Num,String MyRole1Num,String MyPlace,String MyFriPlace){
Localrelationship0 = relationship;
LocalRoleNum0 = MyRole0Num;
LocalRoleNum1 = MyRole1Num;
LocalMyPlace = MyPlace;
LocalMyFriplace = MyFriPlace;
Scanner Input = new Scanner(System.in);
String MyData = Input.next();
data = MyData.toCharArray();
a[28]=data[0];
a[29]=data[1];
a[30]=data[2];
a[31]=data[3];
a[32]=data[4];
a[33]=data[5];
a[34]=data[6];
a[35]=data[7];
for(int i = 28;i<35;i++){
System.out.println(i+" "+a[i]);
}
a[1] = a[1]+a[28];
a[2]= a[2] + a[29];
String[] str = new String[200];
for(int i = 0;i<200;i++){
GetUserRightsCode();
for(int j = 0;j<28;j++){
System.out.println(j+" "+a[j]);
}
for(int j = 0;j<36;j++){
code[j] = (char)a[j];
}
str[i] = new String(code);
str0 = new StringBuilder(str[i]);
}
return NoHostcreatfirst(str0.toString());
} public static void main(String[] args){
new Makeatest();
}} 现在我运行第二个类型,在console窗口中输入“今日时间”,格式为:“20140303”,之后,得到的序列号为:
希望得到高手的指导:
我的错误,出在什么地方?
为什么会有上面的结果出现?
如何修改?
上述的第277行的printlnSportCode();方法,它能够在执行完毕后,返回值的第313行的代码,str0,是有值的,但是经过了本行的:
}
return NoHostcreatfirst(str0.toString());
}
代码:“NoHostcreatfirst(str0.toString());”方法的作用后,未能够返回一个值.
于是,我跟到这个方法体中进行查看:
我发现这个方法中的所有的局部作用域的变量的值,都没有得到赋值.
只有成员作用域的值得到了赋值.
希望大家能够相助:
为什么这个“NoHostcreatfirst()”方法,他的作用域中的语句以及变量,会有这个结果.
谢谢大家!!
那运行的时候你要在控制台输入信息才行。
2、 str[i] = new String(code);
你这样封装不行,指定一个字符编码,比如 str[i] = new String(code,"utf8");
方名师姐,如果我的这里的code[]数组,是一个char[]型的数组,那应该怎么办?
求方名师姐版主,再次相助!!
求CSDN中的高手相助!!