Проблема, которую я должен сделать, заключается в следующем
public static String randomDNAString (int dnaLength)/** * @param dnaLength неотрицательный int * @возвращать случайный Строка длины dnaLength, состоящая из четырех символов A, T, G и C */
Я думал, что сделал это правильно (хотя и невероятно неэффективно), но ничего не возвращает. Вот мой код. Любая помощь приветствуется.
public static String randomDNAString(int dnaLength){
Random rand = new Random();
char[] dna;
dna = new char[dnaLength];
for(int i = 0; i<dnaLength;i++){
int tempC = rand.nextInt(4);
if(tempC == 0)
dna[i] = 'A';
if(tempC == 1)
dna[i] = 'G';
if(tempC == 2)
dna[i] = 'C';
if(tempC == 3)
dna[i] = 'T';
}
return (java.util.Arrays.toString(dna));
}
Другое предложение ответа с использованием StringBuilder
было хорошим. Однако вы можете сделать это еще проще:
public static String randomDNAString(int dnaLength) {
Random rand = new Random();
StringBuilder dna = new StringBuilder(dnaLength);
for (int i = 0; i < dnaLength; i++) {
dna.append("ACGT".charAt(rand.nextInt(4)));
}
return dna.toString();
}
В этом нет ничего плохого. Я просто тупой, и когда я назвал это в основном, я использовал
randomDNAString(20);
вместо
System.out.println(randomDNAString(20));
Спасибо за вашу помощь всем, я просто тупой иногда
Мы можем улучшить ваш ответ, изменив цепочку if на оператор switch
и используя StringBuilder
.
public static String randomDNAString(int dnaLength) {
Random rand = new Random();
StringBuilder dna = new StringBuilder();
for(int i=0;i<dnaLength;i++) {
switch(rand.nextInt(4)) {
case 0:
dna.append("A");
break;
case 1:
dna.append("C");
break;
case 2:
dna.append("G");
break;
case 3:
dna.append("T");
break;
}
}
return dna.toString();
}
Чтобы распечатать вывод, попробуйте:
System.out.println(randomDNAString(10));