2016-02-25 20 views
0

這裏是我的代碼,我有一個應該讀取文件的任務,並將每個整數添加到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「文件,但這些文件尚未取得成功。

+0

您正在向掃描器對象傳遞字符串而不是文件對象。改爲創建一個文件對象並傳遞給它,而不是一個字符串。有關更多詳細信息,請查閱javadoc for scanner類。 – Dummy

+0

類似於Scanner input = new Scanner(new FileReader(「numbers.txt」)); – JavaQuest

回答

0

正如上面已經問,你的問題是事實,您通過new Scanner("numbers.txt"),而不是new Scanner(new File("numbers.txt"))初始化掃描儀。

另外,我注意到,您正在嘗試在讀取後對列表進行排序。你的方法看起來不好實施merge sort。但是,如果排序不是您當前的任務,則可以使用Collections.sort(myList)而不是

dividePoint(); 
sort(); 
merge(); 
+0

我知道Java中已有的排序方法,這是一個賦值,我們有一組需要滿足的特定參數。我不確定我的老師有什麼想法,但我很感激你指出了我的錯誤,我甚至沒有注意到我實施了錯誤 –

相關問題