2015-12-27 2 views
-3

Я уже некоторое время пытаюсь решить эту проблему, но безрезультатно. Когда я запускаю код, я получаю это сообщение об ошибке: несовместимые типы: edu.duke.StorageResource не может быть преобразован в java.lang.String по строке String geneList = FMG.storeAll(dna);. Означает ли это, что я пытаюсь заставить объект edu.duke работать с объектом типа java.lang.String? Что мы будем решать по этой проблеме?Сообщение об ошибке для типа StorageResource

Вот мой код до сих пор:

package coursera_java_duke; 
import java.io.*; 
import edu.duke.FileResource; 
import edu.duke.StorageResource; 
import edu.duke.DirectoryResource; 

public class FindMultiGenes5 { 
    public int findStopIndex(String dna, int index) { 
     int stop1 = dna.indexOf("TGA", index); 
     if (stop1 == -1 || (stop1 - index) % 3 != 0) { 
      stop1 = dna.length(); 
     } 
     int stop2 = dna.indexOf("TAA", index); 
     if (stop2 == -1 || (stop2 - index) % 3 != 0) { 
      stop2 = dna.length(); 
     } 
     int stop3 = dna.indexOf("TAG", index); 
     if (stop3 == -1 || (stop3 - index) % 3 != 0) { 
      stop3 = dna.length(); 
     } 
     return Math.min(stop1, Math.min(stop2, stop3)); 
    } 

    public StorageResource storeAll(String dna) { 

     //CATGTAATAGATGAATGACTGATAGATATGCTTGTATGCTATGAAAATGTGAAATGACCCAdna = "CATGTAATAGATGAATGACTGATAGATATGCTTGTATGCTATGAAAATGTGAAATGACCCA"; 
     String geneAL = new String(); 
     String sequence = dna.toUpperCase(); 
     StorageResource store = new StorageResource(); 
     int index = 0; 


     while (true) { 
      index = sequence.indexOf("ATG", index); 
      if (index == -1) 
       break; 

      int stop = findStopIndex(sequence, index + 3); 

      if (stop != sequence.length()) { 
       String gene = dna.substring(index, stop + 3); 
       store.add(gene); 
       //index = sequence.substring(index, stop + 3).length(); 
      index = stop + 3; // start at the end of the stop codon 
      }else{ index = index + 3; 
     } 

    } 
    return store;//System.out.println(sequence); 
    } 
    public void testStorageFinder() { 
     DirectoryResource dr = new DirectoryResource(); 
     StorageResource dnaStore = new StorageResource(); 
    for (File f : dr.selectedFiles()) { 
     FileResource fr = new FileResource(f); 
     String s = fr.asString(); 
     dnaStore = storeAll(s); 
     printGenes(dnaStore); 
    } 


     System.out.println("size = " + dnaStore.size()); 

    } 
    public String readStrFromFile(){ 

     FileResource readFile = new FileResource(); 

     String DNA = readFile.asString(); 

     //System.out.println("DNA: " + DNA); 

     return DNA; 

    }//end readStrFromFile() method; 
    public float calCGRatio(String gene){ 

     gene = gene.toUpperCase(); 
     int len = gene.length(); 
     int CGCount = 0; 

     for(int i=0; i<len; i++){ 

      if(gene.charAt(i) == 'C' || gene.charAt(i) == 'G') 
       CGCount++; 

     }//end for loop 

     System.out.println("CGCount " + CGCount + " Length: " + len + " Ratio: " + (float)CGCount/len); 
     return (float)CGCount/len; 
    }//end of calCGRatio() method; 
    public void printGenes(StorageResource sr){ 

     //create a FindMultiGenesFile object FMG 
     FindMultiGenes5 FMG = new FindMultiGenes5(); 

     //read a DNA sequence from file 
     String dna = FMG.readStrFromFile(); 

     String geneList = FMG.storeAll(dna); 

     //store all genes into a document 
     StorageResource dnaStore = new StorageResource(); 

     System.out.println("\n There are " + geneList.size() + " genes. "); 

     int longerthan60 = 0; 
     int CGGreaterthan35 = 0; 
     for(int i=0; i<geneList.size(); i++){ 

      if(!dnaStore.contains(geneList.get(i))) 
       dnaStore.add(geneList.get(i)); 

      if(geneList.get(i).length() > 60) longerthan60++; 
      if(FMG.calCGRatio(geneList.get(i)) > 0.35) CGGreaterthan35++; 

     } 

     System.out.println("dnaStore.size: " + dnaStore.size()); 


     System.out.println("\n There are " + dnaStore.size() + " genes. "); 
     System.out.println("There are " + longerthan60 + " genes longer than 60."); 
     System.out.println("There are " + CGGreaterthan35 + " genes with CG ratio greater than 0.35."); 
    }//end main(); 
} 
+1

У вас нет основного метода вызова вашего кода, поэтому мы даже не знаем, что работает. мы также не знаем ввод. – Stultuske

+1

Я немного смущен в понимании этого. 1: Не знаю, что такое пакеты edu, но без этого люди не могут проверить ваш код. 2: Код не выглядит так, как будто он будет работать вообще. Эти 2 могут быть только мной, но также нет места, где вы печатаете вывод, который, как вы ожидаете, fx «3: atgtaa». –

ответ

0

Я нашел ваш пост, я также делаю подобный курс в Duke с помощью этих edu.duke библиотеки.

Когда я получаю это сообщение об ошибке, это потому, что я использую неправильный метод для доступа к нему.

Попробуйте FMD.data(), чтобы получить итерируемость всех генных строк.

Смежные вопросы