Today I found a useful free software called “SourceMonitor” which can help to calculate and monitor the java code ( and other programming language like C++, C# etc ) complexity.

For the definition and how to calculate cyclomatic complexity itself, please refer to detail in wikipedia.
In order to demonstrate the usage of this software, I use a very simple java class below for example:
package test;
import java.util.ArrayList;
public class monthTool {
static ArrayList<String> monthCollection = new ArrayList<String>();
public static void main(String[] args) {
monthTool tool = new monthTool();
tool.printV1(1);
tool.printV2(2);
tool.printV1(0);
tool.printV2(-1);
tool.printV3(3);
tool.printV3(13);
}
public monthTool(){
monthCollection.add("Invalid");
monthCollection.add("January");
monthCollection.add("Febrary");
monthCollection.add("March");
monthCollection.add("April");
monthCollection.add("May");
monthCollection.add("June");
monthCollection.add("July");
monthCollection.add("August");
monthCollection.add("September");
monthCollection.add("October");
monthCollection.add("November");
monthCollection.add("December");
}
public void printV1(int month){
System.out.println("Month is: " + getMonthNameV1(month));
}
public void printV2(int month){
if( month >= 1 && month <= 12)
System.out.println("Month is: " + getMonthNameV2(month));
else
System.out.println("Please specify a valid month");
}
public void printV3(int month) {
System.out.println("Month is: " + getMonthNameV3(month));
}
public String getMonthNameV2(int month){
if( month == 1)
return "January";
else if( month == 2)
return "Febrary";
else if( month == 3)
return "March";
else if( month == 4)
return "April";
else if( month == 5)
return "May";
else if( month == 6)
return "June";
else if( month == 7)
return "July";
else if( month == 8)
return "August";
else if( month == 9)
return "September";
else if( month == 10)
return "October";
else if( month == 11)
return "November";
else if( month == 12)
return "December";
else
return "Invalid";
}
public String getMonthNameV1(int month){
switch (month){
case 1:
return "January";
case 2:
return "Febrary";
case 3:
return "March";
case 4:
return "April";
case 5:
return "May";
case 6:
return "June";
case 7:
return "July";
case 8:
return "August";
case 9:
return "September";
case 10:
return "October";
case 11:
return "November";
case 12:
return "December";
default:
return "Invalid";
}
}
public String getMonthNameV3(int month){
try {
return monthCollection.get(month);
}
catch (java.lang.IndexOutOfBoundsException e){
return "Invalid";
}
}
}
It has three different ways to convert an integer into a month name if possible, or else the string “Invalid” is returned.
(1) Create a new project: