java编程问题,高手来..
一开始DNA为空,令用户通过scanner输入一串只包含a,t,c,g四个字母的DNA片段(若输入中有其他字母则输出“无效片段”)。将用户输入的DNA与之前的DNA相结合...
一开始DNA为空,令用户通过scanner输入一串只包含a,t,c,g四个字母的DNA片段(若输入中有其他字母则输出“无效片段”)。将用户输入的DNA与之前的DNA相结合并输出(去掉此片段开头处与之前DNA结尾处的重叠部分),此过程可一直循环(假设用户输入的每一段DNA都与之前片段有重叠部分),只到用户输入值为空时终止程序。如何写程序实现以上过程?
例:
初始DNA:“”
用户输入:“atatatata”
输出结果:“atatatata”
用户输入:“atacatga”
输出结果:“atatatatacatga”
用户输入:“tgacatag”
输出结果:“atatatatacatgacatag”
用户输入:“”
输出结果:“atatatatacatgacatag”,程序中止。 展开
例:
初始DNA:“”
用户输入:“atatatata”
输出结果:“atatatata”
用户输入:“atacatga”
输出结果:“atatatatacatga”
用户输入:“tgacatag”
输出结果:“atatatatacatgacatag”
用户输入:“”
输出结果:“atatatatacatgacatag”,程序中止。 展开
2个回答
展开全部
根据您的需求,简单写了个小程序,看是否能满足您的诉求:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DNA {
public static void main(String[] args) {
String dnaRegex = "^[a|t|c|g]{1,}$";
// 编译正则表达式,第二个参数为是否区分大小写
Pattern pattern = Pattern.compile(dnaRegex/*,Pattern.CASE_INSENSITIVE*/);
Scanner scanner = null;
try {
scanner = new Scanner(System.in);
StringBuilder builder = new StringBuilder();
System.out.println("请输入DNA片段字符串,字符串只能包含a,t,c,g四个字母");
while (true) {
String line = scanner.nextLine();
//输入为空,不管输入多少个空格,都认为输入空,退出输入
if (line == null || line.trim().length() == 0) {
System.out.println(builder.toString());
break;
}
Matcher matcher = pattern.matcher(line);
//输入的DNA片段不是只包含a,t,c,g四个字母
if (!matcher.matches()) {
System.out.println("无效片段,请重新输入。");
continue;
}
builder.append(line);
System.out.println(builder.toString());
}
}catch (Exception e){
System.out.println("发生异常,终止程序!");
}finally {
if (scanner != null){
scanner.close();
}
}
}
}
展开全部
import java.util.Scanner;
/**
* 2017/02/16 15:39
*
* @author 3306 TODO
*/
public class TestDNA {
public static void main(String[] args) {
String wholeDNA = "";
while (true) {
String dna = inputDNASegment();
if (isEmpty(dna)) {
break;
}
if (isLegal(dna)) {
String origin = wholeDNA;
wholeDNA = appendDNA(origin, dna);
System.out.println("输出结果: " + wholeDNA);
} else {
System.out.println("无效片段");
}
}
System.out.println("输出结果: " + wholeDNA);
}
/**
* 输入dna片段
*
* @return String
*/
private static String inputDNASegment() {
Scanner input = new Scanner(System.in);
System.out.print("请输入DNA片段: ");
return input.next();
}
/**
* 判断dna片段是否合法
*
* @param dna dna字符串
* @return boolean 合法返回true,否则返回false
*/
private static boolean isLegal(String dna) {
for (char ch : dna.toCharArray()) {
if (ch != 'a' && ch != 't' && ch != 'c' && ch != 'g') {
return false;
}
}
return true;
}
/**
* 拼装DNA
*
* @param origin 源dna数据
* @param appendVal 新增dna数据
* @return String
*/
private static String appendDNA(String origin, String appendVal) {
int subIndex = 0;
for (int index = 0, len = appendVal.length(); index < len; index++) {
String temp = appendVal.substring(0, len - index);
if (-1 != origin.lastIndexOf(temp)) {
subIndex = temp.length();
break;
}
}
return origin + appendVal.substring(subIndex);
}
/**
* 是否为空
*
* @param dna dna字符串
* @return boolean
*/
private static boolean isEmpty(String dna) {
return (null == dna || "\"\"".equals(dna.trim()));
}
}
追问
感谢帮助!
测试时发现若输入为空,程序仍然要求继续输入,而此时本应终止并输出最终得出的DNA片段,是否哪里出了点问题呢?
追答
我还以为是输入: "" 就结束 你可以输进""结束程序的
如果您要进行回车就结束的话:
请修改:
/**
* 输入dna片段
*
* @return String
*/
private static String inputDNASegment() {
Scanner input = new Scanner(System.in);
System.out.print("请输入DNA片段: ");
return input.nextLine(); -->这里改为nextLine();
}
/**
* 是否为空
*
* @param dna dna字符串
* @return boolean
*/
private static boolean isEmpty(String dna) {
return (null == dna || "".equals(dna.trim())); -->这里修改
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询