Assign monthly interest rate based on credit card input
Watch your scope - in your class you keep your data in two places - local variables, and static members. I cannot see any thought behind choosing where to put them - you pass some around in your method signatures, but then you use the others in the same methods... The most acute case is in calculateMinPayment where you pass the static member newBalance as a parameter and use it inside the method, while totally ignoring (and overriding) the parameter...

In the use-case above, in the name of encapsulation, I believe the correct way is to only keep the state as local variables, passing the needed data to the stateless helper methods, rather than keeping anything in the static state.

Comments - I personally think that comments are a code smell. When the code is clean and readable - comments are superfluous. You've got a lot of comments, and some are more confusing than helpful, since you put them in the wrong location:


// make sure that the number entered is a double and if so read it in.
// if not, use a default value of zero. No error message to the user.
System.out.print("Type the balance: ");
priorBalance = keyboard.nextDouble();

if (keyboard.hasNextDouble() == true) {
    interestRate = 0.0;
} else {
    interestRate = 0.02;
}



The above comments should be placed after setting priorBalance, since they describe interestRate... They are more confusing, since the code does not do what the comment say - it sets the interestRate at either 0.0 or 0.02, then totally ignores the given information, and tries to get nextDouble() even if the last statement returned false.

BTW - don't use if (keyboard.hasNextDouble() == true) - if (keyboard.hasNextDouble()) does exactly the same, and is more readable.


// make sure that the number entered is a double and if so read it in.
// if not, use a default value of zero.  No error message to the user.
System.out.print("\nType the new charge amount: ");
addtlCharges = keyboard.nextDouble();



Was that a result of an unfortunate copy+paste? Again - comment is not helpful, only confuses.

I also believe the prompt Type the new charge amount will appear only after the user entered it, since you check hasNextDouble() before you print the prompt.


// first create a stub and get the input and output working
// then replace the stub later on with the calculation



I don't even begin to understand what this means, and what it has to do with the code it describes... not the second time either...

Naming - give variables and methods names which imply their role in your code - what does this line do?

newBalance = calculateInterest(priorBalance, addtlCharges);


Calculates interest or the new balance?

Also, don't be lazy say - additionalCharges - there are no fines for long names.