JUnit 5 how to assert this !=null - junit5

I want to test this piece of block mainly in x != null, is there a better way to assert this method in JUnit.
private void myorder()
{
if (x != null)
{
//some code
myorder(x.getDown());
System.out.print(r.getData() + " ");
myorder(x.getUp());
}
}
Here's what I've done so far:
#Test
assertFalse(x != null);

I would use Assertions class.
import static org.junit.jupiter.api.Assertions.assertNotNull;
assertNotNull(x);

Related

Java - Mismatch and method is undefined error

// The section below is what raises the error, I am modifying a simple banking application i found online. I am very new to Java, about 3 days I've been dabbling in it, and thought this would be a good little activity to do to get me used to the syntax of the code and methods etc. I have been looking at this problem for about a day now and cant figure out what exactly the problem is. The only thing that would come to mind would be that the showMenu() method is possibly out of scope for the main section im referring it in, however im not to sure.
P.S. If i have missed anything out that could be of us, i apologise as i have never posted on here before!
EDIT - The new error is:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The constructor BankApplication.BankAccount(String, String) is undefined
The method showMenu() is undefined for the type BankApplication.BankAccount
at BankApplication.main(bank.java:9)
public static void main(String[] args)
{
BankAccount obj1 = new BankAccount("Ye Ma", "X Æ A-12");
obj1.showMenu();
}
//The showMenu code
void showMenu()
{
Scanner sc = new Scanner(System.in);
System.out.println("Welcome to the Bank");
System.out.println("Your Customer ID is: " + cID);
System.out.println("");
System.out.println("1. To view you Bank Balance.");
System.out.println("2. To make a deposit.");
System.out.println("3. To make a withdrawel.");
System.out.println("4. To view your previous transaction.");
System.out.println("5. To exit.");
do
{
System.out.println("----------------------------------------------------------------------");
System.out.println(" Choose an option ");
System.out.println("----------------------------------------------------------------------");
System.out.println("");
option = sc.nextInt();
if(option == 1)
{
System.out.println("----------------------------------------------------------------------");
System.out.println(" Your bank balance is: " + balance);
System.out.println("----------------------------------------------------------------------");
break;
}
else if(option == 2)
{
System.out.println("----------------------------------------------------------------------");
System.out.println("How much would you like to deposit?");
System.out.println("----------------------------------------------------------------------");
int amount = sc.nextInt();
deposit(amount);
break;
}
else if(option == 3)
{
System.out.println("----------------------------------------");
System.out.println(" How much would you like to withdraw?: ");
System.out.println("----------------------------------------------------------------------");
int amount = sc.nextInt();
withdraw(amount);
break;
}
else if(option == 4)
{
System.out.println("----------------------------------------------------------------------");
System.out.println("Your previous transaction was: " + getPreviousTransaction(amount));
System.out.println("----------------------------------------------------------------------");
System.out.println("");
}
else if(option == 5)
{
System.out.println("**********************************");
System.out.println(" END OF APPLICATION ");
System.out.println("**********************************");
}
else
{
System.out.println("Invalid option, please choose a valid option.");
}
}while(option != 5);
i think you are trying to call showMenu() which is not available in BankAccount class.

Conditional statement in getter method

Am relatively new to java so I have no idea what the problem is. In my getter settings of this class, I'm trying to evaluate if the input is of integer 1, 2 or 3, then it will return one of the previously saved setters described here. I used the same conditional statements in the setter, but the getter tells me that my method needs to return type int. What am I doing wrong? Or should I be doing this a completely different way? lol.
public class AssignmentMarks {
private String courseName;
private int assignment1 = 0, assignment2 = 0, assignment3 = 0;
public AssignmentMarks(String name, int mark1, int mark2, int mark3){
//create constructor to use variables.
this.courseName = name;
this.assignment1 = mark1;
this.assignment2 = mark2;
this.assignment3 = mark3;
}
public void setMark(int assignmentNumber, int mark) {
//assign value of the assignments
if(assignmentNumber == 1) {
mark = this.assignment1;
}else if(assignmentNumber == 2) {
mark = this.assignment2;
}else if(assignmentNumber == 3){
mark = this.assignment3;
}
}
public int getMark(int assignmentNum) {
if(assignmentNum == 1) {
return assignment1;
}else if (assignmentNum == 2) {
return assignment2;
} else if (assignmentNum == 3) {
return assignment3;
}
}
}
public int getMark(int assignmentNum) {
if(assignmentNum == 1) {
return assignment1;
}else if (assignmentNum == 2) {
return assignment2;
} else if (assignmentNum == 3) {
return assignment3;
}
// in another case
throw new Exception("Assignment must be 1, 2 or 3);
}
for setter
public void setMark(int assignmentNumber, int mark) {
//assign value of the assignments
if(assignmentNumber == 1) {
// BAD mark = this.assignment1; don't set parameter is useless
this.assignment1=mark;
}else if(assignmentNumber == 2) {
// BAD mark = this.assignment2;
this.assignment2=mark;
}else if(assignmentNumber == 3){
// BAD mark = this.assignment3;
this.assignment3=mark;
}
// in another case
throw new Exception("Assignment must be 1, 2 or 3");
}
I don't remember if you must import Exception for throwing them.
if yes put import java.lang.Exception on top of your code.
your logic can be improved using arrays, but let's walk, and after you will running...

Comparing ArrayList values with Intergers

My statement is returning that the value of x is 0 but it is clearly 5.
The return Statement is
"5" and "yeah"
import java.util.ArrayList;
public class DeletionEasyTester {
public static void main(String Args[]){
int x = 1;
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(3);
list1.add(5);
list1.add(8);
list1.add(0);
list1.add(2);
list1.add(5);
list1.add(4);
x = list1.get(1);
System.out.println(x);
if(x == 0);
{
System.out.print("yeah");
}
}
}
The problem is here: if(x == 0);. It should be if(x == 0), without ;.
In your version of the code, there is an empty code block after the if statement, and System.out.print("yeah"); is in a block unrelated to the if-statement.

Null pointer exception when processing Linked List nodes

package LinkList2;
//import java.util.*;
public class Duplicates {
public static void removeDuplicates(LinkedListNode head)
{
LinkedListNode current = head;
while(current!= null && current.next!= null)
{
LinkedListNode curr = current;
while(curr!=null)
{
if(curr.next.data==current.data) //Getting error at this line
curr.next = curr.next.next;
else
curr = curr.next;
}
current = current.next;
}
}
public static void main(String args[])
{
LinkedListNode first = new LinkedListNode(0,null,null);
LinkedListNode head = first;
LinkedListNode second = first;
for(int i=1; i< 8; i++)
{
second = new LinkedListNode(i%2, null, null);
first.setNext(second);
second.setPrevious(first);
}
System.out.println(head.printForward());
removeDuplicates(head);// Getting error at this line
}
}
Getting null pointer exception in the above code. When I try to run the above code, it gives null pointer exception.
Please help me with my mistake.
Below is the implementation of LinkList where all the methods are defined
class LinkedListNode {
public LinkedListNode next;
public LinkedListNode prev;
public LinkedListNode last;
public int data;
public LinkedListNode(int d, LinkedListNode n, LinkedListNode p) {
data = d;
setNext(n);
setPrevious(p);
}
public void setNext(LinkedListNode n) {
next = n;
if (this == last) {
last = n;
}
if (n != null && n.prev != this) {
n.setPrevious(this);
}
}
public void setPrevious(LinkedListNode p) {
prev = p;
if (p != null && p.next != this) {
p.setNext(this);
}
}
public String printForward() {
if (next != null) {
return data + "->" + next.printForward();
} else {
return ((Integer) data).toString();
}
}
public LinkedListNode clone() {
LinkedListNode next2 = null;
if (next != null) {
next2 = next.clone();
}
LinkedListNode head2 = new LinkedListNode(data, next2, null);
return head2;
}
}
You are getting an exception just because of the following condition:
while(curr != null)
Replace it with while(curr != null && curr.next != null) this way you can check if you have the next element.
Hope this helps.
The problem is that here:
while(curr != null)
{
if(curr.next.data==current.data) //Getting error at this line
curr.next = curr.next.next;
else
curr = curr.next;
}
You are accessing the curr.next.data where you are not checking if that node is null or not. This through your NullPointerException.
To fix your problem is to check on the while loop, if the .next is also not null.
while(curr != null && curr.next != null)
{
if(curr.next.data==current.data) //Getting error at this line
curr.next = curr.next.next;
else
curr = curr.next;
}
In other words, you are not checking if your next node is actually the end of the linked list (i.e null). If you need in your program logic to handle this separately, then you should remove the check from the while loop, and implement this check differently.

How to code the chess stalemate rule ?

I'm trying to write a chess game and find that I cannot find solutions to find a stalemate situation. I'm trying to google, but can't find anything. Is there a well-known algorithm or something?
Your move generator will be one of two different designs;
either it checks for legality while generating the moves
or you generate all possible moves and remove those that are illegal afterwards.
The former is better as it doesn't need post-processing.
A stalemate condition is simply one where there are no legal moves and the moving-side's king is not in check. A checkmate condition is one where there are no legal moves but the moving-side's king is in check.
In other words if you've figured out how to detect check and checkmate, you've already got everything necessary to detect stalemate.
Here is an Open-source code with all the rules for the classic Chess game:
https://github.com/cjortegon/basic-chess
You can run the project right after cloning the project (Android, iOS, Desktop and Web), or you can use the main logic, which is here: https://github.com/cjortegon/basic-chess/tree/master/libgdx/core/src/com/mountainreacher/chess/model
I based my solution on a 3-moments algorithm, first moment is when the player selects a piece from the board, then when the destination of this piece has been chosen and finally when the piece reaches that position (considering that it is an animated game, if not, you can merge step 2 and 3).
The following code has been implemented in Java. From the properties of the model class:
boolean turn;
GenericPiece selected, conquest;
ClassicBoard board;
List<int[]> possibleMovements;
int checkType;
The first method will handle moments 1, 2 and the special 'conquest' moment (applied to pawn piece only):
public boolean onCellClick(int row, int column) {
if (row == -1 && conquest != null) {
checkType = 0;
conquest.changeFigure(column);
return true;
} else if (selected != null) {
if (possibleMovements != null) {
for (int[] move : possibleMovements) {
if (move[0] == row && move[1] == column) {
// Move the PieceActor to the desired position
if (selected.moveTo(row, column)) {
turn = !turn;
}
break;
}
}
}
selected = null;
possibleMovements = null;
return true;
} else {
selected = board.getSelected(turn ? Piece.WHITE_TEAM : Piece.BLACK_TEAM, row, column);
if (selected != null) {
possibleMovements = new ArrayList<>();
possibleMovements.addAll(((GenericPiece) selected).getMoves(board, false));
// Checking the movements
board.checkPossibleMovements(selected, possibleMovements);
if (possibleMovements.size() == 0) {
possibleMovements = null;
selected = null;
return false;
} else {
return true;
}
}
}
return false;
}
And the following method will handle the 3rd moment (when animation finishes):
public void movedPiece(Piece piece) {
Gdx.app.log(TAG, "movedPiece(" + piece.getType() + ")");
// Killing the enemy
Piece killed = board.getSelectedNotInTeam(piece.getTeam(),
piece.getRow(), piece.getColumn());
if (killed != null) {
killed.setAvailable(false);
}
// Checking hacks
GenericPiece[] threat = board.kingIsInDanger();
if (threat != null) {
checkType = board.hasAvailableMoves(threat[0].getTeam()) ? CHECK : CHECK_MATE;
} else {
checkType = NO_CHECK;
}
// Checking castling
if (piece.getFigure() == Piece.ROOK && ((GenericPiece) piece).getMovesCount() == 1) {
Piece king = board.getSelected(piece.getTeam(),
piece.getRow(), piece.getColumn() + 1);
if (king != null && king.getFigure() == Piece.KING && ((GenericPiece) king).getMovesCount() == 0) {
// Left Rook
if (board.getSelected(piece.getRow(), piece.getColumn() - 1) == null) {
king.moveTo(piece.getRow(), piece.getColumn() - 1);
}
} else {
king = board.getSelected(piece.getTeam(),
piece.getRow(), piece.getColumn() - 1);
if (king != null && king.getFigure() == Piece.KING && ((GenericPiece) king).getMovesCount() == 0) {
// Right Rook
if (board.getSelected(piece.getRow(), piece.getColumn() + 1) == null) {
king.moveTo(piece.getRow(), piece.getColumn() + 1);
}
}
}
}
// Conquest
else if (piece.getFigure() == Piece.PAWN && (piece.getRow() == 0 || piece.getRow() == board.getRows() - 1)) {
conquest = (GenericPiece) piece;
checkType = CONQUEST;
}
}
That code covers all the rules from the classic chess, including: regular piece movements, castling, check, check-mate and conquests of pawns.