Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建包含两个字段的自定义类列表并获得输出?_Java_Arrays_Class_List_Input - Fatal编程技术网

Java 如何创建包含两个字段的自定义类列表并获得输出?

Java 如何创建包含两个字段的自定义类列表并获得输出?,java,arrays,class,list,input,Java,Arrays,Class,List,Input,我需要在Java中列出一个基因序列,以及我关心的部分的起始位置。我使用一个.txt文件作为输入,然后按顺序搜索“GT”。一旦找到它,我想将它存储在一个具有相应索引的数组中。我不能让它发生。请引导我 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel

我需要在Java中列出一个基因序列,以及我关心的部分的起始位置。我使用一个.txt文件作为输入,然后按顺序搜索“GT”。一旦找到它,我想将它存储在一个具有相应索引的数组中。我不能让它发生。请引导我

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;


class Signal{
    public String signal;
    public int  pos;
    public Signal(String s, int p) {
        s = signal;
        p = pos;

    }


public static String inputSequence(String filename) throws IOException{


        FileInputStream stream = new FileInputStream(new File(filename));

        try {
            FileChannel fc = stream.getChannel();
            MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());

    return Charset.defaultCharset().decode(bb).toString();

}
        finally{
            stream.close();
        }
    }
    public static void main(String[] args) {

     String c1 = "GT";
     String seq = null;
         List<Signal> s2 = new ArrayList<Signal>();
         String s1;
         int i;

         try {
            seq = inputSequence(path);
         } catch (IOException ex) {
            Logger.getLogger(Signal.class.getName()).log(Level.SEVERE, null, ex);
         }
         for (i = 0; i < seq.length() - 2; i++ ) {
     s1 = seq.substring(i,i+2);
        if (s1.equals(c1)){

            Signal ss = new Signal(s1, i);
            s2.add(ss);

}

    }
         System.out.print(s2);

    }
}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.nio.MappedByteBuffer;
导入java.nio.channels.FileChannel;
导入java.nio.charset.charset;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.logging.Level;
导入java.util.logging.Logger;
类信号{
公共字符串信号;
公共int pos;
公共信号(字符串s,整数p){
s=信号;
p=pos;
}
公共静态字符串输入序列(字符串文件名)引发IOException{
FileInputStream=新FileInputStream(新文件(文件名));
试一试{
FileChannel fc=stream.getChannel();
MappedByteBuffer bb=fc.map(FileChannel.MapMode.READ_ONLY,0,fc.size());
返回Charset.defaultCharset().decode(bb.toString();
}
最后{
stream.close();
}
}
公共静态void main(字符串[]args){
字符串c1=“GT”;
字符串seq=null;
列表s2=新的ArrayList();
字符串s1;
int i;
试一试{
seq=输入顺序(路径);
}捕获(IOEX异常){
Logger.getLogger(Signal.class.getName()).log(Level.SEVERE,null,ex);
}
对于(i=0;i
您的构造函数应如下所示:

public Signal(String s, int p) {
    signal = s;
    pos = p;
}

之后,它应该可以正常工作。

您可以在循环中使用
indexOf
查找所有出现的“GT”。如下所示:

 String c1 = "GT";
 String seq = null;
 List<Signal> s2 = new ArrayList<Signal>();

 try {
    seq = inputSequence(path);
 } catch (IOException ex) {
    Logger.getLogger(Signal.class.getName()).log(Level.SEVERE, null, ex);
 }

 int index = seq.indexOf(c1, 0);
 do{
      if(index != -1){
          Signal ss = new Signal(c1, index);
          s2.add(ss);
          System.out.println(index);
      }
      index = seq.indexOf(c1, index+2);
 }while(index != -1);

 System.out.println(s2);

试着准确地解释什么是你不能工作的,这样人们就可以看到一个特定的问题。实际上,这个构建成功了,但我无法得到我想要的输出。我试图将其作为信号类的数组列表,我希望得到如下输出:[(GT,5),(GT,12),(GT,27)],但是,我得到的是:[信号。Signal@42e816]我需要弄清楚在列表中存储两个字段(一个字符串,一个整数)多亏了dogbane,不能完全解释我的问题是我的错。我找到了所有的GT。然而,我试图将其作为信号类的arrayList,我希望得到如下输出:[(GT,5),(GT,12),(GT,27)],但我得到的是:[信号。Signal@42e816]我有一个问题,dogbane,如果我想检查序列中的两个字符串,比如c1=“GT”c2=“ATG”,该怎么办您应该创建一个以c1为参数并返回信号列表的方法。然后你可以用“GT”来调用这个方法,然后再用“ATG”来调用。请你再帮我一点,我知道我的要求可能太高了,但我真的是一个编程新手,不擅长自我教育。谢谢AnshulGarg,但这并不能解决我的问题。在我对《罗布麻》的评论中,我做了更多的解释。
@Override
public String toString(){
    return "(" + signal + "," + pos + ")";
}