4
respostas

Transcrição de variáveis

Galera, estou precisando de ajuda em uma atividade, eu tenho que transcrever o DNA em RNA dado a seguinte sequência: G>C C>G T>A A>U

O código de exemplo é esse:

class Main {
  private static Main rnaTranscription;
  private String[] tests = new String[] {"C", "G", "T", "A", "ACGTGGTCTTAA"};
  private String[] expec = new String[] {"G", "C", "A", "U", "UGCACCAGAAUU"};

  // Escreva essa função RNA para que transcreva o DNA de entrada.
  public String transcribe(String dna) {
    return "";
  }

  public static void main(String[] args) {
    rnaTranscription = new Main();

    for (int i = 0; i < rnaTranscription.tests.length; i = i + 1) {
      String rna;
      rna = rnaTranscription.transcribe(rnaTranscription.tests[i]);

      System.out.print("Teste " + i + "\n");
      System.out.print("Resultado esperado: " + rnaTranscription.expec[i] + "\n");
      System.out.print("Resultado obtido: " + rna + "\n");

      if (rna != rnaTranscription.expec[i]) {
        System.out.print("Falhou!\n");
        break;
      }

      System.out.print("\n");
    }
  }
}

Minha duvida é: Eu defino as variáveis e depois eu transcrevo como RNA? Como eu posso fazer isso?

4 respostas

Guilherme, antes de implementar o método "transcribe" altere esse if:

if (rna != rnaTranscription.expec[i]) {
        System.out.print("Falhou!\n");
        break;
}

para:

if (!rna.equals(rnaTranscription.expec[i])) {
    System.out.print("Falhou!\n");
    break;
}

Pois em java comparamos strings com .equals()

Partindo para o método, uma forma não muito otimizada de fazer a substituição é vc transformar o parametro dna em um Array e para cada item efetuar um replace:

public String transcribe(String dna) {        
    List<String> aux = Arrays.asList(dna.split(""));          
    String retorno = "";
    for(String x : aux){
        switch(x){
            case "C" : 
                retorno+="G";
                break;
            case "G":
                retorno+="C";
                break;
            case "T":
                retorno+="A";
                break;
            case "A":
                ret orno += "U";
                break;
         }
    }              
    return retorno;
}

Quando você avançar na plataforma, faça o curso de Java 8 que verá que dá pra escrever o mesmo método de uma forma muito mais simple, mais o menos assim:

 return aux.stream()                  
    .reduce("",(str1, str2) -> {
        return str1 + (str2.equals("C") ?
            "G" : str2.equals("G") ?
              "C" : str2.equals("T") ?
              "A" : "U");
        });

Provavelmente deve ter outras formas para implementar o método, a que eu pensei foram essas.

PS: Desculpe a formatação, ainda não sei deixar os blocos de código edentados corretamente

Espero ter ajudado :D

Oi Guilherme. Complementando o que o Vitor disse, uma outra opção seria usar sua função transcribe (que pelo que entendi recebe uma base nitrogenada do DNA e devolve a correspondente do RNA).

Sendo assim, sua função transcribe ficaria mais ou menos assim:

public String transcribe(String dna) {
    if (dna.equals("C")) return "G";
    if (dna.equals("G")) return "C"; 
    if (dna.equals("T")) return "A";
    return "U"; 
}

Era isso que você queria?

Olá Giovanna, no primeiro momento imaginei o método da mesma forma que vc escreveu, mas como o último parâmetro só array não é apenas uma letra, não sei se funcionaria.

Outra coisa, como deixar o bloco de código formatado no comentário da postagem ? Hehe

Ah sim Vitor. Você tem razão, então teríamos que alterar um pouquinho nossa função, seria algo assim:

public String transcribe(String dna) {
    for (int i = 0; i < dna.lenght(); i++) {
        if (dna[i].equals("C")) dna[i] = 'G';
        else if (dna[i].equals("G")) dna[i] = 'C';
        else if (dna[i].equals("T")) dna[i] = 'A';
        else if (dna[i].equals("A")) dna[i] = 'U';
    }
    return dna;

Perceba que no caso da string ser apenas uma letra não teria problema algum, pois o for teria apenas uma iteração, como queríamos.

PS: Para formatar o código eu uso apenas o "Inserir código" do canto superior esquerdo da caixa de texto. (E tabs para indentar).