gpt4 book ai didi

java - 编程埃拉托色尼筛并写入文件

转载 作者:行者123 更新时间:2023-12-02 05:48:14 24 4
gpt4 key购买 nike

所以我有一个作业,我们必须使用埃拉托斯特尼筛算法生成 0 到用户确定的值小于 200 之间的所有素数,然后将这些素数写入名为“primesTo200.txt”的文件,其中最大值为每行 10 个素数。现在,当我输入 120 作为最大素数值时,我的代码工作得很好,但是当我尝试输入 0-200 之间的任何其他数字时,它会生成很好的素数,但在尝试时出现“越界异常”错误写入文件。这是为什么??我没有硬编码任何只能使 120 工作的东西......有人可以帮助我吗? ^_^

import java.util.Arrays;
import java.util.Scanner;
import java.io.*;

public class A1Q1
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter a maximum value up to which you wish to generate prime numbers [max 200]: ");
int maxValue = keyboard.nextInt();

while(maxValue > 200 || maxValue < 0)
{
System.out.println("Sorry, that is not a max value between [0 - 200]. Please enter another integer: ");
maxValue = keyboard.nextInt();
}

int[] primes = generatePrimes(maxValue);
System.out.println(Arrays.toString(primes));

try
{
FileWriter fileName = new FileWriter("primesTo200.txt.");
recordArray(primes, fileName);
}

catch(IOException ioe)
{
ioe.printStackTrace();
}
}


public static int[] generatePrimes(int maxValue)
{
boolean[] array = new boolean[maxValue + 1];
int[] primesFull = new int[maxValue];
int count = 0;

for(int i = 2; i < array.length; i++)
{
array[i] = true;
}

for(int nextPrime = 2; nextPrime * nextPrime <= maxValue; nextPrime++)
{
for(int i = 2; i * nextPrime <= maxValue; i++)
{
array[i * nextPrime] = false;
}
}

for(int i = 2; i <= maxValue; i++)
{
if(array[i] == true)
{
primesFull[count] = i;
count++;
}
}

int[] primes = new int[count];
System.arraycopy(primesFull, 0, primes, 0, count);

return primes;
}


public static void recordArray(int[] primes, FileWriter fileName)
{
PrintWriter fileOut = new PrintWriter(fileName);
int lineLength = 10;
int count = 0;

while(count < primes.length)
{
for(int i = 0; i < lineLength; i++)
{
fileOut.print(primes[count] + " ");
count++;
}
fileOut.print("\n");
}

fileOut.close();
System.out.println("Program wrote to the file successfully.");
}
}

最佳答案

for(int i = 0; i < lineLength; i++)是问题所在。

每次外循环迭代时,您都会经历 10 个素数(并跳过 count < primes.length 的检查),无论是否还有 10 个素数要打印到文件中

关于java - 编程埃拉托色尼筛并写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23840864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com