将数字从文件放入数组时出错(Java)

时间:2018-02-28 22:09:56

标签: java

我想从下面的前15位数字中取出并将它们放入数组中。问题是它输入所有数字直到" 344"。此数字仅显示为" 34"。我假设这是因为计数正在计算无效输入,如" xxx"作为数字。我不知道如何解决这个问题。

0
4
23
566
34
xxx
45
555
11
34
35
45
xxx
65

55
98
344
54

这是我的代码(3个部分添加了一个玩游戏的文件,一个打印结果):

public class JumpIt {

    // Constants
    private int count = 0;
    private final int MAX_SIZE = 15;
    public int[] arr = new int[MAX_SIZE];

    public JumpIt(String theName) throws FileNotFoundException {
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(new File("file.txt"));
        int i=0;
        while(scanner.hasNext() && count < 15) {   //only need first 15 
            if (scanner.hasNextInt()) {
                arr[i++] = scanner.nextInt();
                count+= 1;
            }
            else {
                String s = scanner.nextLine();
                System.out.println(s);
            }
        }
    }

    int n = 0;
    public int play() throws BadInputException{             //gets size
        if(arr[0]!= 0) {
            throw new BadInputException(); 
        }
        return play(arr,0,count-1);
    }

    private static int play(int arr[],int first, int last) { 
        if(first > (last)) {
            return 0;
        }
        else if ((first + 1)>last){
            return arr[first];
        }
        else {
            if (arr[first] < arr[first + 1]) {
                return arr[first] + play(arr,first+2,last);
            }
            else {
                return arr[first+1] + play(arr,first+2,last);
            }
        }
    }

    public void printGame() {
        if(count > 10) {
            for(int i = 0; i < 10; i++) { 
                System.out.print(arr[i] + " ");
            }
            n = count - 10;
            for(int i = 0; i < n; i++) {
                System.out.print(arr[i] + " ");
            }
        }
        //if(count > 15) {
        //  System.out.println("The file has more than 15 integers");
        //  System.out.println("Only the first 15 integers are considered");
        //}
        else {
            n = count; 
            for(int i = 0; i < count;i++) {
                System.out.print(arr[i]);
            }
        }
        System.out.println("The file has "); 
        System.out.print(count);
        System.out.println(" " + "integers.");
        }
}

这是我的主要内容:

public class Driver {
public static void main(String[] args) throws FileNotFoundException {
    JumpIt game4 = new JumpIt("file.txt");
    game4.printGame();
    System.out.println("");
    System.out.println("play game");
    try {
            System.out.println("the cost is " + game4.play());
            System.out.println("");
    } catch (BadInputException e){
            System.out.println("bad input: the first int must be 0");
    }

2 个答案:

答案 0 :(得分:0)

您的代码有效。小清理:

int[] arr = new int[15];
Scanner scanner = new Scanner(new File("file.txt"));
int i = 0;
while (scanner.hasNext() && i < 15) {
  if (scanner.hasNextInt()) {
    arr[i++] = scanner.nextInt();
  } else {
    scanner.nextLine();
  }
}

使用以下元素[0,4,23,566,34,45,555,11,34,35,45,65,55,98,344]创建数组。

在进入循环之前,代码中的count变量是否大于0?您没有在代码段中初始化它。

答案 1 :(得分:0)

您的问题表明您的程序没有正确读取数组中的前15个数字。实际上它确实如此(我已通过测试验证)。

您认为阵列未正确填充的原因是因为您在阵列的打印输出结束时看到了数字34。最后一个数字是344,但是这个逻辑导致欺骗(你打印前10个,然后在数组的开头回来):

public void printGame() {
    if(count > 10) {
        for(int i = 0; i < 10; i++) { 
            System.out.print(arr[i] + " ");
        }
        n = count - 10;   // Here you are restarting back at index=0
        for(int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
        }
    }
    ....

出现了数字34,因为它是第5个元素(15-10)。不幸的是,34类似于344。