Pmdは私にこのメソッド(thirdRowsValidation)の複雑さは14だと言いましたが、コードを減らすための方法はありません。メソッドの複雑さを減らす
public void secondRowValidation(String secondRowCsv) {
String[] lines1 = secondRowCsv.split(",");
for (int i = 0; i < lines1.length; i++) {
if ("Bookng start".equalsIgnoreCase(lines1[i])) {
indexBookngStart = i;
}
if ("Bookng end".equalsIgnoreCase(lines1[i])) {
indexBookngEnd = i;
}
:Ref1の
public void thirdRowsValidation(String thirdRowCsv) {
String[] lines1 = thirdRowCsv.split(",");
for (int i = 0; i < lines1.length; i++) {
if (indexBookngEnd == i && "".equals(temporalValidateBookngEnd)) {
temporalValidateBookngEnd = (" to " + lines1[i] + "\n");
}
if (indexBookngStart == i
&& !("".equals(temporalValidateBookngEnd))) {
finalOutput.append("Then it should have booking window ");
indexBookngStart = -1;
}
if (indexTravelEnd == i && "".equals(temporalValidateTravelEnd)) {
temporalValidateTravelEnd = (" to " + lines1[i] + "\n");
}
if (indexTravelStart == i
&& !("".equals(temporalValidateTravelEnd))) {
finalOutput.append("Then it should have travel window ");
String idHeaderColumn = String.format("%1$-" + 5 + "s", "id");
String typeHEaderColumn = String.format("%1$-" + 50 + "s","type");
finalOutput.append("| ");
finalOutput.append(idHeaderColumn);
indexTravelStart = -1;
}
if (indexPackageDescription == i) {
temporalPackages = String.format("%1$-" + 50 + "s", lines1[i]);
}
if (indexPackageCode == i
&& !(lines1[i].matches("[+-]?\\d*(\\.\\d+)?"))
&& indexTravelStart == -1) {
finalOutput.append("| ");
}
}
}
Ref1の -
indexBookngEnd、indexTravelStart ...すべてのこれらの変数は、他のループ反復(CSVファイルの列のヘッダー)で行われた他のアレイからのインデックスであります\ nから、後でのため
アレイ ""
public String getStoryFromCsv(String convert) {
String[] lines = convert.split("(\n)");
for (int j = 0; j < lines.length; j++) {
arrayPerRow = lines[j];
if (j == 0) { // get marketing type and number
firstRowValidation(arrayPerRow);
}
if (j == 1) { // get headers
secondRowValidation(arrayPerRow);
}
if (j > 1) { // get info and append according to headers
thirdRowsValidation(arrayPerRow);
}
}
は、だから私が持っているものです::- 「thirdRowsValidation」メソッドアイデアを持っている私はあなたたちのために、このようなテキストに達してい終わりに14
の循環的複雑度を持っている - メソッドthirdRowsValidationは()649 のNPATH複雑性を有します
Then it should have booking window 8/8/16 to 10/8/16
Then it should have travel window 11/6/16 to 12/25/16
And it should have online packages:
| id | type |
| 34534 | aaa Pkg |
| D434E | MKW Pkg + asdasdasdasdasdasdas |
| F382K | sds Pkg + Ddding |
| X582F | OYL Pkg + Deluxe Dining |
まず、ループの内容を別々のメソッドに抽出する必要があります。これは複雑さを軽減します。そして、あなたは非常に多くのフィールドやグローバル変数を持っているように見えますが、それはその状態を別のオブジェクトに移動することによって少しリファクタリングされるかもしれないので、あなたはその状態オブジェクトを動かすことができるので、しかし、これらは推測に過ぎないので、あなたのIntelliJが示唆しているところから始めてください:-) –
私はそれを理解しています...if(j == 0){firstRowValidation(arrayPerRow); }しかし、あなたが見ることができるように私は変更することができない2つのメインループがあります – arnoldssss
しかし、あなたの 'thirdRowsValidation'は' for'-loopだけを持つように、4行目から3行目までのすべてをメソッドに移すことができます'i'のすべてのメソッドを呼び出します。 –