我需要帮助编写一个 JAVA 程序,该程序将在获得 10 个整数值输入后打开一个命名文件并计算数字的平均值
I need help writing a JAVA program that will open a named file after getting 10-integer value inputs and compute the average value of the numbers
我需要编写一个程序
- 要求用户输入 10 个整数值。如果输入非整数值,您的程序应显示一条错误消息并重新提示用户输入该值。
- 将用户的输入存储在一个整数数组中。
- 打开名为 data.txt 的文件。如果该文件不存在,您的程序应该创建它。如果无法打开文件,则会显示一条错误消息并终止程序。
- 将用户输入的十个整数值写入文件。将每个整数值写在单独的行上。
- 关闭文件。
- 打开文件。如果无法打开文件,则会显示一条错误消息并终止程序。
- 从文件中读回数据,并在读入数据时对值求和。如果读取数据出错,将显示一条错误消息,并终止程序。
- 计算并显示文件中数字的平均值。小数点后两位显示平均值。
我想我有正确的代码来收集 10 个整数,但我无法得到非整数出现的错误。我也不知道如何打开文件 data.txt 来计算平均值
public static void main(String[] args) {
int counter = 0;
Scanner input = new Scanner(System.in);
List<Integer> values = new ArrayList<>();
System.out.println("\nThis program gets ten numbers from the user, and");
System.out.println("computes and displays the average.");
while (counter < 10) {
System.out.print("Enter integer " + (counter + 1) + ": ");
int value = input.nextInt();
if (value > 0) {
counter++;
values.add(value);
} else {
System.out.println("Error: input must be an integer.");
input.nextInt();
}
}
}
}
我认为你走在正确的轨道上,这是你最初尝试的稍微扩展的版本,它应该可以工作,请注意它看起来像第 2 步说要使用整数数组所以我使用它而不是数组列表在您最初的尝试中:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
class Main {
private static final int NUM_INTEGERS = 10;
private static final Integer[] USER_INTEGERS = new Integer[NUM_INTEGERS];
private static final String DATA_FILE = "data.txt";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < NUM_INTEGERS; i++) {
USER_INTEGERS[i] = getIntegerInput(String.format("Enter integer %d: ", i + 1), scanner);
}
}
try {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(DATA_FILE));
for (int i = 0; i < NUM_INTEGERS; i++) {
bufferedWriter.write(String.format("%d%n", USER_INTEGERS[i]));
}
bufferedWriter.close();
double total = 0;
BufferedReader bufferedReader = new BufferedReader(new FileReader(DATA_FILE));
for (int i = 0; i < NUM_INTEGERS; i++) {
total += Double.parseDouble(bufferedReader.readLine());
}
double average = total / NUM_INTEGERS;
System.out.printf("Average of the %d numbers in %s: %.2f", NUM_INTEGERS, DATA_FILE, average);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
private static int getIntegerInput(String prompt, Scanner scanner) {
System.out.print(prompt);
int validInteger = -1;
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
validInteger = scanner.nextInt();
break;
} else {
System.out.println("Error: Invalid input, try again...");
System.out.print(prompt);
scanner.next();
}
}
return validInteger;
}
}
用法示例:
Enter integer 1: 4
Enter integer 2: 3
Enter integer 3: d
Error: Invalid input, try again...
Enter integer 3: 3
Enter integer 4: 4
Enter integer 5: zxcv
Error: Invalid input, try again...
Enter integer 5: 34
Enter integer 6: 2
Enter integer 7: 4
Enter integer 8: 8
Enter integer 9: 21
Enter integer 10: 6
Average of the 10 numbers in data.txt: 8.90
我需要编写一个程序
- 要求用户输入 10 个整数值。如果输入非整数值,您的程序应显示一条错误消息并重新提示用户输入该值。
- 将用户的输入存储在一个整数数组中。
- 打开名为 data.txt 的文件。如果该文件不存在,您的程序应该创建它。如果无法打开文件,则会显示一条错误消息并终止程序。
- 将用户输入的十个整数值写入文件。将每个整数值写在单独的行上。
- 关闭文件。
- 打开文件。如果无法打开文件,则会显示一条错误消息并终止程序。
- 从文件中读回数据,并在读入数据时对值求和。如果读取数据出错,将显示一条错误消息,并终止程序。
- 计算并显示文件中数字的平均值。小数点后两位显示平均值。
我想我有正确的代码来收集 10 个整数,但我无法得到非整数出现的错误。我也不知道如何打开文件 data.txt 来计算平均值
public static void main(String[] args) {
int counter = 0;
Scanner input = new Scanner(System.in);
List<Integer> values = new ArrayList<>();
System.out.println("\nThis program gets ten numbers from the user, and");
System.out.println("computes and displays the average.");
while (counter < 10) {
System.out.print("Enter integer " + (counter + 1) + ": ");
int value = input.nextInt();
if (value > 0) {
counter++;
values.add(value);
} else {
System.out.println("Error: input must be an integer.");
input.nextInt();
}
}
}
}
我认为你走在正确的轨道上,这是你最初尝试的稍微扩展的版本,它应该可以工作,请注意它看起来像第 2 步说要使用整数数组所以我使用它而不是数组列表在您最初的尝试中:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
class Main {
private static final int NUM_INTEGERS = 10;
private static final Integer[] USER_INTEGERS = new Integer[NUM_INTEGERS];
private static final String DATA_FILE = "data.txt";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < NUM_INTEGERS; i++) {
USER_INTEGERS[i] = getIntegerInput(String.format("Enter integer %d: ", i + 1), scanner);
}
}
try {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(DATA_FILE));
for (int i = 0; i < NUM_INTEGERS; i++) {
bufferedWriter.write(String.format("%d%n", USER_INTEGERS[i]));
}
bufferedWriter.close();
double total = 0;
BufferedReader bufferedReader = new BufferedReader(new FileReader(DATA_FILE));
for (int i = 0; i < NUM_INTEGERS; i++) {
total += Double.parseDouble(bufferedReader.readLine());
}
double average = total / NUM_INTEGERS;
System.out.printf("Average of the %d numbers in %s: %.2f", NUM_INTEGERS, DATA_FILE, average);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
private static int getIntegerInput(String prompt, Scanner scanner) {
System.out.print(prompt);
int validInteger = -1;
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
validInteger = scanner.nextInt();
break;
} else {
System.out.println("Error: Invalid input, try again...");
System.out.print(prompt);
scanner.next();
}
}
return validInteger;
}
}
用法示例:
Enter integer 1: 4
Enter integer 2: 3
Enter integer 3: d
Error: Invalid input, try again...
Enter integer 3: 3
Enter integer 4: 4
Enter integer 5: zxcv
Error: Invalid input, try again...
Enter integer 5: 34
Enter integer 6: 2
Enter integer 7: 4
Enter integer 8: 8
Enter integer 9: 21
Enter integer 10: 6
Average of the 10 numbers in data.txt: 8.90