Calculator plus sign will not show on the display screen, Any ideas?

Hello, I am trying to make a simple calculator in processing, but when I click the plus sign, it does not display, instead, a little box displays. Any ideas?

Calculator tab

Keypad keyPad;

color backgroundC = color(200);
String entery_text="Calculator";
float firstNumber;
boolean isReadingFirstNumber =false;
char operation;
float secondNumber;

void setup(){
  size(400, 500);
    background(backgroundC);
  noStroke();
  textSize(60);
  
  keyPad = new Keypad();
}

void draw(){


  keyPad.Display();
  text(firstNumber,10,70);
  text(operation,10,70);
 
}
void mousePressed(){
  if( mouseX > 10 && mouseX < 80){
    if(mouseY > 80 && mouseX < 300){
    
   firstNumber=1;
   if(isReadingFirstNumber){
     firstNumber=1;
   }else{
     secondNumber= 1;
     
if( mouseY > 80  && mouseY < 400){
if(mouseX > 80 && mouseX < 310){
   operation = '+';


    
  }
  }
}
  }
}
}

Keypad tab

class Keypad {
color backgroundC = color(200);
color entryC = color(242,244,255);
color entryTC = color(0);
color buttonC = color(255);
color buttonTC = color(93, 67, 247);
float firstNumber;

  Keypad() {
    
  }
    void Display(){
      
      
 //making the background behind the keys gray     
  background(backgroundC);
  
  //making the screen display background slightly purple
  fill(entryC);
  rect(10, 10, 380, 70);
  
  fill(entryTC);

  
  //making the background of the button's white
  fill(buttonC);
  
  //The square for 7
  rect(10, 100, 80, 80, 20);
  
  //the square for 8
  rect(110, 100, 80, 80, 20);
  
  //the square for 9
  rect(210, 100, 80, 80, 20);
  
    //the square for /
  rect(310, 100, 80, 80, 20);
  
    //the square for 4
  rect(10, 200, 80, 80, 20);
  
    //the square for 5
  rect(110, 200, 80, 80, 20);
  
    //the square for 6
  rect(210, 200, 80, 80, 20);
  
    //the square for x
  rect(310, 200, 80, 80, 20);
  
    //the square for 1
  rect(10, 300, 80, 80, 20);
  
    //the square for 2
  rect(110, 300, 80, 80, 20);
  
    //the square for 3
  rect(210, 300, 80, 80, 20);
  
    //the square for -
  rect(310, 300, 80, 80, 20);
  
    //the square for C
  rect(10, 400, 80, 80, 20);
  
    //the square for 0
  rect(110, 400, 80, 80, 20);
  
    //the square for =
  rect(210, 400, 80, 80, 20);
  
    //the square for +
  rect(310, 400, 80, 80, 20);
  
  fill(buttonTC);
  
  text("7", 27, 162);
  text("8", 127, 162);
  text("9", 227, 162);
  text("/", 333, 155);
  
  text("4", 27, 262);
  text("5", 127, 262);
  text("6", 227, 262);
  text("x", 327, 262);
  
  text("1", 27, 362);
  text("2", 127, 362);
  text("3", 227, 362);
  text("-", 327, 362);
  
  text("C", 27, 462);
  text("0", 127, 462);
  text("=", 227, 462);
  text("+", 327, 462);

    

}

void mousePressed(){
  if( mouseX > 10 && mouseX < 80){
    if(mouseY > 300 && mouseX < 30){
    
  
   firstNumber=1;
    
  }

  
}
  }
}

Hello,

This displayed correctly (no box):

char operation = ' ';  // Was not initialized to a chat that can be displayed and defaulted to 0

I did not explore further than that.

:)

I did that, but it gave me a null pointer exception when I put this code in draw: text(operation,200,70);

Hello,

I can only get a 1 displayed.
With the character initialized I do not gt a “box”.

That is all I got.

:)

Gotcha! thanks for letting me know!

And this:

char operation;       //displays box
//char operation = ' '; // displays "blank"
//char operation = '+'; // displays +
void setup()
  {
  textSize(48);
  textAlign(CENTER, CENTER);
  text(operation, width/2, height/2-10);
  }

image

Ok that is it for now.

:)

Hello,

there are other difficulties in your code

(Again, mousePressed() could be simplified when you had a list of buttons (objects, see other thread). You could just for-loop over the list of buttons. Depending on its type you would then treat them differently:

  • type number: just add the number of the button to the current number (at its end) - for ALL number buttons the same
  • type operator: fill the text of the button in the operator variable. For ±*/
  • type equal : calc the result based on two numbers and operator and display it
  • type Clear: clear everything
    )

The mousePressed() function in the class is not called automatically by processing.

You would have to call it from mousePressed() outside the class.


When you hit ctrl-t in processing you get auto-format: better indents. See below: Your code after ctrl-t.

Here you see that the closing brackets } are often wrong.

