Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

Hi guys, I'm very new to programming in general, and two days old in my java experience.

I've been messing around with many guides and been creating my own programs with the guides. Right now, I thought it would be interesting to create a program solving my favorite mathematical formula -- the Quadratic formula. Ya know that one with the song! :D

Anyways, for some reason I'm having a NaN outcome for my current line in the program.

Also! I have been having a lot of problems with if- statements and strings. My last program had the same issue.

I would love for some feedback here.

Code :

import java.util.Scanner;
public class calc_Quadratic {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
String reply = null;
String hint = null;
int a = 0;
int b = 0;
int c = 0;
System.out.println("Welcome to the homemade Quadratic Formula Calculator.");
System.out.println("");
System.out.println("This program will help you solve for the possible zeroes in your specific equations.");
System.out.println("The quadratic formula is as follows -- ((ax^2) + bx + c)/2a");
System.out.println("If your equation is in the said formula, please continue and fill out the following variables with their corresponding numbers.");
System.out.println("");
System.out.println("");
System.out.println("(ax^2) [otherwise known as a x squared]: ");
a = keyboard.nextInt();
System.out.println("");
System.out.println("bx: ");
b = keyboard.nextInt();
System.out.println("");
System.out.println("c: ");
c = keyboard.nextInt();
System.out.println("");
System.out.println("");
System.out.println("Are you ready for the answer?");
reply = keyboard.next();
if (reply == "yes") {
System.out.println("First we must take the opposite of b (positive/negative): " + -b);
} else {
System.out.println("Please type in 'yes' when you ready.");
}
System.out.println("");
System.out.println("We should then take the square root of ((b^2) - 4ac): " + (Math.sqrt(Math.pow(b, 2) - 4*a*c)));
}
}

Thanks!

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

And what values are you feeding it for a, b, and c? Ensure that the values you've chosen result in a valid polynomial that can be solved with the quadratic equation. From there, I don't think you've completely solved the quadratic equation. You've gotten pieces of it. You might check the value of those pieces and then put them together into the answer.

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

Sorry if I'm not making sense, programming is still a foreign language to me.

If what you said was regarding the specific user input that i plugged in to get NaN, would that mean I'd have to use a loop?

As for the program not being finished. I am aware there are other ways I could do it. However, I wanted to program it with the skills I already have. That said, I wanted to take the program step by step. And also with that, I didn't want to finish the program until I have the issue fixed.

Also, are you aware of the problem I am having with the if statements and string variables?

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

At your stage it might be helpful to print out the intermediate results OFTEN, so that you can see what the program is doing. I don't know what issues you're having. I'm not sure you're having any. The result NaN could be happening because a, b, and c don't result in a number that has a square root. That was the purpose of my first question. Posting a sample run might look like:

Code :

Welcome to the homemade Quadratic Formula Calculator.
This program will help you solve for the possible zeroes in your specific equations.
The quadratic formula is as follows -- ((ax^2) + bx + c)/2a
If your equation is in the said formula, please continue and fill out the following variables with their corresponding numbers.
(ax^2) [otherwise known as a x squared]:
1
bx:
4
c:
4
Are you ready for the answer?
y
Please type in 'yes' when you ready.
We should then take the square root of ((b^2) - 4ac): 0.0

Is that wrong?

Quote:

Also, are you aware of the problem I am having with the if statements and string variables?

What problem?

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

Yes that makes sense thank you. :D

I'll have to find a way for it to work in a way that the formula is performed no matter what results. That might take some more time though. You've been cry helpful! :D

As for that problem I want the user to type in yes. If they don't, they will simply be shown the message "please type yes to continue… And this will allow the user to check their answers along the way.

However instead. No matter what I type in, the message "please type yes… will show up.

I'm realizing that maybe it should have been a while loop, but I'm wondering if it's a common error.

Code :

while (reply != "yes") {
System.out.println("Please type in 'yes' when you ready.");
reply = keyboard.next();
}
System.out.println("First we must take the opposite of b (positive/negative): " + -b);

Actually this is an error I keep seeming to have. If I type yes it still write the message that shows if reply != yes.

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

I'm somewhat new to Java myself, but one possibility is that your != function isn't designed to work with Strings. Try the function "reply.equals("yes")" or the more useful "reply.equalsIgnoreCase("yes")", which will also allow "Yes" or "yes" or "YES"

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

I was thinking it might be something like that since I read somewhere that strings do not work without '==' but that caused an error when I wrote '!=='.

If I can't find a not equal function, I'll work around it with this new information you've given me. Thanks a lot! :D

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

For a not equal function, it should be as simple as !reply.equals("yes"). I believe the ! inverter works with all boolean arguments, so there's always a way to work it into an if statement.

Also, I did some research to make sure that what I said was right, and the == is almost never the right option, since it doesn't compare the data held by the string, it actually compares the strings themselves by checking their space in memory. So if you had two strings, X and Y, which both read "Hello", == would still think they're different. It's tricky to use effectively, so it's probably best to stick with .equals. I hope that helps!

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

Great! I had actually trailed that right after you informed me of the rply.equals function. It worked great! Fantastic!

As far as what you said about the ==. I'll be completely honest, I can't fully grasp the concept but it will help me in the long run when I take a programming class in college, so I have some prior knowledge. I really appreciate the concern and help! :D

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

Here's another look at how variables and their values can be compared.

