You should be able to estimate your functionality score if you tested your program properly, this document describes some of the common stylistic and other non-functional types of issues that I noticed when viewing a sample of the A1 submissions and ones that are commonly seen with the first Java Object- Oriented program written by students: Documentation: * Not providing the required and common information. (You can refer to the "Introduction to Java notes" * Not providing the documentation in the location specified in the assignment description Naming conventions: * This applies to anything with a name (e.g. variable, constant, method, class). The same principles from your previous course also apply (you should review your notes if you forgotten them). Of particular note: only constants are all capitalized, class names have the first letter capitalized (not variables) Avoiding 'goto' type programming: * You should have this pounded into you during your last course * There should be no reason to use 'break' to add another termination point in loops * To a lesser extent this applies to adding too many 'return' statements to methods Use of named constants * Again a 217 concept. For A1 some example candidate named constants could include but are not limited to the following. You could name them differently or employ a different type but they should have been defined as constants...no surprise since I used them as actual examples of employing named constants in lecture when I went over the assignment: final int LOW_ATTACK = 0; etc. Method length/design: * The max length was specified as one screen (30 lines of code). Some students exceeded this by a large margin (double the length) * Methods like functions should implement one clearly defined task (again this should be something you have seen from your previous experience) e.g. 'get user input' and 'calculate an exponent' consists of two tasks * Violating either of these requirements is a sign that you should break one method into two or more methods Program clarity Example 1: * Overly complex or obtuse ways of specifying an instruction if (choice == 'q') { // Literally an empty body } else { System.out.println("You chose not to quit the program"); } (If you only have one body then this is a sign that you don't really need an if-else, a properly specified 'if' alone will do). Example 2 (error checking that age is within 1 - 114): while ((age <= 1) || (age >= 114)) // Handle error Vs. while (!(age >= 1) && (age <= 114)) // handle error The latter approach is terrible but it could be better. Note in both cases named constants could be used for the min and max age allowed.