Java 对Eratosthenes进行编程并写入文件
因此,我有一个赋值,我们必须使用Eratosthenes算法生成0到用户确定的小于200的值之间的所有素数,然后将这些素数写入一个名为“primesTo200.txt”的文件,每行最多10个素数。现在,当我输入120作为最大素数值时,我的代码工作得非常好,但当我尝试输入0-200之间的任何其他数字时,它将生成素数,但当它尝试写入文件时,我会出现“越界异常”错误。这是为什么??我没有硬编码任何只会让120工作的东西。。。谁能帮帮我吗^_^Java 对Eratosthenes进行编程并写入文件,java,primes,Java,Primes,因此,我有一个赋值,我们必须使用Eratosthenes算法生成0到用户确定的小于200的值之间的所有素数,然后将这些素数写入一个名为“primesTo200.txt”的文件,每行最多10个素数。现在,当我输入120作为最大素数值时,我的代码工作得非常好,但当我尝试输入0-200之间的任何其他数字时,它将生成素数,但当它尝试写入文件时,我会出现“越界异常”错误。这是为什么??我没有硬编码任何只会让120工作的东西。。。谁能帮帮我吗^_^ import java.util.Arrays; impo
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.");
}
}
导入java.util.array;
导入java.util.Scanner;
导入java.io.*;
公开课A1Q1
{
公共静态void main(字符串[]args)
{
扫描仪键盘=新扫描仪(System.in);
System.out.println(“输入您希望生成素数的最大值[max 200]:”;
int maxValue=keyboard.nextInt();
而(最大值>200 | |最大值<0)
{
System.out.println(“对不起,这不是[0-200]之间的最大值。请输入另一个整数:”;
maxValue=keyboard.nextInt();
}
int[]素数=生成时间(maxValue);
System.out.println(array.toString(primes));
尝试
{
FileWriter fileName=新的FileWriter(“primesTo200.txt”);
记录数组(素数、文件名);
}
捕获(ioe异常ioe)
{
ioe.printStackTrace();
}
}
公共静态int[]生成时间(int maxValue)
{
布尔[]数组=新布尔[maxValue+1];
int[]primesFull=新的int[maxValue];
整数计数=0;
for(int i=2;ifor(int i=0;i
是问题所在
每次外循环迭代时,您都要经历10个素数(并跳过
count
),不管你是否还有10个素数要打印到你的文件中Oooooooh太好了,谢谢!!那么你有没有建议我如何使它仍然只向一行写入10个整数,但是如果少于10个整数,它仍然会写入它们而不会越界?我是否可以抛出/捕获异常与其编写内部循环,不如尝试使用if语句检查计数器是否可以被10整除(而不是零)。如果可以,则在该点向文件中添加“\n”。可能有更巧妙的解决方案,但这样可以完成任务。