The == operator compares the contents of the variables.

For primitive variables, the value is in the variable itself. The == operator compares their values as expected.

For objects like a String, the value is in the instance of the object that is located somewhere in memory. The String variable contains the address of where in memory that object is located. Using the == operator with String variables compares the memory addresses of where the contents are stored. It does not compare the contents of the object. The equals() method compares the contents of two objects stored somewhere in memory.

Some times you want to know if two reference variables point/refer to the same object. That is when you would use the == operator.

Re: Couldn't find an appropriate home for this question. [Beginner] [Basic Mathematic formula and if-statements]

I might actually be able to come up with an example where it would be used; the '=='

You guys have been very helpful.

I was wondering if someone can point me in the direction of what i should be looking into when I want to used complex numbers?

Here's an obviously wrong code for it i have so far.

Code :

double sqrt = (Math.sqrt(Math.pow(b, 2) - 4*a*c));
//System.out.println("We should then take the square root of ((b^2) - 4ac): " + sqrt);
//if (sqrt < 0) {
// Math.abs(Math.sqrt(Math.pow(b, 2) - 4*a*c));
//}
if (sqrt < 0) {
System.out.println("You have entered an equation with one or more complex numbers. i = the sqare root of -1");
double numImaginary = (sqrt * Math.pow(1, -2));
System.out.println("We should then take the square root of ((b^2) - 4ac)= " + sqrt + "i");
}
else {
System.out.println("We should then take the square root of ((b^2) - 4ac)= " + sqrt);
}

FULL CODE

Code :

import java.util.Scanner;
public class calc_Quadratic {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
String reply = null;
String hint = null;
double a = 0;
double b = 0;
double c = 0;
System.out.println("Welcome to the homemade Quadratic Formula Calculator.");
System.out.println("");
System.out.println("This program will help you find the possible zeroes in your specific equations.");
System.out.println("The quadratic formula is as follows -- ((ax^2) + bx + c)/2a");
System.out.println("If your equation is in the said formula, please continue and fill out the following variables with their corresponding numbers.");
System.out.println("");
System.out.println("");
System.out.println("(ax^2) [otherwise known as a x squared]: ");
a = keyboard.nextInt();
System.out.println("");
System.out.println("bx: ");
b = keyboard.nextInt();
System.out.println("");
System.out.println("c: ");
c = keyboard.nextInt();
System.out.println("");
System.out.println("");
System.out.println("Are you ready for the next step?");
reply = keyboard.next();
while (!reply.equalsIgnoreCase("yes")) {
System.out.println("Please type in 'yes' when you are ready.");
reply = keyboard.next();
}
System.out.println("First we must take the opposite of b (positive/negative): " + -b);
double oppositeB = -b;
System.out.println("");
System.out.println("Are you ready for the next step?");
reply = keyboard.next();
while (!reply.equalsIgnoreCase("yes")) {
System.out.println("Please type in 'yes' when you are ready.");
reply = keyboard.next();
}
double sqrt = (Math.sqrt(Math.pow(b, 2) - 4*a*c));
//System.out.println("We should then take the square root of ((b^2) - 4ac): " + sqrt);
//if (sqrt < 0) {
// Math.abs(Math.sqrt(Math.pow(b, 2) - 4*a*c));
//}
if (sqrt < 0) {
System.out.println("You have entered an equation with one or more complex numbers. i = the sqare root of -1");
double numImaginary = (sqrt * Math.pow(1, -2));
System.out.println("We should then take the square root of ((b^2) - 4ac)= " + sqrt + "i");
}
else {
System.out.println("We should then take the square root of ((b^2) - 4ac)= " + sqrt);
}
System.out.println("");
System.out.println("Are you ready for the next step?");
reply = keyboard.next();
while (!reply.equalsIgnoreCase("yes")) {
System.out.println("Please type in 'yes' when you are ready.");
reply = keyboard.next();
}
//...
double addTop = oppositeB + sqrt;
double minusTop = oppositeB - sqrt;
//...
System.out.println("Now we will have to add our result of the first step: " + oppositeB + ", to our result from the second step: " + sqrt + ", to get: " + addTop);
System.out.println("We will then have to replace the addition sign to subtract our second result, " + sqrt + ", from our 1st result, " + oppositeB + ", to get: " + minusTop);
System.out.println("");
System.out.println("Are you ready for the next step?");
reply = keyboard.next();
while (!reply.equalsIgnoreCase("yes")) {
System.out.println("Please type in 'yes' when you are ready.");
reply = keyboard.next();
}
//...
double divPositive = addTop/(2*a);
double divNegative = minusTop/(2*a);
//...
System.out.println("Alright. Next we will have to divide 2a (2 * a), " + (2 * a) + ", from the result of step 3, " + addTop + ", to get: x = " + divPositive);
System.out.println("Finally we will have to divide 2a (2 * a), " + (2 * a) + ", from the result of step 4, " + minusTop + ", to get: x= " + divNegative);
System.out.println("");
System.out.println("");
if (divPositive == divNegative) {
System.out.println("You only have one zero. It is: x = " + divPositive);
}else {
System.out.println( "Your zeroes are: x = " + divPositive + " and x = " + divNegative);
}
//Must add conditional statement for imaginary numbers
//Must add conditional statements if both x's = each other done~
//Add statement if only one zero
//Possibly edit program to have user enter correct answer in order to continue*