如何为我的输出添加更多值?
How do I add more values to my output?
这是我的函数,它假设从 "in1.txt" 中获取值并将它们输出到 "out1.txt" 中,并附有说明它们是否为质数的说明。
代码:
import java.util.Scanner;
import java.util.ArrayList;
import java.io.File;
import java.io.PrintWriter;
public class task1
{
public static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static ArrayList<String> check_primes(String in_file, String out_file)
{
File temp = new File(in_file);
Scanner input_file;
String filename = "out1.txt";
PrintWriter out = null;
try
{
input_file = new Scanner(temp);
out = new PrintWriter(filename);
}
catch (Exception e)
{
System.out.printf("Failed to open file %s\n",in_file);
return null;
}
ArrayList<String> result = new ArrayList<String>();
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
result.add(line);
for(int i = 0; i<result.size();i++)
{
String x = result.get(i);
int xx = Integer.parseInt(x);
if(isPrime(xx))
{
out.printf(xx + " is a prime\r\n");
}
else
{
out.printf(xx + " is not a prime\r\n");
}
}
out.close();
}
input_file.close();
return result;
}
public static void main(String[] args)
{
check_primes("in1.txt", "out1.txt");
System.out.printf("Exiting...\n");
}
}
它只添加了 int1 文件的第一个值,我假设这是某种循环错误或者我在循环中遗漏了一些东西。我测试了 "x" 或 "xx" 是否有错误并将它们打印出来并且 x 将打印为 [7] [7 , 10] [7, 10, 13] 等形成金字塔,xx 以类似于 7\n 7\n 10\n 7\n 10\n 13\n 的方式打印出来
谁能帮我找出问题所在?
我认为在将每一行添加到列表中后进行循环的目的是为了稍后处理包含所有行的列表。如果这是真的,那么您需要在 while 循环中包含 result.add(line) 并关闭它。在 for 循环
中处理之后的所有行
while (input_file.hasNextLine()) {
String line = input_file.nextLine();
result.add(line);
} //close the loop here
假设您不关闭 while 循环。 For 循环将只执行一次,因为你的 result.size() 是一个并且在 for 循环完成后,它将关闭输出流。
while(input_file.hasNextLine()) {
String line = input_file.nextLine();
result.add(line);
}
for(int i = 0; i<result.size();i++)
{
String x = result.get(i);
int xx = Integer.parseInt(x);
if(isPrime(xx))
{
out.printf(xx + " is a prime\r\n");
}
else
{
out.printf(xx + " is not a prime\r\n");
}
}
out.close();
这是我的函数,它假设从 "in1.txt" 中获取值并将它们输出到 "out1.txt" 中,并附有说明它们是否为质数的说明。
代码:
import java.util.Scanner;
import java.util.ArrayList;
import java.io.File;
import java.io.PrintWriter;
public class task1
{
public static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static ArrayList<String> check_primes(String in_file, String out_file)
{
File temp = new File(in_file);
Scanner input_file;
String filename = "out1.txt";
PrintWriter out = null;
try
{
input_file = new Scanner(temp);
out = new PrintWriter(filename);
}
catch (Exception e)
{
System.out.printf("Failed to open file %s\n",in_file);
return null;
}
ArrayList<String> result = new ArrayList<String>();
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
result.add(line);
for(int i = 0; i<result.size();i++)
{
String x = result.get(i);
int xx = Integer.parseInt(x);
if(isPrime(xx))
{
out.printf(xx + " is a prime\r\n");
}
else
{
out.printf(xx + " is not a prime\r\n");
}
}
out.close();
}
input_file.close();
return result;
}
public static void main(String[] args)
{
check_primes("in1.txt", "out1.txt");
System.out.printf("Exiting...\n");
}
}
它只添加了 int1 文件的第一个值,我假设这是某种循环错误或者我在循环中遗漏了一些东西。我测试了 "x" 或 "xx" 是否有错误并将它们打印出来并且 x 将打印为 [7] [7 , 10] [7, 10, 13] 等形成金字塔,xx 以类似于 7\n 7\n 10\n 7\n 10\n 13\n 的方式打印出来 谁能帮我找出问题所在?
我认为在将每一行添加到列表中后进行循环的目的是为了稍后处理包含所有行的列表。如果这是真的,那么您需要在 while 循环中包含 result.add(line) 并关闭它。在 for 循环
中处理之后的所有行while (input_file.hasNextLine()) {
String line = input_file.nextLine();
result.add(line);
} //close the loop here
假设您不关闭 while 循环。 For 循环将只执行一次,因为你的 result.size() 是一个并且在 for 循环完成后,它将关闭输出流。
while(input_file.hasNextLine()) {
String line = input_file.nextLine();
result.add(line);
}
for(int i = 0; i<result.size();i++)
{
String x = result.get(i);
int xx = Integer.parseInt(x);
if(isPrime(xx))
{
out.printf(xx + " is a prime\r\n");
}
else
{
out.printf(xx + " is not a prime\r\n");
}
}
out.close();