java - 针对代码失败的测试用例改进代码
问题描述
我写了下面的代码,我想确定我的代码失败的测试用例。我想确定我的测试用例失败的可能测试用例。所以我会即兴发挥同样的,此外我也想增强它,意思是,也建议我提高性能的最佳实践。
最后,在下面的代码中,我有一个返回补码的方法 returnFinalComplement(String reverseStr),为了计算补码,我有两种方法,两者都在做同样的工作,我现在使用方法 1,但我想知道方法2,哪种方法可以通过所有测试用例。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.SortedSet;
import java.util.TreeSet;
class DNAString {
private final static Character[] DATASET = {'A', 'C', 'G', 'T'};
private final static int MIN_RANGE = 0;
private final static int MAX_RANGE = 1000;
private final static String INVALID_CHAR = "Invalid input,not matched
with dataset";
private final static String CHAR_LENGTH_EXCEEDS = "Input does not
allow to be exceeds more than " + MAX_RANGE + " characters";
private static String returnFinalComplement(String reverseStr) {
//APPROACH-1
StringBuilder finalStr = new StringBuilder();
for (char c : reverseStr.toCharArray()) {
finalStr.append(
c == 'G' ? 'C'
: c == 'C' ? 'G'
: c == 'T' ? 'A'
: c == 'A' ? 'T'
: c
);
}
return finalStr.toString();
//APPROACH-2
char[] charlist = list.toCharArray();
for (int i = 0; i < charlist.length; i++) {
switch (charlist[i]) {
case 'A': {
charlist[i] = 'T';
}
break;
case 'T': {
charlist[i] = 'A';
}
break;
case 'G': {
charlist[i] = 'C';
}
break;
case 'C': {
charlist[i] = 'G';
}
break;
}
}
return new String(charlist);
}
public static boolean validateInput(String input) {
List<Character> chars = new ArrayList<>();
for (char c : input.toCharArray()) {
chars.add(c);
}
boolean result = false;
SortedSet<Character> mySet = new TreeSet<>(chars);
for (int i = 0; i <= mySet.size();) {
for (Character c : mySet) {
result = Objects.equals(c, DATASET[i]);
i++;
if (!result) {
break;
}
}
if (result) {
return result;
} else {
break;
}
}
return result;
}
public static String reverseIt(String source) {
int i, len = source.length();
StringBuilder dest = new StringBuilder(len);
for (i = (len - 1); i >= 0; i--) {
dest.append(source.charAt(i));
}
return dest.toString();
}
public static void main(String[] args) throws IOException {
BufferedReader readInput = new BufferedReader(new
InputStreamReader(System.in));
String source = readInput.readLine();
if (source.length() > MIN_RANGE && source.length() <= MAX_RANGE) {
boolean validateInput = validateInput(source);
if (validateInput) {
// String reverseString = reverseIt(source);
String reverseString = reverseIt(source);
System.out.println(returnFinalComplement(reverseString));
// String revereStringComplement =
returnFinalComplement(reverseString);
} else {
System.out.println(INVALID_CHAR);
}
} else {
System.out.println(CHAR_LENGTH_EXCEEDS);
}
}
}
解决方案
推荐阅读
- javascript - recaptcha v3 表单未提交
- json - 用 jq 转换 json 对象,用 base64 解码转换值
- python - Python字符串提取之间
- javascript - 如何将视图中创建的变量用作操作结果中的参数?(ASP.NET MVC)
- javascript - NodeJS req.body 在功能 nodejs 中为空 - 带有 ExpressJs 和续集的 Rest API
- c - 接受多种格式的输入
- python - 如何将多个数字转换为单个字母以从书中创建短语
- android - 如何在 Interactor / UseCase 中获取 CoroutineScope
- mongodb - Mongoose 与加法字段的多对多关系
- javascript - Angular 6:如何使用 Angular 6 在单击按钮时动态添加和删除一行 2 个文本框