在数组和数组列表之间遇到搜索方法问题

时间:2015-08-19 19:57:00

标签: java arrays search arraylist

好的,所以我试图设计一个简单的程序来检查长度为4个字符的子字符串是否在所有初始字符串中。这是我的代码如下:

public class StringSearch{
private String[] s1Array = {"A","C","T","G","A","C","G","C","A","G"};
private String[] s2Array = {"T","C","A","C","A","A","C","G","G","G"};
private String[] s3Array = {"G","A","G","T","C","C","A","G","T","T"};
//{for (int i = 0; i < s1Array.length; i++){
//    System.out.print(s1Array[i]);
//}}//check if Array loaded correctly
/**
 * This is the search method.
 * 
 * @param  length   length of sub string to search
 * @param  count    counter for search engine
 * @param  i        for-loop counter
 * @return subStr   returns strings of length = 4 that are found in all 3 input strings with at most 
 *                  one mismatched position.
 */
public String Search()
{
    int length = 4;
    int count = 0;
    int i = 0;
    ArrayList<StringSearch> subStr = new ArrayList<StringSearch>();
    //String[] subStr = new String[4];
    do
    {
    for (i = count; i < length; i++){
        subStr.add(s1Array[i]); // cant find .add method???
        count = count + 1;
    }
    if (s2Array.contains(subStr) && s3Array.contains(subStr)){ //can't find .contains method???
        System.out.println(subStr + "is in all 3 lists.");
    }
    if (count = s1Array.length){
        System.out.println("Task complete.");
    }
    else{
        count = count - length;
        count = count + 1;
    }
    }while (count <= s1Array.length);
}

}

由于某种原因,Java似乎无法找到.add或.contains方法,我不知道为什么。所以我的方法是将每个字符串初始化为一个数组(因为赋值指定每个字符串的长度恰好是N个元素,在这种情况下N = 10),其中1个字母是1个元素。我接下来要做的是设置一个for循环来扫描s1Array并将前4个元素添加到ArrayList subStr,用于搜索s2Array和s3Array。无论出于何种原因,这里都是.add不是一个有效的方法。评论出来并再次编译,我也遇到了一个问题,.contains方法不是一个有效的方法。为什么这不起作用?我错过了什么?从逻辑上讲,它似乎有意义,但我想也许我在语法中缺少一些东西?我将不胜感激,因为我是Java新手。

4 个答案:

答案 0 :(得分:1)

这里有很多错误和误解。

让我们从#1

开始
ProjectC

制作一个字符串数组很愚蠢,你应该使用一个字符串或一个字符数组。

private String[] s1Array = {"A","C","T","G","A","C","G","C","A","G"};

或者

private String s1 = "ACTGACGCAG";

现在#2

private char[] s1Array = {'A','C','T','G','A','C','G','C','A','G'};

这意味着您正在尝试创建一个包含StringSearch类型对象的ArrayList。 StringSearch是一个包含三个数组和搜索功能的类,所以我认为这不是你想要的。

如果你想列出3个字符串,可以这样做:

ArrayList<StringSearch> subStr = new ArrayList<StringSearch>();

现在说你将s1,s2和s3定义为字符串,你可以这样做。

ArrayList<String> stringList = new ArrayList<String>();
stringList.add(s1);
stringList.add(s2);
stringList.add(s3);

上面的代码应该达到你想要做的样子。但是,应该注意的是,这不是最有效的方式,只是一种方式。你应该从一些更基本的概念开始,从你到目前为止的代码来判断。

答案 1 :(得分:0)

在将subStr声明为ArrayList后,您可以调用add或仅包含StringSearch对象作为参数。

答案 2 :(得分:0)

而不是:

ArrayList<StringSearch> subStr = new ArrayList<StringSearch>();

将其替换为:

String subStr = "";

在for循环中,将s1中的前4个字母放在自己的字符串(subStr)中,添加以下行:

subStr += s1Array[i];

此外,s1Array是一个String数组,而不是String。 .contains方法是属于String变量的方法,因此对于例如。你实现它的方式,你可以说s1Array [i] .contains。但你不能说s1Array.contains。如果你将String数组更改为Strings并编辑你的代码以适应,那么一切都应该按照你期望的方式工作。

答案 3 :(得分:0)

首先,您需要了解Java泛型的概念。 关于泛型的最基本的事情是,一旦你声明了一个集合,这里就是arraylist,因为你只能添加StringSearch的对象。
其次,从逻辑上讲,你可以做的是实现一个叫做的算法 Longest Common Subsequence.成对检查阵列中最长的子序列是否为4。