habe ein neues Problem: ich möchte eine Funktion schreiben die String a übergeben bekommt und ein Byte [] zurückgibt, dabei werden die Buchstaben von a mit Zahlen ersetzt, in Zahlen umgeschrieben. Z.B: ist A in a, dann schreibe 1,ist B dann schreibe 2 usw.
"[B@1916a3de" bedeutet:
[ = Ist ein Array
B = vom Typ Byte
@ = Standard-Trennzeichen zwischen Typbezeichner und Hash
1916a3de = Hash als Hexadezimal-Zahl.
Hilfe,ich weiss nicht was ich falsch mache,hier zwei funktionen,und ausgabe ist nicht wie erwartet:
Java:
importjava.util.Scanner;publicclass ATGC {publicstaticbyte[]dnastring2dna(String dnastring){//erhelt string und umwandelt in byte byte dna[]=newbyte[dnastring.length()];for(int i =0; i < dna.length; i++){switch(dnastring.charAt(i)){case'A':case'a':
dna[i]=0;break;case'T':case't':
dna[i]=1;break;case'G':case'g':
dna[i]=2;break;case'C':case'c':
dna[i]=3;break;default:break;}}for(int i=0;i<dna.length;i++)//braucht man die?System.out.print(dna[i]);return dna;}publicstaticStringdna2dnastring(byte dna[]){String dnastring ="";for(int i=0; i<dna.length; i++){switch(dna[i]){case0:
dnastring="A";continue;case1:
dnastring="T";continue;case2:
dnastring="G";continue;case3:
dnastring="C";continue;default:break;}}//for (int i=0;i<dnastring.length();i++){ // brauche ich die?//System.out.print(dnastring.charAt(i));// }return dnastring;}//mainpublicstaticvoidmain(String args[]){Scanner reader =newScanner(System.in);System.out.println("Gebe DNA Sequenz ein:");String dnastring = reader.next();
reader.close();System.out.println(dnastring);//hier diese ausgabe sollte ein String also die DNA Sequenz die ich eingegeben habe ausgeben,//gibt aber z.B dies hier aus :00132G wenn ich AATCG eingebe System.out.println(dna2dnastring(dnastring2dna(dnastring)));}}}
Zunächst einmal, dass die Klasse ATCG heisst. Das ist zwar für den Compiler egal aber es beschreibt die Funktion der Klasse äußerst unzureichend. Bitte verwende immer und bedingungslos namen für Klassen, Methoden und Variablen, die deren Sinn, Aufgabe und Fähigkeiten klar erkennen lassen. Du magst es jetzt vielleicht nicht glauben - aber wenn du später 1000e Zeilen Code vor dir hast, wirst du dir Dankbar sein, dass du genau das getan hast.
Wir wissen nicht, was die Ausgabe ist und auch nicht, was sie sein sollte. Wir kennen auch das Eingabeformat nicht also können wir das nicht testen.
Aber da ich in Bio zum Glück nicht gepennt habe vermute ich mal folgendes:
Die Methode
Code:
byte[] dnastring2dna(String)
wandelt die als String dargestellte Basensequenz in ein Byte-Array um. Soweit ich den Code verstehe sollte das auch problemlos klappen. Die Schleife am Ende ist unöötig.
Die Methode
Code:
String dna2dnastring(String)[/c] wandelt ein byte-array, welches eine Basensequenz darstellt in eine lesbare Form um. Dein Fehler hier: du verwendest [code]=
. Nochmal zu den Basics: Was soll in den case-Blöcken passieren? Und was passiert tatsächlich durch das =?
Noch ein Tipp zur Kür:
Schreibe die Methode
Code:
dna2dnastring
änlich wie
Code:
dnastring2dna
: verwende ein
Code:
char[]
, setze darin die einzelnen
Code:
char
s und benutze dann den
Code:
(char[])
Konstruktor von [c]String[/code]: [c]return new String(charArray);[/code].
Wenn es wirklich nur um DNA geht, dann würde ich überlegen, ob du nicht eine Klasse [c]DNA[/c] anlegen möchtest, die eine Liste von Basen verwaltet. Dafür würde ich ein Enum schreiben:
Java:
publicenumBase{A,T,G,C;}
Ich denke damit bist du am flexibelsten und der Sinn des ganzen wird sehr viel klarer, als wenn du mit String und char[] arbeitest. Um einen String in eine DNA-Instanz oder zurück umzuwandeln, kannst du ja Methoden wie [c]public static DNA parse(String s)[/c] und [c]public String getString()[/c] anbieten.
Wenn es wirklich nur um DNA geht, dann würde ich überlegen, ob du nicht eine Klasse [c]DNA[/c] anlegen möchtest, die eine Liste von Basen verwaltet. Dafür würde ich ein Enum schreiben:
Java:
publicenumBase{A,T,G,C;}
Ich denke damit bist du am flexibelsten und der Sinn des ganzen wird sehr viel klarer, als wenn du mit String und char[] arbeitest. Um einen String in eine DNA-Instanz oder zurück umzuwandeln, kannst du ja Methoden wie [c]public static DNA parse(String s)[/c] und [c]public String getString()[/c] anbieten.
Ist auf jeden Fall besser so. Aber wenn er da was für die Schule machen muss dann ist es wohl sinvoller, das ganze gleich mit der Richtigen Namensgebung zu machen damit er nicht auchnoch extra Enums und Klassen für die Translation schreiben muss; es reicht ja, das Rad einmal zu erfinden.
Java:
enumDNABase{
ACETIN, THYMIN, GUANIN, CYTOSIN, URACIL
}classBaseSequence{protectedDNABase[] bases;}class DNA extendsBaseSequence{// aktzeptiert nur ACETIN, THYMIN, GUANIN und CYTOSIN}class MRNA extendsBaseSequence{// aktzeptiert nur ACETIN, THYMIN, GUANIN und URACIL}