11

我试图将数组中的每个字符串或 int 与另一个数组进行比较,然后根据另一个数组中是否存在该字符串来打印结果: 下面是整个代码:尝试比较两个值时,我在 for 循环中出错.equals(不确定它是否正确,...我是新手)请帮忙!

public class comparer {
public void compare (){

    ArrayList NameofFileinDir = new ArrayList ();
    ArrayList Stocks = new ArrayList();
    // populate array with files names in dir
    try {   
        Scanner reads = new Scanner (new File("G:/Programming/StockDataDownload/NameOfFileinDir.txt"));
        String FileCode;
        while (reads.hasNext()){  
               FileCode = reads.nextLine(); //read next line
                               NameofFileinDir.add(FileCode);

        }
        reads.close();
        }
        catch (IOException e) { 
        }
    // populate array with original stocks
    try {   
        Scanner reads = new Scanner (new File("G:/Programming/StockDataDownload/AllSecurities.txt"));
        String StockCode;
        while (reads.hasNext()){  
               StockCode = reads.nextLine(); //read next line
               Stocks.add(StockCode);

        }
        reads.close();
         for(int i = 0; i < Stocks.size(); i++) {

             for (int j = 0; j < NameofFileinDir.size(); j++) {
                    if (Stocks[i].equals(NameofFileinDir[j])) > 0) {
                        System.out.println("Stock:" + Stocks[i]);}
                    else{
                        System.out.println("Stock not in files:" + Stocks[i]);
                    }
                    }
             }

        }
        catch (IOException e) { 
        }

}}
4

7 回答 7

15
  1. 一个ArrayList不是一个array。to 的语法get the element at index i不同:list.get(i)vs arr[i]. 继续阅读ArrayList,尤其是get(int)方法。

  2. 研究什么String.equals(Object)回报以及这意味着什么。看一眼Object.equals(Object)也不会受到伤害,因为 java 中的每个对象都默认得到这个。

  3. 考虑使用 foreach 循环而不是旧的 for 循环。旧的 for 循环可能非常有用,但这里没有意义。看看这有多干净:

    for (String stock : Stocks) {
        for (String filename : NameofFileinDir) {
            if (stock.equals(filename)) {
                System.out.println(" Stock: " + stocks);
            } else {
                System.out.println("Stock not in files: " + stocks);
            }
        }
    }  
    
  4. ArrayList Stocks = new ArrayList();. 凉爽的。所以你有一个ArrayList. 什么的?!现在,这在技术上并不违法,但是如果您的 java 编译器支持类型参数,那么您确实需要使用它们。改写List<String> stocks = new ArrayList<String>()。现在每个阅读您的代码的人都会立即知道该列表包含什么。此外,编译器将保证您的列表包含字符串。如果您尝试做一些疯狂或愚蠢的事情,例如将一些整数和映射与您的字符串一起放入列表中,编译器会呕吐。

  5. 如果您在 if..else 中打印的内容就是您的意思,那么您的逻辑存在致命缺陷。如果您正在比较的当前库存字符串和文件字符串不相等,则打印“库存不在文件列表中”。但从逻辑上讲,这是否意味着所有的股票字符串和文件字符串都不相等?

于 2013-09-15T16:22:40.480 回答
7

您不能在ArrayList. 你需要打电话get(index)

于 2013-09-15T15:45:47.690 回答
0

您不能通过使用像数组这样的运算符来获取ArrayList对象。使用方法来获取对象。所以改代码 []get()ArrayList

 if (Stocks[i].equals(NameofFileinDir[j])) > 0) {  

  if (Stocks[i].equals(NameofFileinDir.get([j]))) > 0) {
于 2013-09-15T15:49:48.013 回答
0

将 Stocks[i] 更改为 Stocks.get(i) 并将 NameofFileinDir[j] 更改为 NameofFileinDir.get(j)

补充建议:

还将 NameofFileinDir 设置为 A hashSet 以获得更好的性能

还遵循 java camelCase 命名约定,例如将 NameofFileinDir 更改为 nameofFileinDir

于 2013-09-15T15:46:43.900 回答
0

你的错误在这里:

if (Stocks[i].equals(NameofFileinDir[j])) > 0) {

Stocks.get(i).equals(NameofFileinDir.get(j) 首先,你应该说equals函数返回一个布尔值,所以你比较一下true/false > 0。你可以把> 0)

于 2013-09-15T15:51:02.580 回答
0

如果您使用的是 ArrayList,那么您需要使用 get(index) 方法来访问该索引处的变量。.equals(object) 也返回一个布尔值,所以不需要 > 0

if (Stocks.get(i).equals(NameOfFileINDir.get(j)) {
}
于 2013-09-15T15:54:08.237 回答
0

如果你不想为每个循环使用,那么你可以遵循这个。

for(int i = 0; i < Stocks.size(); i++) {
    for (int j = 0; j < NameofFileinDir.size(); j++) {
        if (Stocks[i].equals(NameofFileinDir[j])) > 0) {
            System.out.println("Stock:" + Stocks[i]);}
        else{
            System.out.println("Stock not in files:" + Stocks[i]);
        }
    }
}

在上面的代码中,不是 Stocks[i],而是:

for(int i = 0; i < Stocks.size(); i++) {
    for (int j = 0; j < NameofFileinDir.size(); j++) {
        if (Stocks.get(i).equals(NameofFileinDir.get(j))) > 0) {
              System.out.println("Stock:" + Stocks[i]);}
        else{
              System.out.println("Stock not in files:" + Stocks.get(i));
        }
    }
}
于 2017-05-05T18:23:05.930 回答