Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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
Java 对Eratosthenes进行编程并写入文件_Java_Primes - Fatal编程技术网

Java 对Eratosthenes进行编程并写入文件

Java 对Eratosthenes进行编程并写入文件,java,primes,Java,Primes,因此,我有一个赋值,我们必须使用Eratosthenes算法生成0到用户确定的小于200的值之间的所有素数,然后将这些素数写入一个名为“primesTo200.txt”的文件,每行最多10个素数。现在,当我输入120作为最大素数值时,我的代码工作得非常好,但当我尝试输入0-200之间的任何其他数字时,它将生成素数,但当它尝试写入文件时,我会出现“越界异常”错误。这是为什么??我没有硬编码任何只会让120工作的东西。。。谁能帮帮我吗^_^ import java.util.Arrays; impo

因此,我有一个赋值,我们必须使用Eratosthenes算法生成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.");
  }
}
导入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”。可能有更巧妙的解决方案,但这样可以完成任务。