为什么我的函数不能在文件中保留总的int值?

时间:2015-10-06 20:32:22

标签: java

我正在创建一个读取混合值文件(int和string)的程序,只打印整数值并保持文件中整数值的运行总和。一切都在工作,除了我在给定文件中运行的整数值总和,我很困惑为什么它保持打印0,当我知道文件中有超过0整数值。

这是我的代码:

package davi0030_a03;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class MyFile {
    private String fileName; // name of the file
    private int count = 0; // number of valid integers in the file
    private final int MAX_SIZE = 10; // the size of the array
    private Scanner inputStream = null;
    private int[] theArray = new int[MAX_SIZE];
    private boolean strangeInt = false;
    private int total = 0;

// constructor to set the file name

public MyFile(String theName) { // constructor to set the file name
    this.fileName = new String(theName);

    // you may or may not want to do other stuffs here
}

public void openFile() {
    System.out.println("opening file: " + fileName);
    try {
        inputStream = new Scanner(new FileInputStream("src/davi0030_a03/"
                + fileName));
    } catch (FileNotFoundException e) {
        System.out.println("File was not found or could not be opened");

    }
}

// log a message on whether two ints in the file add to target
public void findPair(int target) {
    openFile();
    fileToArray();
    findStrangeInt();
    findTotal();


}
public void findTotal(){
    inputStream.reset();
    while(inputStream.hasNext()){
        if(inputStream.hasNextInt()){           
            total +=1;
        }
        inputStream.next();
    }
    System.out.println(total);

}

public void findStrangeInt() {
    inputStream.reset();
    while (inputStream.hasNext()) {

        try {

            Integer.parseInt(inputStream.next());
        } catch (NumberFormatException nfe) {
            strangeInt = true;
        }
    }
    if (strangeInt = true) {
        System.out.println("File contains an incorrectly written int");
    }
}

public void fileToArray() {
    inputStream.reset();
    while (inputStream.hasNext() && count < MAX_SIZE) {
        if (inputStream.hasNextInt()) {
            theArray[count] = inputStream.nextInt();
            count++;
        }

    }

}

// print the content of the file
public void printFile() {
    openFile();
    inputStream.reset();
    System.out.println("Printing content of file " + fileName);
    while (inputStream.hasNext()) {

        try {

            int convert = Integer.parseInt(inputStream.next());
            System.out.println(convert);
        } catch (NumberFormatException nfe) {
            System.out.println("xxx");
        }
    }

}

}

文件内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

B'/ P>

d

1 个答案:

答案 0 :(得分:0)

编辑:我的解决方案很可能解决了搜索文件的逻辑问题。但是,我建议你阅读一些其他问题的评论。这里的IO处理特别需要一些改进。

我相信你的问题在于你的声明。根据Scanner类here上的java文档,方法.hasNextInt()根据扫描的下一个元素返回。我认为你假设只要文件中有整数就会返回true。不是这种情况。如果扫描程序遇到的第一件事不是int,则返回false并退出while循环。这将解释返回的0,即初始化变量的值&#39; total&#39;至。我建议你做以下的事情:

while(scanner.hasNext()){
    if(scanner.hasNextInt()){           
        total +=1;
    }
    scanner.next();
}