【问题标题】:Comparing two strings in ArrayList比较 ArrayList 中的两个字符串
【发布时间】:2016-09-20 16:39:42
【问题描述】:

我在比较循环中的两个字符串时遇到问题。

假设我想在一个 ArrayList 中放入两个单词。我决定通过 inputDialogeBox 写这两个词并将它们放在列表中。如果两个单词相同,则不会将第二个单词添加到列表中。

但是当我比较这两个字符串时,程序似乎并不关心它们是否相同并且都在列表中。

这是我的代码:

package testing;

import javax.swing.*;

public class Testing {

    public static void main(String[] args) {
        Word c = new Word();

        // word 1
        String word;
        word = JOptionPane.showInputDialog("Write a word: ");
        System.out.println("word1 = " + word);
        c.setWord(word);

        // word 2
        word = JOptionPane.showInputDialog("Write a new word: ");
        System.out.println("word2 = " + word);
        c.setWord(word); // sätt kortet≤

        System.out.println("words = " + c.getWord().size() + " " + c.getWord());
    }
}

还有我的班级:

package testing;

import java.util.ArrayList;

public class Word {

    ArrayList<String> words = new ArrayList<>();

    public void setWord(String word) {
        // set first value in arraylist to start the loop
        if (words.isEmpty()) {
            words.add("default");
        }

        for (int i = 0; i < words.size(); i++) {
            if (!words.get(i).equals(word)) {
                words.add(word);
                System.out.println("words.get(i): " + words.get(i) + "  word: " + word);
                break;
            }
        }
    }

    public ArrayList getWord() {
        return words;
    }
}

我的猜测是问题在于我添加了一个默认值,只是为了得到一些可以循环的东西。否则,如果 ArrayList 为空,我将无法启动循环。但也许有更好的方法?

谢谢

【问题讨论】:

  • 如果列表中有 any 个不是该单词的单词,则您正在将该单词添加到列表中。
  • 对不起。我是初学者 :-)
    1) 如果 ArrayList 为空 - 将第一个值添加到列表中 2) 我循环遍历该唯一值。 3)如果字符串(默认)与第一个单词不同,它将第一个单词添加到 ArrayList 4)如果字符串(默认和 word1)不是第二个单词,它将它添加到 ArrayList 但我猜我把它搞砸了:-)
  • 如果要防止重复,请使用 Set,而不是 List。
  • (顺便说一句,我如何以正确的格式编辑我的帖子?)
    对不起。我是初学者:-) 1) 如果 ArrayList 为空 - 将第一个值添加到列表中 2) 我循环遍历该唯一值。 3)如果字符串(默认)与第一个单词不同,它将第一个单词添加到 ArrayList 4)如果字符串(默认和 word1)不是第二个单词,它将它添加到 ArrayList 但我猜我把它搞砸了:-)

标签: java arraylist


【解决方案1】:

在这些类型的情况下,您应该使用 Set 而不是 ArrayList。 仍然下面的代码修改应该对您有所帮助。

public void setWord(String word) {'
        boolean found = false;    
        for (int i = 0; i < words.size(); i++) {
            if (words.get(i).equals(word)) {
                found=true;
                break;
            }
        }
        if(!found){
           words.add(word);
        }
    }

【讨论】:

    【解决方案2】:

    问题是您没有检查所有值,而只是一一检查。对于第一个单词,您检查“默认”并添加到列表中。对于第二个词,您首先检查“默认”,因为这不相等,所以您也将该词添加到列表中。

    public void setWord(String word) {
    
        boolean exists = false;
        for (int i = 0; i < words.size(); i++) {
            if (words.get(i).equals(word)) {
               exists = true;
               break;
            }
        }
        if (!exists) {
            words.add(word);
            System.out.println("words.get(i): " + words.get(i) + "  word: " + word);
        }
    }
    

    或者你可以使用 ArrayList contains:

    public void setWord(String word) {
    
        if(!words.contains(word)) {
            words.add(word);
            System.out.println("words.get(i): " + words.get(i) + "  word: " + word);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-23
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多