Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
Java:
public static byte[] umwandeln (String a) {
byte inZahlen[] = new byte[a.length()];
return inZahlen;
}
public static byte[] dnastring2dna (String dnastring) {
byte dna[] = new byte[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;
}
}
return dna;
}
Java:
public static void main(String args[]) {
Scanner reader = new Scanner(System.in);
System.out.println("Gebe dna sequenz ein");
String dnastring = reader.next();
reader.close();
System.out.println(dnastring2dna(dnastring));
gibt leider die komische zahlenkombination aus, wie z.B. [B@1916a3de
was mache ich falsch?
"[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:
import java.util.Scanner;
public class ATGC {
public static byte[] dnastring2dna(String dnastring) {//erhelt string und umwandelt in byte
byte dna[] = new byte[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;
}
public static String dna2dnastring(byte dna[]) {
String dnastring ="";
for(int i=0; i<dna.length; i++){
switch (dna[i]) {
case 0:
dnastring="A";
continue;
case 1:
dnastring="T";
continue;
case 2:
dnastring="G";
continue;
case 3:
dnastring="C";
continue;
default:
break;
}
}
//for (int i=0;i<dnastring.length();i++){ // brauche ich die?
//System.out.print(dnastring.charAt(i));
// }
return dnastring;
}
//main
public static void main(String args[]) {
Scanner reader = new Scanner(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:
public enum Base{
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:
public enum Base{
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:
enum DNABase
{
ACETIN, THYMIN, GUANIN, CYTOSIN, URACIL
}
class BaseSequence
{
protected DNABase[] bases;
}
class DNA extends BaseSequence
{
// aktzeptiert nur ACETIN, THYMIN, GUANIN und CYTOSIN
}
class MRNA extends BaseSequence
{
// aktzeptiert nur ACETIN, THYMIN, GUANIN und URACIL
}