1

嗨,我整个夏天都在上编程课,需要创建一个从文件读取输入的程序。输入文件包括 DNA 序列 ATCGAGG 等,文件中的第一行说明需要比较多少对序列。其余的是成对的序列。在课堂上,我们使用 Scanner 方法从文件中输入行,(我阅读了有关 bufferedReader 的内容,但我们没有在课堂上介绍它,所以不熟悉它)但是我不知道如何编写代码来比较两行Scanner 方法同时进行。

我的尝试:

public static void main (String [] args) throws IOException 
{
File inFile = new File ("dna.txt");

Scanner sc = new Scanner (inFile);
while (sc.hasNextLine())
{
  int pairs = sc.nextLine();
  String DNA1 = sc.nextLine();
  String DNA2 = sc.nextLine();
  comparison(DNA1,DNA2);
}
sc.close();
}

如果它们有共同的任何共同字符,比较方法将采用一对序列并输出。另外,我将如何继续输入下一对,任何见解都会有所帮助.. 只是被难住了,谷歌让我更加困惑。谢谢!

编辑

这是示例输入

7
atgcatgcatgc
AtgcgAtgc
GGcaAtt
ggcaatt
GcT
gatt
aaaaaGTCAcccctccccc
GTCAaaaaccccgccccc
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
gctagtacACCT
gctattacGcct
4

1 回答 1

0

首先你为什么这样做:

while (sc.hasNextLine())
{
  int pairs = sc.nextLine();

虽然您只在一行中有对而不是对和两行输入,但是一次有多少行?从while循环中移动读取对并将其解析为int,然后没关系,但如果您知道有多少行,您可以使用它来停止读取行。

第二:

throws IOException

可能无关紧要,但是,如果您不关心异常,您真的不知道如何尝试捕获并假设跳过?

比较,如果您读取字符串,则字符串具有“等于”方法,您可以使用该方法比较两个字符串。

谷歌不会帮你解决这些问题,你只是不知道这一切,但如果你想知道然后搜索基本的东西,比如输入谷歌“字符串比较 java”,不要认为你可以找到输入“阅读”的解决方案使用扫描仪将输入文件中的两行“输入谷歌,你必须一步一步地将问题切割成更小的部分,这就是软件开发人员正在做的方式。

好的,我有 progz 不知何故为我工作,只是找到有东西的行,然后即使我有一部分也打印出来,所以对于这样的事情来说,蛮力是可以的:

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class program
{

public static void main (String [] args) throws IOException 
{
File inFile = new File ("c:\\dna.txt");

Scanner sc = new Scanner (inFile);
int pairs = Integer.parseInt(sc.nextLine());
for (int i = 0; i< pairs-1; i++)
{
    //ok we have 7 pairs so we do not compare everything that is one under another
  String DNA1 = sc.nextLine();
  String DNA2 = sc.nextLine();
  Boolean compareResult = comparison(DNA1,DNA2);

  if (compareResult){
    System.out.println("found the match in:" + DNA1 + " and " + DNA2)  ;
  }
}
sc.close();
}


public static Boolean comparison(String dna1, String dna2){

    Boolean contains = false;
    for (int i = 0; i< dna1.length(); i++)
    {
        if (dna2.contains(dna1.subSequence(0, i)))
        {
            contains = true;
            break;
        }
        if (dna2.contains(dna1.subSequence(dna1.length()-i,dna1.length()-1 )))
        {
            contains = true;
            break;
        }       
    }

    return contains;    
}

}
于 2013-07-26T23:11:05.430 回答