2013-03-26 49 views
0

文本文件中的重複項不應該添加到列表中,但該程序正在輸出列表中的每個單詞不知道爲什麼hasElement方法不工作。我需要創建一個應該被稱爲MTFencoder.java的程序對象,它應該接受一個文本文件的名字作爲命令行參數,這樣如果存在一個叫做story.txt的文本文件,那麼你的程序可以用以下命令調用:不能理解爲什麼arraylist hasElement方法在java中不工作

的java MTFencoder的test.txt

應該產生用於輸入文件的每個字一行輸出,使得當一個字第一次遇到然後輸出爲:

0字

,並且如果這個詞已經在此之前的輸出是單個整數,指定的根據最近使用的(MRU順序)排序已知單詞列表,詞的索引已經遇到。

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

class extmycase 
{ 

    public static void main(String [] args) 
    { 
     Scanner scan=null; 
     Scanner scan1=null; 
     wordlist word=null; 
     String s; 
     int count=0; 

     try 
     { 
      scan=new Scanner(new File(args[0])); 
      scan1=new Scanner(new File(args[0])); 
      while(scan1.hasNext()) 
      { 
       scan1.next(); 
       count++; 
      } 

      System.out.println("No.of words : " + count); 

      word = new wordlist(count); 
      while(scan.hasNext()) 
      { 
       s=scan.next(); 
       if(word.hasElement(s)==true) 
       { 
        System.out.println("has element"); 
       } 
       else 
       { 
        word.add(s); 
       } 
      } 
      word.showlist(); 
     } 
     catch(Exception e) 
     { 
      System.err.println("unable to read from file"); 
     } 
     finally 
     { 
      // Close the stream 
      if(scan != null) 
      { 
       scan.close(); 
      } 
      if(scan1 !=null) 
      { 
       scan1.close(); 
      } 
     } 
    } 
} 

詞表程序

import java.lang.*; 
import java.util.*; 

public class wordlist 
{ 

    public String data []; 
    private int count; 
    private int MAX; 

    public wordlist(int n) 
    { 
     MAX = n; 
     data = new String[MAX]; 
     count = 0; 
    } 

    // Adds x to the set if it is not already there 

    public void add(String x) 
    { 
     if (count<MAX) 
     { 
      data[count++] = x; 
     } 
    } 

    // Removes x from set by replacing with last item and reducing size 

    public void replace(String x) 
    { 
     for(int i=0;i<count;i++) 
     { 
      if(data[i]==x) 
      { 
       data[count]=data[i]; 
       for(int j=i;j<count;j++) 
        data[j]=data[j+1]; 
      }  
     }  
    } 

    // Checks if value x is a member of the set 

    public boolean hasElement(String x) 
    { 
     for(int i=0;i<=count;i++) 
     { 
      if(data[i].equals(x)) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 

    public int findIndex(String x) 
    { 
     for(int i=0;i<=count;i++) 
     { 
      if(data[i].equals(x)) 
      { 
       return i; 
      } 
     } 
      return 0; 
    } 

    public void showlist() 
    { 
     int l=0; 
     for(int i=0;i<count;i++) 
     { 
      System.out.println(data[i]); 
      l++; 
     } 
     System.out.println(l); 
    } 
} 
+4

你能否修正你的代碼的格式,以便正確縮進。 – 2013-03-27 00:30:26

+0

scan&scan1正在讀取相同的文件? args [0] - 所以每次都必須返回TRUE。 – 2013-03-27 00:32:30

+0

if(hasElement(x)== true);這條線的意圖是什麼?這似乎毫無意義。 – 2013-03-27 00:54:20

回答

2

你單詞表永遠不會包含任何元素。它被構造,它將一切設置爲0,然後你看它是否包含單詞,當然它永遠不會做。此外,兩個掃描儀都指向同一個文件,因此每個存在於另一個文件中的單詞都必須存在於另一個文件中,並且所有單詞都將在第一個位置找到這個半冗餘文件。

+0

showlist函數打印整個列表bu唯一的問題是extmycase中的hasElement函數不工作:s = scan.next();如果(word.hasElement(s)== true) System.out.println(「has element」); } else { word.add(s); } – user2209544 2013-03-27 02:16:03

+0

如果showlist正在打印0以外的任何內容,那麼您沒有向我們顯示您的代碼。 – Sinkingpoint 2013-03-27 02:17:35

相關問題