各位大侠帮帮忙啊~~~急!!

时间:2022-09-05 21:57:13
我写了一段代码,是输出一千个随机字符串,要求每个字符串的长度是32位,字符串里面的字符必须是A到Z、a到b和1到9中间的某一个,并且每个字符串里面必须同时有字符和数字。我编完后本来没有什么大错误,但是在运行的时候出现了一个这样的错误:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space。我不知道怎么改正,请各位帮帮我!代码如下:

import java.util.*;
public class suijizifuchuan {
public static void main(String[] args) {
int i = 0,t = 0,s = 0,r,flag1,flag2;
char[] zifuji = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', 'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 
'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
StringBuffer randomzifuchuan = new StringBuffer();
Random random = new Random();
while(i < 1000) {
for(int j = 0;j < 32;j++) {
t = random.nextInt(zifuji.length);
randomzifuchuan.append(zifuji[t]);
}
flag1 = 0;
flag2 = 0;
while(flag1 * flag2 != 0 & s < 32) {
r = (int)randomzifuchuan.toString().charAt(s);
if(r <= 57) flag1 = 1;
else flag2 = 1;
s++;
}
if(flag1 * flag2 != 0){
System.out.println(randomzifuchuan);
i++;
}
}
}
}

6 个解决方案

#1


你的While循环条件不对,flag1*flag2!=0恒为假,while进不去,所以接下来的if也自然进不去,导致i不能递增,死循环,而且你的那个while的条件是想说并列条件吧,应该是&&而不是一个&

#2


import java.util.*;
public class suijizifuchuan {
public static void main(String[] args) {
int i = 0,t=0;
char[] zifuji = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', 'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 
'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
StringBuffer randomzifuchuan = new StringBuffer();
Random random = new Random();
while(i<1000) {
for(int j = 0;j < 32;j++) {
t = random.nextInt(zifuji.length);
randomzifuchuan.append(zifuji[t]);
}

 System.out.println("随机数"+ i++ +":>"  + randomzifuchuan);
  randomzifuchuan = new StringBuffer();

 }


 }
 }

没必要那么麻烦,这样也可以实现了,试试

#3


但是我的程序里面还需要保证每个字符串都同时含有字母和数字,如果一个随机字符串只有字母或者只有数字,都是不符合题目要求的,我改了一下我的程序,可以运行了,但是每次都输出4、5个字符串后就一直处于运行状态输不出了,不知道怎么回事:

import java.util.*;
public class suijizifuchuan {
public static void main(String[] args) {
int i = 0,t = 0,s = 0,r,flag1,flag2;
long a = System.currentTimeMillis();
char[] zifuji = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', 'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 
'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
while(i < 10) {
StringBuffer randomzifuchuan = new StringBuffer();
Random random = new Random();
for(int j = 0;j < 32;j++) {
t = random.nextInt(zifuji.length);
randomzifuchuan.append(zifuji[t]);
}
flag1 = 0;
flag2 = 0;
while(flag1 * flag2 == 0 & s < 32){
r = (int)randomzifuchuan.toString().charAt(s);
if(r <= 57) flag1 = 1;
else flag2 = 1;
s++;
}
if(flag1 * flag2 == 1){
System.out.println(randomzifuchuan.toString());
i++;
}
}
long b = System.currentTimeMillis();
long c = b - a;
System.out.print("本程序运行的时间为:" + c + "毫秒");
}
}

#4


???????

#5


没有人能帮帮我吗?

#6


你运行我上面的代码了吗??出来的字符串都合要求的

#1


你的While循环条件不对,flag1*flag2!=0恒为假,while进不去,所以接下来的if也自然进不去,导致i不能递增,死循环,而且你的那个while的条件是想说并列条件吧,应该是&&而不是一个&

#2


import java.util.*;
public class suijizifuchuan {
public static void main(String[] args) {
int i = 0,t=0;
char[] zifuji = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', 'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 
'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
StringBuffer randomzifuchuan = new StringBuffer();
Random random = new Random();
while(i<1000) {
for(int j = 0;j < 32;j++) {
t = random.nextInt(zifuji.length);
randomzifuchuan.append(zifuji[t]);
}

 System.out.println("随机数"+ i++ +":>"  + randomzifuchuan);
  randomzifuchuan = new StringBuffer();

 }


 }
 }

没必要那么麻烦,这样也可以实现了,试试

#3


但是我的程序里面还需要保证每个字符串都同时含有字母和数字,如果一个随机字符串只有字母或者只有数字,都是不符合题目要求的,我改了一下我的程序,可以运行了,但是每次都输出4、5个字符串后就一直处于运行状态输不出了,不知道怎么回事:

import java.util.*;
public class suijizifuchuan {
public static void main(String[] args) {
int i = 0,t = 0,s = 0,r,flag1,flag2;
long a = System.currentTimeMillis();
char[] zifuji = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', 'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 
'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
while(i < 10) {
StringBuffer randomzifuchuan = new StringBuffer();
Random random = new Random();
for(int j = 0;j < 32;j++) {
t = random.nextInt(zifuji.length);
randomzifuchuan.append(zifuji[t]);
}
flag1 = 0;
flag2 = 0;
while(flag1 * flag2 == 0 & s < 32){
r = (int)randomzifuchuan.toString().charAt(s);
if(r <= 57) flag1 = 1;
else flag2 = 1;
s++;
}
if(flag1 * flag2 == 1){
System.out.println(randomzifuchuan.toString());
i++;
}
}
long b = System.currentTimeMillis();
long c = b - a;
System.out.print("本程序运行的时间为:" + c + "毫秒");
}
}

#4


???????

#5


没有人能帮帮我吗?

#6


你运行我上面的代码了吗??出来的字符串都合要求的