String xdd="";
Scanner Lenijs = new Scanner(System.in);
do {
System.out.println("Starting number a: ");
int a = Lenijs.nextInt();
System.out.println("Ending number b: ");
int b = Lenijs.nextInt();
System.out.println("Choose 1.for a-b, 2. for all even and 3. for odd numbers.");
int c = Lenijs.nextInt();
if (c == 1) {
do{
System.out.println(a);
a++;
}while(a<=b);
}
if(c == 2) {
if(a%2==0) {
do{
System.out.println(a);
a=a+2;
}while(a<=b);
}
else {
a++;
do{
System.out.println(a);
a=a+2;
}while(a<=b);
}
}
if(c == 3) {
if(a%2==0) {
a++;
do{
System.out.println(a);
a=a+2;
}while(a<=b);
}
else {
do{
System.out.println(a);
a=a+2;
}while(a<=b);
}
}
System.out.println("Do you wish to continue? (Yes/No)");
xdd=Lenijs.next();
}while(xdd.equals("Yes"));
}
}
How could I add a 4th option where the user can print out all 3, as of now you can individually select from 1-3 where u get for 1.just from a-b all numbers, 2.is a-b with only pairs and 3.is a-b only odd, but I wanted a 4th option where u could get them all together and is easy to read/overview. Is that possible to make or it won't look good/can't with my code?
It is generally a good practice to limit a method to doing just one thing. So the method that decides which action to perform should not be performing the action - it passes responsibility to the appropriate method(s). In this case, move each activity into a separate method and use a switch to invoke each as appropriate. The following illustrates the concept.
switch(c) {
case 1:
do1();
break;
case 2:
do2();
break;
case 3:
do3();
break;
case 4:
do1();
do2();
do3();
break;
default:
reportUnknownEntry(c);
}
Related
I'm trying to error proof my program that basically works as a mini calculator. But I have no idea how to write a "Catch" statement that would detect when the user enters a case number that doesn't exist, in my case anything that is negative or > 4
System.out.println("Hello user! Which operation would you like to use?");
System.out.println("1) + \n2) - \n3) * \n4) /");
Scanner operacijai = new Scanner(System.in);
int operacija = operacijai.nextInt();
int n=1;
do {
try {
switch (operacija) {
case 1:
addingMethod();
n=2;
break;
case 2:
subtractingMethod();
n=2;
break;
case 3:
multiplyingMethod();
n=2;
break;
case 4:
dividingMethod();
n=2;
break;
}
}
catch(Exception e) {
System.out.print("Enter a correct number!");
}
} while(n==1);
operacijai.close();
} ```
Why do you want to throw an Exception unnecessarily? I suggest you just put a default case in your switch with the required error message. Also, move the input part inside the loop, so that it continues to take input.
I also suggest you use nextLine() instead of nextInt(). Check Scanner is skipping nextLine() after using next() or nextFoo()? to learn more about it.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("Hello user! Which operation would you like to use?");
System.out.println("1) + \n2) - \n3) * \n4) /");
Scanner operacijai = new Scanner(System.in);
int operacija = 0, n = 1;
boolean valid;
do {
do {
valid = true;
try {
operacija = Integer.parseInt(operacijai.nextLine());
} catch (NumberFormatException e) {
System.out.println("Enter an integer only.");
valid = false;
}
} while (!valid);
switch (operacija) {
case 1:
System.out.println("addingMethod()");
n = 2;
break;
case 2:
System.out.println("subtractingMethod()");
n = 2;
break;
case 3:
System.out.println("multiplyingMethod()");
n = 2;
break;
case 4:
System.out.println("dividingMethod()");
n = 2;
break;
default:
System.out.println("Invalid input");
}
} while (n == 1);
}
}
A sample run:
Hello user! Which operation would you like to use?
1) +
2) -
3) *
4) /
5
Invalid input
Another sample run:
Hello user! Which operation would you like to use?
1) +
2) -
3) *
4) /
a
Enter an integer only.
5
Invalid input
2
subtractingMethod()
You can also handle the use case in default
It is totally upto your use-case how you are handling the exception, you can also create your custom exception and throw from default
something like:
System.out.println("Hello user! Which operation would you like to use?");
System.out.println("1) + \n2) - \n3) * \n4) /");
Scanner operacijai = new Scanner(System.in);
int operacija = operacijai.nextInt();
int n=1;
do {
try {
switch (operacija) {
case 1:
addingMethod();
n=2;
break;
case 2:
subtractingMethod();
n=2;
break;
case 3:
multiplyingMethod();
n=2;
break;
case 4:
dividingMethod();
n=2;
break;
default:
System.out.print("Enter a correct number!")
throw new CustomException();
}
}
catch(CustomException e) {
System.out.print("Enter a correct number!");
}
} while(n==1);
operacijai.close();
}
Figured out a clean way of doing this with default case.
System.out.println("Hello user! Which operation would you like to use?");
System.out.println("1) + \n2) - \n3) * \n4) /");
Scanner operacijai = new Scanner(System.in);
int operacija;
do {
operacija = operacijai.nextInt();
switch (operacija) {
case 1:
addingMethod();
break;
case 2:
subtractingMethod();
break;
case 3:
multiplyingMethod();
break;
case 4:
dividingMethod();
break;
default:
System.out.print("Enter a correct number!");
}
} while(operacija < 1 || operacija > 4);
operacijai.close();
}
whenever I'm running the loop
"if loop" was running properly but, else one showing a syntax error message
does switch case support if else looping or not??
and one more doubt is how to prepare for the ocjp certification itself.
public static void main(String ah[])
{
int a,b,c,d=0,ch;
Scanner sc=new Scanner(System.in);
System.out.println("enter two number ");
a=sc.nextInt();
b=sc.nextInt();
System.out.println("enter your choise \n1.add\n2.sub\3.div\4.multi ");
ch=sc.nextInt();
switch(ch)
{
case 1:
c=a+b;
System.out.println("sum is = "+c);
break;
case 2:
c=a-b;
System.out.println("subtraction is = "+c);
break;
case 3:
System.out.println("press 1 & 2");
ch=sc.nextInt();
switch(ch)
{
case 1:
if(a>b)
d=b/a;
System.out.println("divi is = "+d);
//showing error = syntax error
else
System.out.println("");
break;
case 2:
d=a/b;
System.out.println("divistion is = "+d);
break;
}
break;
case 4:
c=a*b;
System.out.println("multiplication is = "+c);
break;
default :
System.out.println("wrong input ");
}
}
}
if(a>b)
d=b/a;
System.out.println("divi is = "+d);
//showing error = syntax error
else
System.out.println("");
The else isn't related to the if, because you've not got braces. What you've effectively written is:
if(a>b) {
d=b/a;
}
System.out.println("divi is = "+d);
else
System.out.println("");
Use braces:
if(a>b) {
d=b/a;
System.out.println("divi is = "+d);
} else {
System.out.println("");
}
Note that some (e.g. Google's style guide) would recommend always to use braces, even if there is just one statement between them.
Also note that this has nothing to do with being in a switch statement: you'd get exactly the same problem without the switch.
Try this:
case 1:
if(a>b){
d=b/a;
System.out.println("divi is = "+d);
}else
System.out.println("");
break;
In order to have more than one statement inside an if block, you need brackets to delimit it.
It's also good practice in Java to always use brackets to define blocks.
The problem is you have more than one statement for your if call before the else so you should enclose them in curly braces like this:
case 1:
if(a>b)
{
d=b/a;
System.out.println("divi is = "+d);
}
else
System.out.println("");
break;
Your problem is here:
if(a>b)
d=b/a;
System.out.println("divi is = "+d);
//showing error = syntax error
else
System.out.println("");
break;
The
System.out.println("divi is = "+d);
is between the if and else statements.
I am having some logic difficulties when trying to use a do-while loop. In my main() method. I am trying to prompt user again and again if they entered anything larger than 6:
do{
System.out.println("select your option: ");
System.out.println("1.option1");
System.out.println("2.option2");
System.out.println("3.option3");
System.out.println("4.option4");
System.out.println("5.option5");
System.out.println("6.Quit");
optionChoice = sc.nextInt();
switch (optionChoice) {
case 1:
option1Method();
break;
}
} while (optionChoice > 6);
Then inside my option1Method(), I have another do while loop:
do {
System.out.println("select your option: ");
System.out.println("1.opt1 method1");
System.out.println("2.opt2 method2");
System.out.println("3.opt3 method3");
System.out.println("4.Back");
optOption = sc.nextInt();
switch (optOption ) {
case 1: //do stuffs, same for case 2 and 3
break;
case 4: return;
default: break;
}
} while (optOption > 4);
For this method, I am trying to prompt user the choice again and again as long as they entered anything larger than 4. Then, when they entered 4, it should go back to the do while loop in main() method.
However, for the second do-while loop, when I entered 4, the program itself is just terminated. Any ideas?
Thanks in advance.
In the main method set the condition as:
optionChoice != 6
I am not sure if this is what you want, but I have written the following for you:
import java.util.Scanner;
public class Answer {
static Scanner sc = new Scanner(System.in);
static int optionChoice;
public static void main(String[] args) {
do{
System.out.println("select your option: ");
System.out.println("1.option1");
System.out.println("2.option2");
System.out.println("3.option3");
System.out.println("4.option4");
System.out.println("5.option5");
System.out.println("6.Quit");
optionChoice = sc.nextInt();
switch (optionChoice) {
case 1:
option1Method();
break;
}
} while (optionChoice > 6);
}
public static void option1Method() {
int optOption;
do {
System.out.println("select your option: ");
System.out.println("1.opt1 method1");
System.out.println("2.opt2 method2");
System.out.println("3.opt3 method3");
System.out.println("4.Back");
optOption = sc.nextInt();
switch (optOption ) {
case 1: //do stuffs, same for case 2 and 3
break;
case 4:
optionChoice = 7; // you have to make this value greater than 6 if you want to continue in the loop
return;
default: break;
}
} while (optOption > 4);
}
}
The problem when you enter 4 is that you go back to the main method, and the value you entered for optionChoice is 1 which makes false the condition of the while loop.
EDIT:
In response to #Timeout who is totally right by claiming I am assuming that optionChoice is a "global variable".
To keep your functionality I guess you should just have the following condition in the do-while loop of the main() method:
optionChoice > 6 || optionChoice == 1
EDIT:
what if you add as a condition in the second while loop
optOption != 4
so that you will remain in that loop until the user enters 4
EDIT TO HANDLE optionXMethod where X is a number:
do{
System.out.println("select your option: ");
System.out.println("1.option1");
System.out.println("2.option2");
System.out.println("3.option3");
System.out.println("4.option4");
System.out.println("5.option5");
System.out.println("6.Quit")
optionChoice = sc.nextInt();
switch (optionChoice) {
case 1:
option1Method();
break;
case 2:
option2Method();
break;
case X:
optionXMethod();
break;
}
} while (optionChoice != 6);
void option1Method() {
int optOption;
do {
System.out.println("select your option: ");
System.out.println("1.opt1 method1");
System.out.println("2.opt2 method2");
System.out.println("3.opt3 method3");
System.out.println("4.Back");
optOption = sc.nextInt();
switch (optOption ) {
case 1: //do stuffs, same for case 2 and 3
break;
// you do not need the case 4: because when optOptiontakes the value of 4 it leaves the loop
default: break;
}
} while (optOption != 4);
}
....
General case:
void optionXMethod() {
int optOption;
do {
System.out.println("select your option: ");
System.out.println("1.opt1 method1");
System.out.println("2.opt2 method2");
System.out.println("3.opt3 method3");
System.out.println("4.opt4 method4");
// more options
System.out.println("X.Back"); // where X is the number option of Back
optOption = sc.nextInt();
switch (optOption ) {
case 1: //do stuffs, same for case 2 and 3
break;
// you do not need the case 4: because when optOptiontakes the value of 4 it leaves the loop
default: break;
}
} while (optOption != X); // whatever the value of X is should be consider for this condition
}
i have a problem i dont know what to put on case section, when ever the user input their grades from 0-100 there are output corresponds to their grades failed,good,verygood,excellent.
import java.util.Scanner;
public class ProgTestI {
public static void main (String args[]){
Scanner pao = new Scanner(System.in);
System.out.print("Grades: ");
String grades = pao.next();
int grado = Integer.parseInt(grades);
switch (grado){
case =<74: /* iwant to put 0 to 74*/
System.out.println("Failed");
case : /* 75-80*/
System.out.println("bellow average");
case : /*81-85*/
System.out.println("average");
case : /*86-90*/
System.out.println("Good");
case : /*91-96*/
System.out.println("VeryGood");
default:
}
}
}
You cannot use switch for ranges, you need to replace this chunk of code with proper if/else blocks.
Switch works only on numeric values, but it works like
if(numericVal == 40)
So writing it for ranges is... waste of code, and not readable.
You need to rewrite it:
if( g <= 74){
...
}else if( g > 74 && g <= 80 ){
...
Your case code is incorrect, you can do as Beri mentioned.
If you want to implement switch statement in your application, then you can do as follows:
public static void main(String[] args) {
Scanner pao = new Scanner(System.in);
System.out.print("Grades: ");
String grades = pao.next();
int grado = Integer.parseInt(grades);
int checkedCase=0;
if(grado<=74){
checkedCase=1;
}
else if(grado>=75&&grado<=80){
checkedCase=2;
}
else if(grado>=81&&grado<=85){
checkedCase=3;
}
else if(grado>=86&&grado<=90){
checkedCase=4;
}
else if(grado>=91&&grado<=96){
checkedCase=5;
}
switch (checkedCase){
case 1: /* iwant to put 0 to 74*/
System.out.println("Failed");
break;
case 2: /* 75-80*/
System.out.println("bellow average");
break;
case 3: /*81-85*/
System.out.println("average");
break;
case 4: /*86-90*/
System.out.println("Good");
break;
case 5: /*91-96*/
System.out.println("VeryGood");
break;
default: System.out.println("Please enter a value in range 0-96");
break;
}
}
I need the syntax for adding in the variable parameter to a switch case that already has lots of parameters. The context is provided below.
I'm using a switch case to change a string answer to an integer return. Instead of having the user answer
1. This.
2. Something else.
I want the answer to look like
(y/n)
I've done it before with a code like this:
static public int getYN() {
String answer = "";
switch(keyboard.nextLine().substring(0, 1).toLowerCase()) {
case "y":
return 1;
case "n":
return 0;
default:
return 2;
}
}
And then using the statement:
int getAnswer = getYN();
System.out.println();
if (getAnswer == 1) {
System.out.println("Stuff.");
test = 1;
}
else {
System.out.println("Other stuff.");
System.out.println();
}
But, I don't know where to put the String answer variable into the switch case. Usually, if you aren't using many other parameters, it would just be
switch(answer) {
}
Check it inline, forget having a dedicated method to doing this check.
char getAnswer = keyboard.next().charAt(0);
System.out.println();
if (getAnswer == 'y' || getAnswer == 'Y')
{
System.out.println("Stuff.");
test = 1;
}
else if( getAnswer == 'n' || getAnswer == 'N')
{
System.out.println("Other stuff.");
System.out.println();
}
If you absolutely have to use a switch:
char getAnswer = keyboard.next().charAt(0);
switch(getAnswer)
{
case 'y':
System.out.println("Stuff.");
test = 1;
break;
case 'n':
System.out.println("Other stuff.");
System.out.println();
break;
}
You can achieve the same thing in one line:
public static int getYN(String s) {
return ("yn YN".indrxOf(s) + 3) % 3;
}
Both upper and lower cases are handled, and the "not found" default value of 2 is handled by adding 3 (indexOf() returns -1 when the target is not found) and modulus divusion takes care of the capital letter indexes.
Fairly neat even if I do say so myself.