此程序正在抛出java.lang.StringIndexOutOfBoundsException
。
在一个长字符串中填写数字:" 2357111317192329 ..."
测试用例
Inputs:
(int) n = 0
Output:
(string) "23571"
Inputs:
(int) n = 3
Output:
(string) "71113"
public class Answer {
public static String answer(int n) {
int i = 0;
int num = 0;
String primeNumbers = "";
char[] ar = new char[5];
for (i = 1; i <= 10000; i++) {
int counter = 0;
for (num = i; num >= 1; num--) {
if (i % num == 0) {
counter = counter + 1;
}
}
if (counter == 2) {
primeNumbers = primeNumbers + i;
}
}
ar[0] = primeNumbers.charAt(n);
ar[1] = primeNumbers.charAt(n + 1);
ar[2] = primeNumbers.charAt(n + 2);
ar[3] = primeNumbers.charAt(n + 3);
ar[4] = primeNumbers.charAt(n + 4);
return String.valueOf(ar);
}
}
答案 0 :(得分:0)
可能你没有生成足够长度的字符串和给定的字符串长度值。
我建议你检查你的程序在给定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);
}
答案 1 :(得分:0)
试试这个解决方案:
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)
}
}
=============================================== ======
修改强>
问题陈述表明,您编写的方法所需的输出应该是长度为5的字符串,它应该来自&#39; n&#39;到&#39; n + 4&#39;。
我们的目标应该是提出一个解决方案,使用尽可能少的资源尽可能快地为我们提供从n到n + 4的字符串。
在您采用的方法中,您将在字符串中添加0到10000之间的所有素数。这大约需要1,229个素数。这种方法的缺陷是,如果输入类似于0.你仍然在构建一串1,229个素数,这是完全没必要的。如果输入类似于100000,则会出现您所面临的错误,因为您没有足够大的字符串。
这里最好的方法是构建一个最大为n + 5的字符串。然后切掉它的子串。它简单而有效。