簡體   English   中英

輸入值少於數組長度

[英]Less input values than array length

對於一項作業,我被要求創建一個 Java 程序,該程序從文件中讀取整數值並將它們存儲到一個長度為 40 的數組中,然后以相反的順序打印這些值。 我的問題是,當文件中的值少於 40 個時,分配也要求它工作。 這是我嘗試過的:

import java.io.*;
import java.util.Scanner;

public class Set8_Prog3
{
    public static void main (String[] args) throws IOException
    {
        FileReader i = new FileReader("Set8_Prog3 numbers.txt");
        Scanner j = new Scanner(i);

        int[] values = new int[40];

        int k = 0;
        int last = -1;
        while (k < 40)
        {
            values[k] = j.nextInt();
            last = values[k];
            k++;
        }


        System.out.println("The values from the file in reverse order is: ");
        while (last >= 0)
        {
            System.out.println(values[last]);
            last--;
        }
    }
}

它編譯成功,但是當我運行它時,我收到一條錯誤消息,指出 java.util.NoSuchElementException。 另外,我不應該使用 ArrayList。

只需將您的 while 條件更改為while(k < 40 && j.hasNextInt()) ,它應該可以正常工作。

values[k] = j.nextInt();

如果沒有 nextInt() 會發生什么? 你必須用 j.hasNextInt() 來管理它

while (k < 40)
{
    values[k] = j.nextInt();
    last = values[k];
    k++;
}

總是試圖從文件中讀取 40 個ints ,即使更少。 來自Scanner.nextInt()的 Javadoc :

Throws:
  InputMismatchException - if the next token does not match the Integer regular expression, or is out of range
  NoSuchElementException - if input is exhausted
  IllegalStateException - if this scanner is closed

即使輸入已用盡,您仍在閱讀。 您應該使用Scanner.hasNextInt()方法來檢查是否有更多的輸入,並且您的代碼可以采取相應的行動。

首先,你的變量名是不可讀的。 ij應始終為intInteger值,而不是FileReader或其他任何值。

然后,您不需要變量 last 並且在上一個循環中使用它的方式是不正確的,只需使用 k 即可。

最后,這是您真正的問題,如果文件不包含 40 個整數,您應該只處理此異常(或者更好的是,在循環條件中使用 Scanner.hasNextInt() ) 在這種情況下,只需退出循環。

在獲取輸入時使用hasNextInt查找是否有任何 int 值

While(k<40 && scanner.hasNextInt()){


}

K 已經增加了 1。所以先將其減少 1。然后循環直到 0

k--;
    while (k>= 0)
    {
        System.out.println(values[k]);
        k--;
    }


    while (k < 40 && scanner.hasNextInt())
    {
        values[k] = j.nextInt();
        k++;
    }

    k--;
    System.out.println("The values from the file in reverse order is: ");
    while (k>= 0)
    {
        System.out.println(values[k]);
        k--;
    }

UPDATED CODE

import java.io.*;
import java.util.Scanner;

public class Set8_Prog3
{
    public static void main (String[] args) throws IOException
    {
        FileReader i = new FileReader("Set8_Prog3 numbers.txt");
        Scanner j = new Scanner(i);

        int[] values = new int[40];

        int k = 0;

        while (k < 40 && j.hasNextInt())
        {
            values[k] = j.nextInt();
            k++;
        }

        k--;
        System.out.println("The values from the file in reverse order is: ");
        while (k>= 0)
        {
            System.out.println(values[last]);
            k--;
        }
    }
}

很抱歉對您的某些代碼進行了小幅重寫。 只是更清楚地說明了變量的含義。

我還修改了您在循環中使用幻數,並將其更改為 for 循環以擺脫上面的變量聲明。

我還將scanner.hasNextInt() 與i < values.length() 一起添加到for 循環的條件中。

import java.io.*;
import java.util.Scanner;

public class Set8_Prog3 {
    public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader("Set8_Prog3 numbers.txt");
        Scanner scanner = new Scanner(fileReader);

        int[] values = new int[40];

        int count = -1;
        for (int i = 0; i < values.length && scanner.hasNextInt(); i++) {
            values[i] = scanner.nextInt();
            count = i;
        }

        System.out.println("The values from the file in reverse order is: ");
        for (int i = count; i >= 0; i--) {
            System.out.println(values[i]);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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