我不确定我的程序正在读取文件输入我已经问过它

时间:2016-02-25 21:15:35

标签: java arraylist java.util.scanner

这是我的代码,我有一个应该读取文件并将每个整数添加到ArrayList中的赋值,将列表分成两半并将一半放在一个列表中,另一半放在另一个列表中,对列表进行排序,然后合并它们,并从随机索引中打印50个这样的整数。该文件包含大量整数,这就是随机索引如此之高的原因。

import java.util.*;
import java.io.*;
public class ProjectList 
{
    static ArrayList<Integer> myList = new ArrayList<>();
    static ArrayList<Integer> myList1 = new ArrayList<>();
    static ArrayList<Integer> myList2 = new ArrayList<>();
    static int size = myList.size();
    static int size1 = myList1.size();
    static int size2 = myList2.size();

    public static void readFile() throws FileNotFoundException
    {
        Scanner input = new Scanner("numbers.txt");
        while (input.hasNextInt())
        {
            myList.add(input.nextInt());
        }
    }

    public static void dividePoint()
    {
        for (int i = 0; i < size/2; i++)
        {
            myList1.add(myList.get(i));
        }
        for (int i = size/2; i < size; i++)
        {
            myList2.add(myList.get(i));
        }
    }

    public static void sort()
    {
        int x = 0;
        int y = 0;
        for (int j = 0; j < size; j++)
        {
            for (int i = 0; i < size - 1; i++)
            {
                x = myList1.get(i);
                y = myList1.get(i + 1);
                if (x > y)
                {
                    myList1.remove(i);
                    myList1.remove(i + 1);
                    myList1.add(i, y);
                    myList1.add((i + 1), x);
                }
            }
        }
        for (int j = 0; j < size; j++)
        {
            for (int i = 0; i < size - 1; i++)
            {
                x = myList2.get(i);
                y = myList2.get(i + 1);
                if (x > y)
                {
                    myList2.remove(i);
                    myList2.remove(i + 1);
                    myList2.add(i, y);
                    myList2.add((i + 1), x);
                }
            }
        }
    }

    public static void merge()
    {
        while (size1 + size2 > 0)
        {
            int x = myList1.get(0);
            int y = myList2.get(0);
            if (x < y)
            {
                myList.add(myList1.get(0));
                System.out.println("Now removing " + myList1.get(0) + "from myList1.");
                myList1.remove(0);
            }
            if (y < x)
            {
                myList.add(myList2.get(0));
                myList2.remove(0);
            }
        }
    }

    public static void printRandom()
    {
           Random dice = new Random();
           int random = dice.nextInt(1000);
           for (int i = random; i < random + 51; i++)
           {
               System.out.println(myList.get(i));
           }
    }

    public static void main(String[] args) throws FileNotFoundException
    {
        readFile();
        dividePoint();
        sort();
        merge();
        printRandom();
    }
}

我的问题出现在每当我运行main时,没有任何东西弹出。我尝试了一些解决方案,例如创建一个新文件并在其中只放置大约15个整数,以便程序没有那么多的读取,并且还将文件从其原始的“.dat”格式更改为“ .txt“文件,但那些没有取得成功的结果。

2 个答案:

答案 0 :(得分:0)

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner(java.io.File)

根据Java Scanner API,您可以向其发送要读取的文件。在您的情况下,您正在使用 -

new Scanner (String)

- 这意味着你正在阅读传递它的任何String,而不是文件本身。尝试像 -

这样的东西
File file = new File("yourFileName.txt");
Scanner scanner = new Scanner(file);

答案 1 :(得分:0)

正如上面已经提到的,您的问题实际上是您通过new Scanner("numbers.txt")而非new Scanner(new File("numbers.txt"))初始化扫描程序。

另外,我注意到,您正在尝试在阅读后对列表进行排序。您的方法看起来很糟糕[{3}}。但如果排序不是您当前的任务,您可以使用Collections.sort(myList)代替

dividePoint();
sort();
merge();