Source: https://xkcd.com/1513/
Virtually every organization that does software development has strict guidelines on how to format source code. Here are two examples of "industrial strength" Java style guides:
Code Conventions (April 1999)
Google Java Style (March 2014)
This course will more or less follow a simplified version of these guidelines. Rather than memorize a long list of rules, you should develop good habits and intuition when it comes to style.
Checkstyle is a tool that can be used to determine if your source code follows a set of style rules. It also checks for common programming mistakes, such as empty statements and shadow variables.
Download these two files into the same directory as your code:
checkstyle-7.0-all.jar - command line tool
cs149.xml - configuration file for CS 149
Make sure the two files above and your .java file(for example Hello or Welcome.java from the last lab, or the Payroll.java in the next section below are all in the same directory).
Open a terminal and use the following command to run Checkstyle:
java -jar checkstyle-*-all.jar -c cs149.xml *.java
Note the * characters are wildcards that match whatever version of Checkstyle you have and whatever java source files are present. The output indicates the file and line number of each problem. This example refers to a method beginning on line 93, column 5 of Welcome.java:
Welcome.java:93:5: Missing a Javadoc comment
If you apply Checkstyle to your source code regularly, you will likely internalize good style habits over time. Note however that Checkstyle does NOT evaluate the quality of comments, meaning of variable names, and placement of declarations.
After you have downloaded the Checkstyle .jar file and the .xml configuration file, open jGRASP and select:
Tools -> Checkstyle -> Configure.
In the "Checkstyle Tool Settings" dialog box set "Checkstyle Home" to
be the folder containing the .jar file(probably /usr/home/stu/stu-f/eid/cs149/lab03), and "Checks File" to be the cs149wc.xml file, then click "OK". TIP: You can use the HOME button when hitting the Browse button on the checkstyle dialog to go to your users home folder in Linux as shown below
If all went well, you should see two new buttons on the jGRASP toolbar: and . Clicking the first button will run Checkstyle on the current file in the editor window. Clicking the second button will run Checkstyle on all of the Java files in the current directory.
Also, You may want to setup JGrasp to indent properly and handle tabs well. In the JGrasp menu select:
Settings->CSD Window settings -> Workspace. Select the Soft Tabs checkbox then set tab size to 4.
If you haven't already, you should create a top-level CS149
folder to organize all your labs and other assignments for the semester. Then create a lab03
folder for today's lab. (If you logged in as student
today, please log out and log back in with your own account.)
Download: Payroll.java
or
Create a new folder in your stu server called lab03 and copy the code from the stu server /cs/shr/code/Payroll.java [ cp /cs/shr/code/Payroll.java Payroll.java ] into your new folder.
Submission: At the end of class today, or by 11:00 PM if you would like more time, submit a corrected version of Payroll.java via WebCat. Your code must pass Checkstyle without any warnings AND meet all the requirements outlined below. (It must also compile and run correctly; don't change the program's behavior.) If you cannot get this working in WebCat you may upload to Canvas, but points will be deducted.
Collaboration: You are encouraged to work with another student to complete this lab. Each of you should submit your own copy of the program. It's okay if your files are similar or identical, as long as both of your names are present at the top.
/** * Overall description of the class goes here. * * @author Your name goes here * @version Due date goes here * Acknowledgements: I received no outside help on this assignment and have * abided by the JMU Honor Code. */
main
) must contain an applicable Javadoc comment./** * Overall description of the method goes here. * * @param paramterName describe each input parameter * @param anotherParam use a separate line for each * @return describe the value that this method returns */
//
) should describe major structures and steps within a method.subTotal
rather than s
, grade
rather than grd
)subTotal
, not sub_total
)studentName
or subTotal
)printLine
or addColumn
)HelloWorld
)PI
or INTEREST_RATE
)final double CENTIMETERS_PER_INCH = 2.54; centimeters = inches * CENTIMETERS_PER_INCH; // NOT inches * 2.54;
Scanner input = new Scanner(System.in); // discouraged Scanner input; input = new Scanner(System.in);
// integer expressions should use integer literals int a; double b; a = 2; b = 2.0; // double expressions should use double literals double x; double y; double average; average = (x + y) / 2.0; // NOT 2, which is an integer
sum = myGrade + yourGrade;
).
) operator, which should not have space surrounding it. (System.out.println();
)myGrade++;
)