i'm beginner for java.
I have a project for final mark. I did something but i need your help.
My project is about mathematical operations. I should use JOptionPane.
I could first part InputDialog But I can't show them in the messagebox ( i used println only to see how to work). And of course the division part is very important. If you try to divide by zero it should be error and should write something about error. I'm waiting your help. Thanks a lot and best regards.
import javax.swing.JOptionPane;
public class JavaMath3 {
public static void main(String[] args) {
int num1, num2, add, sub, multi;
double div;
num1 = Integer.parseInt(JOptionPane.showInputDialog("Write 1st number."));
num2 = Integer.parseInt(JOptionPane.showInputDialog("Write 2nd number."));
add = num1+num2;
System.out.println("Addition " + add);
sub = num1-num2;
System.out.println("Subtraction " + sub);
multi = num1*num2;
System.out.println("Multiplication " + multi);
if(num2 != 0 ) {
div = (double) num1/num2;
System.out.println("Division: " + div);
}
else {
System.out.println("A number can not divided by zero.");
}
}
}
it's a very simple you can use the JOPtionPane method showMessageDialog
JOptionPane.showMessageDialog(parent, "your message");
and here's a sample code
public static void main(String[] args)
{
int num1 = Integer.parseInt(JOptionPane.showInputDialog("Write 1st number."));
int num2 = Integer.parseInt(JOptionPane.showInputDialog("Write 2nd number."));
int sum = num1 + num2;
JOptionPane.showMessageDialog(null, "sum = " + sum);
}
After update
here's a complete example
public static void main(String[] args)
{
int num1, num2, add, sub, multi;
double div;
num1 = Integer.parseInt(JOptionPane.showInputDialog("Write 1st number."));
num2 = Integer.parseInt(JOptionPane.showInputDialog("Write 2nd number."));
add = num1 + num2;
sub = num1 - num2;
multi = num1 * num2;
String result = "sum = " + add + "\n" + "sub = " + sub + "\nmul = " + multi;
if (num2 != 0)
{
div = (double) num1 / num2;
result = result + " \n div = " + div;
} else
{
result = result + " \n div = A number can not divided by zero";
System.out.println("A number can not divided by zero.");
}
JOptionPane.showMessageDialog(null, result);
}
I don't get what mean by box but if you want them all in a same dialog box you could just write this line after your else statement:
JOptionPane.showMessageDialog(null, "Addition: " + add+ "\nSubtraction: " + sub+"\nMultiplication " + multi+ "\nDivision: " + div);
Related
I am new to java and this is my first program, I'm very confused with these errors and have looked everywhere for the answer. please help!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner myObj = new Scanner(System.in);
System.out.println("Enter first number");
String str1 = myObj.nextLine();
System.out.println("Enter Operator");
String op = myObj.nextLine();
System.out.println("Enter second number");
String str2 = myObj.nextLine();
int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
if (op.equals("+")) {
int ans = (num1 + num2);
} else if (op.equals("-")){
int ans = (num1 - num2);
}
System.out.println(num1 + " " + op + " " + num2 + " = " + ans);
}
}
Then it gives me these errors, I'm using IntelliJ idea
Cannot resolve symbol 'ans'
Variable 'ans' is never used
Variable 'ans' is never used
Cannot resolve symbol 'ans'
Declare ans outside the if:
int ans = 0;
if (op.equals("+")) {
ans = (num1 + num2);
} else if (op.equals("-")){
ans = (num1 - num2);
}
System.out.println(num1 + " " + op + " " + num2 + " = " + ans);
otherwise it is never visible in the line where it is used in System.out.println
Variable 'ans' is never used
Variable 'ans' is never used
In your code ans is declared in the if - code blocks, and after assignment those ans are no longer used, because code-block in if ends just after the assignment.
I am trying to code in Java and started with a basic repeating addition quiz.
Repeating addition until enter the correct answer works fine, however, when I try to limit it to 3 trials, it does not stop at 3, but goes for 4 trials as shown below,
import java.util.Scanner;
public class RepeatAdditionQuiz {
public static void main(String[] args) {
// TODO Auto-generated method stub
int number1 = (int) (Math.random() * 10);
int number2 = (int) (Math.random() * 10);
Scanner input = new Scanner(System.in);
System.out.print("What is " + number1 + " + " + number2 + " : " );
int answer = input.nextInt();
int count = 0;
while(count < 3) {
if (number1 + number2 != answer) {
System.out.print("Try again, What is " + number1 + " + " + number2 + " : " );
answer = input.nextInt();
}
else
System.out.println("You're correct ");
count ++;
}
System.out.println("Your trails ended ");
}
}
This is my output,
What is 1 + 2 : 8
Try again, What is 1 + 2 : 6
Try again, What is 1 + 2 : 9
Try again, What is 1 + 2 : 9
Your trails ended
As you can see I have four trails with the first one. When I tried to remove first user input before while loop (which prints What is 1 + 2 :), I don't see anything in console. How can I just limit it to 3?
In python I can do something like this,
from random import randint
number1 = randint(0,9)
number2 = randint(0,9)
answer = number1 + number2
count = 0
while count < 3:
print(number1, "+", number2)
user_answer = int(input("What is number1 + number2: "))
if answer == user_answer:
print("yes, you're right")
break
else:
print("You're wrong, please enter again")
count +=1
print("Sorry, all trials are done! ")
And I get the output like this, exactly three trails (every time I enter wrong answer),
8 + 5
What is number1 + number2: 16
You're wrong, please enter again
8 + 5
What is number1 + number2: 18
You're wrong, please enter again
8 + 5
What is number1 + number2: 18
You're wrong, please enter again
Sorry, all trials are done!
What mistake am I making in java? Is there any better way to do in while loop? Any suggestion would be appreciated.
I prefer to use do-while loop in situation like this
import java.util.Scanner;
public class RepeatAdditionQuiz {
public static void main(String[] args) {
// TODO Auto-generated method stub
int number1 = (int) (Math.random() * 10);
int number2 = (int) (Math.random() * 10);
Scanner input = new Scanner(System.in);
System.out.print("What is " + number1 + " + " + number2 + " : ");
int answer = input.nextInt();
int count = 1;
do {
if (number1 + number2 != answer) {
System.out.print("Try again, What is " + number1 + " + " + number2 + " : ");
answer = input.nextInt();
} else{
System.out.println("You're correct ");
break;
}
count++;
} while (count < 3);
System.out.println("Your trails ended ");
}
}
In this I initialize count as 1 because we already provide answer an input at the time of instantiation.
You can change your main method to be something like Below. Basically it is your code with change suggested by Dave and a break statement in else block.
Hope this helps
public static void main(String[] args) {
// TODO Auto-generated method stub
int number1 = (int) (Math.random() * 10);
int number2 = (int) (Math.random() * 10);
Scanner input = new Scanner(System.in);
System.out.print("What is " + number1 + " + " + number2 + " : " );
int answer = input.nextInt();
int count = 0;
while(count < 2) {
if (number1 + number2 != answer) {
System.out.print("Try again, What is " + number1 + " + " + number2 + " : " );
answer = input.nextInt();
}
else{
System.out.println("You're correct ");
break;
}
count ++;
}
System.out.println("Your trails ended ");
}
The problem with your code is initially you are asking to guess the answer and then initializing the count as 0.
int answer = input.nextInt();
int count = 0;
You have already asked user for the 1st trail,so initialize count as 1.
int count = 1;
Another way to solve these kind of problems is to use do-while as mentioned by #Ayush Goyal.
To be close to your Python example you can try something like this
public static void main(String[] args) {
// TODO Auto-generated method stub
int number1 = (int) (Math.random() * 10);
int number2 = (int) (Math.random() * 10);
Scanner input = new Scanner(System.in);
int answer = 0;
int count = 0;
while(count < 3) {
System.out.print("What is " + number1 + " + " + number2 + " : " );
answer = input.nextInt();
if (number1 + number2 != answer) {
System.out.println("You're wrong, please enter again");
}
else{
System.out.println("You're correct ");
break;
}
count ++;
}
System.out.println("Your trails ended ");
}
I need some with evaluating math expressions in a string.
As of now my code will work for only positive numbers.
I used regex to split the string into two separate arrays. I was able to split all the math signs in one array and all the numbers in the other. But I am unsure how to do it for negative numbers. (I dont understand the regex i just put stuff and it worked but not for negative numbers)
Anyways here is my code, Thanks in advance!`
boolean mybool = true;
String str = "1.0+2.0+3.0+4.0";
String[] numarray = str.split("[-+/%*]");
String[] signarray = str.split("[0123456789.]");
double result = 0.0;
double num1 = 0.0;
double num2 = 0.0;
String mystr = "";
//Adds each element in sign array to mystr
for(String e : signarray){
if(e != ""){
mystr+=e;
}
}
//Assign signarray new size of length mystr
signarray = new String[mystr.length()];
//Cycle through each element in str and add it to signarray
for(int i = 0; i < mystr.length(); i++){
signarray[i] = mystr.charAt(i)+"";
}
//Print each element in num array
System.out.print("Print each element in number array: ");
for(String e : numarray){
System.out.print(e+ " ");
}
System.out.println();
System.out.print("Print each element in sign array: ");
//print each element in sign array
for(String e : signarray){
System.out.print(e+ " ");
}
System.out.println();
//Prints each element in sign array and element value
for(int i = 0; i < signarray.length; i++){
System.out.println("SignArray[" + i + "] = " + signarray[i]);
}
for(int i = 2; i <= numarray.length; i++){
//this will get the first two indexes of number array
//and store them in num1 and num1 then i use another if
//statement to go sign array to get a sign to evaluate the
//two nums and store the value in result.
//hopefully you understand my logic
if(mybool == true){
num1 = Double.parseDouble(numarray[0]);
num2 = Double.parseDouble(numarray[1]);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
if(signarray[0].equals("+")){
result = num1 + num2;
System.out.println("Result = num1 + num2 = " + num1 + "+" + num2 + "= " + result );
} else if(signarray[0].equals("-")){
result = num1 - num2;
System.out.println("Result = num1 - num2 = " + num1 + "-" + num2 + "= " + result );
} else if(signarray[0].equals("/")){
result = num1 / num2;
System.out.println("Result = num1 / num2 = " + num1 + "/" + num2 + "= " + result );
} else if(signarray[0].equals("*")){
result = num1 * num2;
System.out.println("Result = num1 * num2 = " + num1 + "*" + num2 + "= " + result );
} else if(signarray[0].equals("%")){
result = num1 % num2;
System.out.println("Result = num1 % num2 = " + num1 + "%" + num2 + "= " + result );
}
mybool = false;
} else {
num2 = Double.parseDouble(numarray[i-1]);
System.out.println("Num2 = " + num2);
if(signarray[i-2].equals("+")){
result = result + num2;
System.out.println("Result after math is : " + result);
} else if(signarray[i-2].equals("-")){
result = result - num2;
System.out.println("Result after math is : " + result);
} else if(signarray[i-2].equals("/")){
result = result / num2;
System.out.println("Result after math is : " + result);
} else if(signarray[i-2].equals("*")){
result = result * num2;
System.out.println("Result after math is : " + result);
} else if(signarray[i-2].equals("%")){
result = result % num2;
System.out.println("Result after math is : " + result);
}
}
}`
Output:
Print each element in number array: 1.0 2.0 3.0 4.0
Print each element in sign array: + + +
SignArray[0] = +
SignArray[1] = +
SignArray[2] = +
num1 = 1.0
num2 = 2.0
Result = num1 + num2 = 1.0+2.0= 3.0
Num2 = 3.0
Result after math is : 6.0
Num2 = 4.0
Result after math is : 10.0
eventually i wanna be able to evaluate a string like this
//String str = "3.01+2.2/4.01*7.1%4.0--2.0";
but i dont know how to get negative numbers from sting and store in the num array.
Thanks for you help!
Ideally, you should use a parser instead of regex. However given your current requirements, it would be simple to use positive and negative lookbehinds.
(1). Operators are always preceded by a decimal number. So we split the arguments by matching any operator which appears after a decimal number (positive lookbehind).
String[] arguments = str.split("(?<=\\d)[-+/%*]");
(2). Arguments may start with an optional minus sign but are never preceded by another decimal number. So we split the operators by matching arguments not after a decimal number (negative lookbehind).
String[] operators = str.split("(?<!\\d)-?[0-9.]+");
Note however that there will be an empty operator at position 0 of the array. If you want to avoid this then there are many different methods you could use instead of String.split.
I am attempting to simplify my long code of a calculator program, but I have a road block. I have a new else if statement for each calculator operator, but what I want to do is allow the user to manually type in, on one line, the entire operation they would like to perform and have the code compute it.
Here's what I have:
do {
System.out.println("What function would you like to perform?");
System.out.print("Exit Calculator (Q), Add (+), Subtract (-), Multiply (x), Divide (/): ");
maininput = in.next();
if (maininput.equals("+")) {
System.out.print("Enter the first number to add: ");
num1 = in.nextDouble();
System.out.print("Enter the second number to add: ");
num2 = in.nextDouble();
System.out.println();
answer = num1 + num2;
System.out.println(num1 + " + " + num2 + " = " + answer);
System.out.println();
}
else if (maininput.equals("-")) {
System.out.print("Enter the first number to subtract: ");
num1 = in.nextDouble();
System.out.print("Enter the second number to subtract: ");
num2 = in.nextDouble();
System.out.println();
answer = num1 - num2;
System.out.println(num1 + " - " + num2 + " = " + answer);
System.out.println();
}
else if(maininput.equals("x")) {
System.out.print("Enter the first number to multiply: ");
num1 = in.nextDouble();
System.out.print("Enter the second number to multiply: ");
num2 = in.nextDouble();
System.out.println();
answer = num1 * num2;
System.out.println(num1 + " x " + num2 + " = " + answer);
System.out.println();
}
else if(maininput.equals("/")) {
System.out.print("Enter the first number to divide: ");
num1 = in.nextDouble();
do {
System.out.print("Enter the second number to divide: ");
num2 = in.nextDouble();
System.out.println();
if (num2 == 0) {
System.out.println("Cannot divide by 0! Please enter a different number.");
}
} while (num2 == 0);
answer = num1 / num2;
System.out.println(num1 + " / " + num2 + " = " + answer);
System.out.println();
}
else if(maininput.equals("Q") || maininput.equals("q") || maininput.equals("EXIT") || maininput.equals("exit")) {
in.close();
System.exit(0);
}
else {
System.out.println(maininput + " is not a valid operand. Please try again.");
System.out.println();
}
} while (maininput != "Q" && maininput != "q");
This is what I want the output to be:
Enter operation:
4 * 6
4 * 6 = 24
Should be able to enter any operation here on one line. I am not asking you to write my calculator for me, I am asking how to allow the computer to read in the entire operation off one line and compute it, then print it.
If you use scanner readLine then you can read a whole line
e.g.
4 * 6
This line can then be split to get three tokens
String tokens [] = line.split (" ");
then you can see what operation to do based upon token[1]
if (token[1].equals ("-") {
//lets minus token[2] from token[0]
// need to convert String to Number
}
You can use String.split and store it in an array. Then it will return an array of string, parse those back to integers. the do the operation you want. The x variable will be the result.
if(maininput.contains("+")) {
String[] stringarr = string.split("\\+");
int x = Integer.parseInt(stringarr[0]) + Integer.parseInt(stringarr[1]);
System.out.println(stringarr[0] + " + " + stringarr[1] + " = " + x);
} else if(maininput.contains("-")) {
String[] stringarr = string.split("\\-");
int x = Integer.parseInt(stringarr[0]) - Integer.parseInt(stringarr[1]);
System.out.println(stringarr[0] + " - " + stringarr[1] + " = " x);
}
... And so on.
You could try parsing the line using a Pattern object, something like this:
Pattern opPattern = Pattern.compile("(\\d+) *([+-*/]) *(\\d+)");
Matcher matcher = opPattern.matcher(userLine);
if(matcher.find()) {
int op1 = Integer.toValue(matcher.group(1));
int op2 = Integer.toValue(matcher.group(3));
String op = matcher.group(2);
if(op.equals("+")) {
// do + op ...
} else ... {
// etc...
}
} else {
// error in line, not the form of an operation
}
Have a look at the javadoc, as I'm not sure if I used the correct method names and the like, just tried to illustrate the idea...
This program is designed to add 2 random numbers generated by the computer, when the user answer goes wrong , the computer tells the user to try it again, by using the while loop. The program will stop once the user enters a correct number. I have to calculate the wrong count in the while loop, however, it gives me the wrong count 1 when it is the second attempt.Please be kind enough to tell me where I go wrong in the code. Thank you.
import java.util.Scanner;
public class add {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num1 = (int) (Math.random() * 10);
int num2 = (int) (Math.random() * 10);
int wrong = 0;
System.out.println("What is " + num1 + "+" + num2 + "=" + "?");
int answer = input.nextInt();
while (num1 + num2 != answer) {
System.out.println("Wrong answer, Try again . " +
"What is " + num1 + "+" + num2 + "? ");
answer = input.nextInt();
System.out.println("The number of attemt is " + wrong);
++wrong;
}
System.out.println("You got it correct !");
}
}
The error is in incrementing the number the user has gotten wrong AFTER printing "You got x wrong"
Just put ++wrong above System.out.println("The number of attemt is " + wrong);
while (num1 + num2 != answer) {
System.out.println("Wrong answer, Try again . " +
"What is " + num1 + "+" + num2 + "? ");
answer = input.nextInt();
++wrong;
System.out.println("The number of attemt is " + wrong);
}
Just change
wrong = 0
to
wrong = 1
wrong should probably be renamed to numberOfAttempts.
Initialize wrong to 1 instead of 0.
int wrong = 1;
A more appropriate name for the variable would be attempt if you take this approach.
You need to increment wrong before you display it:
import java.util.Scanner;
public class Add {
public static void main(String[] args ){
Scanner input = new Scanner (System.in);
int num1 = (int)(Math.random() * 10);
int num2 = (int)(Math.random() * 10);
int wrong = 0 ;
System.out.println("What is " + num1 + "+" + num2 + "=" + "?");
int answer = input.nextInt();
while (num1 + num2 != answer){
wrong++ ;
System.out.println("Wrong answer, Try again . What is " + num1 +"+"+ num2 + "? " );
answer = input.nextInt();
System.out.println("The number of attempt is " + wrong);
}
System.out.println("You got it correct !");
}
}