2013-07-26 2 views
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 
+0

:

좋아, 난 그냥 뭔가가 선을 발견 한 후이 같은 건에 대한 확인이다 무력 그래서 나는 부분이 있더라도 그들을 밖으로 인쇄, 어떻게 든 나를 위해 wokrked progz이 'int pairs = Integer.parseInt (sc.nextLine());'어쨌든'dna.txt' 파일의 구조를 참조 할 수 있습니다. – Smit

+0

그러나 내가 이해 한 것은'while' 루프 밖에서'pairs'를 읽어야한다는 것입니다. – Smit

+0

while 루프는 그냥 다른 줄이 있으면 인쇄 할 것이고 첫 줄은 쌍을 결정하므로 루프 안으로 들어가야한다는 것을 알았습니다 ... 여전히 txt 외부의 첫 줄을 읽겠습니까 루프? –

답변

0

첫째 :

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

당신이 쌍 만에 한 줄없는 쌍의 두 줄을 가지고 있지만 입력하지만 행의 수는 한 번입니까? looop 동안 읽는 쌍을 이동시켜 int로 구문 분석하면 문제가되지 않지만 줄 수를 알면 줄을 읽는 것을 멈추는 데 사용할 수 있습니다.

둘째 :

throws IOException 

정말 당신이 캐치를 시도하는 방법을 알고 당신이 예외에 대해 걱정하지 않는 경우의 건너 뛸 말을하지 않는, 관련성이없는 있지만, 수 있는가?

문자열을 읽으면 문자열에 두 개의 문자열을 비교할 수있는 "같음"메서드가 있습니다.

Google은 이러한 문제를 해결하는 데 도움이되지 않을 것입니다. 그 모든 것을 알지는 못하지만, Google에서 "string comparison java"와 같은 기본 정보를 검색하고 싶다면 찾을 수 있다고 생각하지 마십시오. "Scanner를 사용하여 입력 파일에서 두 줄을 읽는 것"을 Google에 입력하면 단계별로 가서 문제를 작은 조각으로 잘라야합니다. 이것이 소프트웨어 개발자가 수행하는 방식입니다.

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;  
} 

} 
+0

equals 메서드는 작동하지 않습니다. 예를 들어 문자열 1이 AGCTATTT이고 문자열 2가 ATCTAGGGG이고 공통된 시퀀스는 "CTA"이고 equals는이를 catch하지 않기 때문입니다. 웃음과 웃긴 thats는 thats 히 내가 인터넷으로 검색했던 것이기 때문에 that 's이다. 그러나 나는 내가 이것을 묻는 단 한사람의 사람이 될 수 없다라고 상상했다. 우리는 지금까지 스캐너, Filewriter 및 Printwriter를 잡을 수는 없다는 것을 배웠습니다. –

+0

DNA 코딩에 대해서는 많이 알지 못합니다. 그런 다음 문자열의 일부만을 컴프레션 할 필요가 있습니다. 그리고 그것은 사전에서 검색하는 또 다른 항목입니다. 첫 번째'nextLine()'에서 얻은 라인을 나눠서 두 번째 문자열에서'contains()'메소드로 그 부분을 체크해야합니다. – Mateusz

+0

@ user2624368 나는 좀 괜찮은 짐승 같은 솔루션으로 내 대답을 조금 업데이트했다. – Mateusz

관련 문제