[英]How to store an array with user input values
我正在學校學習 java 課程,並被問到這個問題:“編寫一個程序,存儲五個 int 值 1、2、3、4 和 5 的數組,一個 Date object 用於當前時間,以及 double 值5.5 在名為exercise17_05.dat 的文件中。”
我的教授想通過說“我們將對此進行一些修改,因為您需要讓用戶輸入他們的姓名並輸入五 (5) 個 integer 值以及提到的其他兩項。”
感謝這里的了不起的人,我想出了如何解決最初的問題。 我試圖用我所知道的修改程序,但不斷收到“線程中的異常”錯誤。
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readLong(DataInputStream.java:416)
at java.io.DataInputStream.readDouble(DataInputStream.java:468)
at java.io.ObjectInputStream$BlockDataInputStream.readDouble(ObjectInputStream.java:3208)
at java.io.ObjectInputStream.readDouble(ObjectInputStream.java:1061)
at cosc_hw17.COSC_HW17.main(COSC_HW17.java:75)
Java Result: 1
我知道這與創建數組和從文件部分讀取的原始數據有關。 任何幫助將不勝感激。
我所擁有的附在下面。 我更新了代碼,但仍然有問題。 錯誤是讀取它找不到數字“readObject”的符號
import java.io.*; import java.util.Scanner; import java.util.Arrays; import java.util.Date; public class COSC_HW17 { // main method public static void main(String[] args) throws ClassNotFoundException, IOException { // create scanner Scanner input = new Scanner (System.in); // stores integers in array double [] numbers = new double [5]; // stores the returned array from method double[] ret; //Create an output stream for file ObjectOutputStream output = new ObjectOutputStream( new FileOutputStream("Exercise17_05.dat", true)); // Ask user for name System.out.println("Please Enter Name:"); String name = input.next(); // Ask user for numbers System.out.println("Input Five Integer Values:"); for (int i = 0; i < 5; i++) { numbers[i] = input.nextInt(); } //Write to file // 1. Write name output.writeUTF(name); // 2. Write int array object output.writeObject(numbers); // 3. Write double output.writeDouble(5.5); // 4. Write date object output.writeObject(new java.util.Date()); // 5. Write utf string output.writeUTF("Exercise17_05.dat"); // Close the stream output.close(); //Create an input stream for file ObjectInputStream report = new ObjectInputStream (new FileInputStream("Exercise17_05.dat")); // Read from file // 1. Read name System.out.println("Name: " + name); // 2. Read int array object int[] newNumbers = (int[]) (input.readObject()); System.out.println("Integers: " + Arrays.toString(newNumbers)); // 3. Read double double doubleValue = report.readDouble(); System.out.println("Double value: " + doubleValue); // 4. Read date object Date date = (java.util.Date) (report.readObject()); System.out.println("DateTime: " + date); // 5. Read utf string String fileName = report.readUTF(); System.out.println("File name: " + fileName); // Close the stream input.close(); }
您必須准確閱讀您所寫的內容。 如果您不這樣做,則類型不匹配。 因此,例如,最初當您執行 ReadDouble 時,它遇到了人員姓名,這導致了您開始問題時出現的錯誤。 最近的一段更微妙,因為編寫了一個雙精度數組,但您試圖將其讀取(轉換)為一個整數數組。
所以我們只是按照寫作中發生的事情:
// Read from file
// 1. Read name
String newName = report.readUTF();
System.out.println("Name: " + newName);
// 2. Read double array object
ret = (double[])report.readObject();
System.out.println("Integers: "+ Arrays.toString(ret));
// 3. Read double
double doubleValue = report.readDouble();
System.out.println("Double value: " + doubleValue);
// 4. Read date object
Date date = (java.util.Date) (report.readObject());
System.out.println("DateTime: " + date);
// 5. Read utf string
String fileName = report.readUTF();
System.out.println("File name: " + fileName);
實際上,代碼有一個偶然的問題。
int[] newNumbers = (int[]) (input.readObject());
readObject()
是 java.io.ObjectInputStream.ObjectInputStream 中java.io.ObjectInputStream.ObjectInputStream
ObjectInputStream
的方法
根據代碼input
是 object 來自java.util.Scanner
。
您的聲明input.readObject()
在我看來是無效的,應該提出:
未為 Scanner 類型定義方法 readObject()
問題的解決方案是:-
public class InputFile {
public File data() throws IOException {
Scanner scan= new Scanner(System.in);
String Name="";
int arr[]=new int[5];
LocalDateTime mydate=LocalDateTime.now();
double dou=5.5;
System.out.println("please enter name");
Name=scan.next();
File file = new File("Exercise17_05.dat");
if(file.createNewFile()){
System.out.println("file.txt File Created in Project root directory");
}else
System.out.println("File file.txt already exists in the project root directory");
FileOutputStream fos=new FileOutputStream("Exercise17_05.dat");
fos.write(Name.getBytes());
for(int i=0;i<arr.length;i++) {
System.out.println("please enter an integer numeral for the index:" +i);
arr[i]=scan.nextInt();
fos.write(arr[i]);
}
System.out.println("the array is:::: " +Arrays.toStrings(arr));
fos.write(mydate.toString().getBytes());
fos.write(String.valueOf(dou).getBytes());
return file;
}
public static void main(String[] args) throws IOException {
InputFile data=new InputFile();
data.data();
}
}
我很高興收到你的來信
謝謝你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.