soln的java.lang.StringIndexOutOfBoundsException
此程序正在抛出soln的java.lang.StringIndexOutOfBoundsException,java,Java,此程序正在抛出java.lang.StringIndexOutOfBoundsException 单个长字符串中的素数:“235711117192329…” 测试用例 Inputs: (int) n = 0 Output: (string) "23571" Inputs: (int) n = 3 Output: (string) "71113" 公共类答案{ 公共静态字符串应答(int n){ int i=0; int num=0; 字符串素数=”; cha
java.lang.StringIndexOutOfBoundsException
单个长字符串中的素数:“235711117192329…”
测试用例
Inputs:
(int) n = 0
Output:
(string) "23571"
Inputs:
(int) n = 3
Output:
(string) "71113"
公共类答案{
公共静态字符串应答(int n){
int i=0;
int num=0;
字符串素数=”;
char[]ar=新字符[5];
对于(i=1;i=1;num--){
如果(i%num==0){
计数器=计数器+1;
}
}
如果(计数器==2){
素数=素数+i;
}
}
ar[0]=素数.charAt(n);
ar[1]=素数.charAt(n+1);
ar[2]=素数.charAt(n+2);
ar[3]=素数.charAt(n+3);
ar[4]=素数.charAt(n+4);
返回字符串.valueOf(ar);
}
}
可能您没有生成足够长度的字符串和给定的字符串长度值我建议您在给定N的最大值上检查您的程序。
此外,我建议您不要使用String(每次连接String时阅读有关创建新对象的内容),并简化第二个循环
public static String answer(int n) {
StringBuilder sb = new StringBuilder("");
char[] ar = new char[5];
for (int i = 2; i <= 10000; i++) {
boolean flag = true;
for (int j = 2; j*j <= i; j++) {
if(i%j==0) {
flag = false;
break;
}
}
if(flag) {
sb.append(i);
}
}
ar[0] = sb.charAt(n);
ar[1] = sb.charAt(n + 1);
ar[2] = sb.charAt(n + 2);
ar[3] = sb.charAt(n + 3);
ar[4] = sb.charAt(n + 4);
return String.valueOf(ar);
}
公共静态字符串应答(int n){
StringBuilder sb=新的StringBuilder(“”);
char[]ar=新字符[5];
对于(int i=2;i尝试此解决方案:
public class Answer {
public static String answer(int n) {
StringBuilder primeNumberString = new StringBuilder(0);
int currentPrimeNumber = 2;
while (primeNumberString.length() < n+5) {
primeNumberString.append(currentPrimeNumber);
currentPrimeNumber++;
for (int index = 2; index < currentPrimeNumber; index++) {
if (currentPrimeNumber % index == 0) {
currentPrimeNumber++;
index = 2;
} else {
continue;
}
}
}
return primeNumberString.toString().substring(n, n+5)
}
}
公共类答案{
公共静态字符串应答(int n){
StringBuilder primeNumberString=新的StringBuilder(0);
int currentPrimeNumber=2;
while(primeNumberString.length()
=======================================================
编辑
问题陈述表明,您编写的方法所需的输出应该是长度为5的字符串,并且应该是从“n”到“n+4”
我们的目标应该是找到一个解决方案,让我们使用尽可能少的资源,以尽可能快的速度获得从n到n+4的字符串
在您所采用的方法中,您正在将0到10000之间的所有素数添加到字符串中。这些素数总计约为1229个素数。这种方法的缺陷在于,如果输入类似于0,您仍在构建一个完全不必要的1229个素数的字符串。如果输入类似于100000,则由于没有足够大的字符串,因此会出现您面临的错误
这里最好的方法是构建一个长度为n+5的字符串。然后从中剪切出子字符串。这既简单又有效。您需要调试以找出它超出范围的位置和原因。您是否已经进行了调试?请尝试打印出“素数”和“n”。您将很快看到问题。解释您的解决方案将为您提供更多的投票,因此请解释为什么要进行此项工作?抱歉,我很匆忙,可以吗
public class Answer {
public static String answer(int n) {
StringBuilder primeNumberString = new StringBuilder(0);
int currentPrimeNumber = 2;
while (primeNumberString.length() < n+5) {
primeNumberString.append(currentPrimeNumber);
currentPrimeNumber++;
for (int index = 2; index < currentPrimeNumber; index++) {
if (currentPrimeNumber % index == 0) {
currentPrimeNumber++;
index = 2;
} else {
continue;
}
}
}
return primeNumberString.toString().substring(n, n+5)
}
}