gpt4 book ai didi

java - 字符匹配 DNA 程序

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:18 25 4
gpt4 key购买 nike

我应该使用命令行参数编写一个程序来放入 3 个不同的文件:一个人类 DNA 序列、一个小鼠 DNA 序列和一个未知序列。如果不使用数组,我必须比较每个字符并给出匹配百分比以及它最接近匹配的字符。这是我到目前为止所拥有的

import java.io.File;
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.*;
public class Lucas_Tilak_Hw8_DNA
{
public static void main (String args[]) throws IOException
{
//First let's take in each file
File MouseFile = new File(args[0]);
File HumanFile = new File(args[1]);
File UnknownFile = new File(args[2]);

//This allows us to view individual characters
FileInputStream m = new FileInputStream(MouseFile);
FileInputStream h = new FileInputStream(HumanFile);
FileInputStream u = new FileInputStream(UnknownFile);

//This allows us to read each character one by one.
DataInputStream mouse = new DataInputStream(m);
DataInputStream human = new DataInputStream(h);
DataInputStream unk = new DataInputStream(u);

//We initialize our future numerators
int humRight = 0;
int mouRight = 0;

//Now we set the counting variable
int countChar = 0;
for( countChar = 0; countChar < UnknownFile.length(); countChar++);
{
//initialize
char unkChar = unk.readChar();
char mouChar = mouse.readChar();
char humChar = human.readChar();

//add to numerator if they match
if (unkChar == humChar)
{
humRight++;
}
if (unkChar == mouChar)
{
mouRight++;
}
//add to denominator
countChar++;
}
//convert to fraction
long mouPercent = (mouRight/countChar);
long humPercent = (humRight/countChar);

//print fractions
System.out.println("Mouse Compare: " + mouPercent);
System.out.println("Human Compare: " + humPercent);
if (mouPercent > humPercent)
{
System.out.println("mouse");
}
else if (mouPercent < humPercent)
{
System.out.println("human");
}
else
{
System.out.println("identity cannot be determined");
}
}
}

如果我为我使用的每个文件输入随机代码 {G, T, C, A},它似乎不会比较字符,所以我得到 O = mouPercent 和 0 = humPercent。请帮忙!

最佳答案

代码中的几个错误是罪魁祸首。

for() 语句末尾删除 ;。基本上,您仅从每个文件中读取一个字符,并且您的比较严格限于第一组字符。它们不太可能有任何重叠。

第二个错误:不要使用“文件长度”。字符通常被编码为多个字节,因此这种方式会得到不一致的结果。最好查询流以查看是否有更多可用字节,并在用完要读取的字节时停止。大多数 Streams 或 Reader 都有一个 availableready 方法,可让您确定是否有更多内容可供阅读。

第三个错误:DataInputStream 不会执行您期望的操作。 Read the docs -- 你会得到奇怪的字符,因为它总是拉出 2 个字节并使用修改后的 UTF-8 方案构建一个字符,该方案仅真正映射到由相应的 DataOutput 实现类编写的字符。你应该research并修改您的代码以使用 BufferedReader 代替,这将更自然地尊重其他字符编码,例如 UTF-8 等,这很可能是您正在读取的文件的编码。

TL;DR? 你的循环已损坏,文件长度对于循环终止条件来说是一个坏主意,并且 DataInputStream 是一个特殊的 unicorn ,因此在处理普通文件中的字符时请使用 BufferedReader 代替。

关于java - 字符匹配 DNA 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22562908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com