E.g. this

      if (isReadingFirstNumber) {
        firstNumber=1;
      } else {
        secondNumber= 1;

should close directly.

Also this

  if ( mouseX > 10 && mouseX < 80) {
    if (mouseY > 80 && mouseX < 300) {

should close prior to this

        if ( mouseY > 80  && mouseY < 400) {
          if (mouseX > 80 && mouseX < 310) {
  firstNumber=1;
  if (isReadingFirstNumber) {

You should not set firstNumber outside the if. It would get overwritten by 1 when the second number comes in! Bad.

  if ( mouseX > 10 && mouseX < 80) {
    if (mouseY > 80 && mouseX < 300) {

you check mouseX, mouseX and then mouseY but then again mouseX! That’s wrong. Also the numbers are wrong:

  if ( mouseX > 10 && mouseX < 10+80) {
    if (mouseY > 300 && mouseY < 300+80) {

and you don’t need a double if, you can work with && :

  if (mouseX > 10 && mouseX < 10+80 && 
     mouseY > 300 && mouseY < 300+80) {

before setup you had boolean isReadingFirstNumber = false;

must be


boolean isReadingFirstNumber = true;

You are reading the first number at startup.

Also, in draw() you display firstNumber. You should have a variable textToDisplay there and fill it, because you also need to display secondNumber later.

Your code after ctrl-t

void mousePressed() {

  if ( mouseX > 10 && mouseX < 80) {
    if (mouseY > 80 && mouseX < 300) {

      firstNumber=1;
      if (isReadingFirstNumber) {
        firstNumber=1;
      } else {
        secondNumber= 1;

        if ( mouseY > 80  && mouseY < 400) {
          if (mouseX > 80 && mouseX < 310) {
            operation = '+';
          }
        }
      }
    }
  }
}

My code of the function mousePressed()


void mousePressed() {
  if ( mouseX > 10 && mouseX < 10+80 && 
    mouseY > 300 && mouseY < 300+80) {
    println("1");
    if (isReadingFirstNumber) {
      firstNumber=1;
    } else {
      secondNumber= 1;
    }
  }

  if (mouseX > 310 && mouseX < 310+80 && 
    mouseY > 400  && mouseY < 400+80) {
    println("+");
    operation = '+';
    isReadingFirstNumber=false;
  }
  //
}

Warm regards,

Chrisir

Full entire Sketch



Keypad keyPad;

color backgroundC = color(200);

String entery_text="Calculator";

float firstNumber = 0;
float secondNumber = 0;
boolean isReadingFirstNumber = true;  // !!!!!!!!!!!!!!!!!!!
char operation='?';                                  // !!!!!!!!!!!!!!!!!!!
float textToDisplay = firstNumber;           // !!!!!!!!!!!!!!!!!!!

void setup() {
  size(1400, 500);
  background(backgroundC);
  noStroke();
  textSize(60);
  keyPad = new Keypad();
}

void draw() {
  keyPad.Display();
  text(textToDisplay, 40, 70);
  text(operation, 10, 70);
  text(firstNumber+"   "+ operation+"  " + secondNumber, 440, 70); // !!!!!!!!!!!!!!!!!!!
}

// --------------------------------------------------------------

void mousePressed() {
  //
  if ( mouseX > 10 && mouseX < 10+80 && 
    mouseY > 300 && mouseY < 300+80) {
    println("1");
    if (isReadingFirstNumber) {
      firstNumber=1;
      textToDisplay = firstNumber; // !!!!!!!!!!!!!!!!!!!
    } else {
      secondNumber= 1;
      textToDisplay = secondNumber; // !!!!!!!!!!!!!!!!!!!
    }
  }

  if (mouseX > 310 && mouseX < 310+80 && 
    mouseY > 400  && mouseY < 400+80) {
    println("+");
    operation = '+';
    isReadingFirstNumber=false;
    textToDisplay = secondNumber; // !!!!!!!!!!!!!!!!!!!
  }
  //
}

// ===============================================================

class Keypad {
  color backgroundC = color(200);
  color entryC = color(242, 244, 255);
  color entryTC = color(0);
  color buttonC = color(255);
  color buttonTC = color(93, 67, 247);
  float firstNumber;

  Keypad() {
    // empty constructor
  }

  void Display() {

    //making the background behind the keys gray     
    background(backgroundC);

    //making the screen display background slightly purple
    fill(entryC);
    rect(10, 10, 380, 70);

    fill(entryTC);


    //making the background of the button's white
    fill(buttonC);

    //The square for 7
    rect(10, 100, 80, 80, 20);

    //the square for 8
    rect(110, 100, 80, 80, 20);

    //the square for 9
    rect(210, 100, 80, 80, 20);

    //the square for /
    rect(310, 100, 80, 80, 20);

    //the square for 4
    rect(10, 200, 80, 80, 20);

    //the square for 5
    rect(110, 200, 80, 80, 20);

    //the square for 6
    rect(210, 200, 80, 80, 20);

    //the square for x
    rect(310, 200, 80, 80, 20);

    //the square for 1
    rect(10, 300, 80, 80, 20);

    //the square for 2
    rect(110, 300, 80, 80, 20);

    //the square for 3
    rect(210, 300, 80, 80, 20);

    //the square for -
    rect(310, 300, 80, 80, 20);

    //the square for C
    rect(10, 400, 80, 80, 20);

    //the square for 0
    rect(110, 400, 80, 80, 20);

    //the square for =
    rect(210, 400, 80, 80, 20);

    //the square for +
    rect(310, 400, 80, 80, 20);

    fill(buttonTC);

    text("7", 27, 162);
    text("8", 127, 162);
    text("9", 227, 162);
    text("/", 333, 155);

    text("4", 27, 262);
    text("5", 127, 262);
    text("6", 227, 262);
    text("x", 327, 262);

    text("1", 27, 362);
    text("2", 127, 362);
    text("3", 227, 362);
    text("-", 327, 362);

    text("C", 27, 462);
    text("0", 127, 462);
    text("=", 227, 462);
    text("+", 327, 462);
  }
  //
}//class