Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
soln的java.lang.StringIndexOutOfBoundsException_Java - Fatal编程技术网

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)
        }
    }