好的,所以我试图设计一个简单的程序来检查长度为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新手。
答案 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。