簡體   English   中英

如何存儲具有用戶輸入值的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM