Switch statement and case variables
Since constant variables do not have to be initialized when declared, they could be initialized later based on conditional logic and used to make the Switch statement more useful by using them as case labels. Well, sounds good in theory but I can't find anyway to make it work.
I can't even get this to compile when the value of the case label is obvious at compile time :
public class Switchtest
public static void main(String[] args)
int test = 0;
final int x;
x = 1;
switch (test)
case x: System.out.println("case x " );break;
default: System.out.println("Default ");break;
It gives an error about expecting x to be constant. I've tried static initializer blocks, etc. Is there anyway to have the case label variables initialized at runtime to make the Switch statement more useful?
If jvm can use a hashtable for a switch statement. This hashtable is as constant as the compiled code, i.e., it can be defined at compile- time and it con not be modified runtime. Therefore a switch- case construction is faster than an else-if construction. But the strength of else- if is that it is more flexible. If you want to test on multiple variable values, you must use else-if
class a
public int method()
int val = (int)(Math.random()*3);
int x;
if(val == 0)
x = 1;
else if(val == 1)
x = 2;
else
x = 3;
return x;
class b
public int method()
int val = (int)(Math.random()*3);
int x;
switch (val)
case 0:
x = 1;
break;
case 1:
x = 2;
break;
default:
x = 3;
break;
return x;
}b is bigger than a, but also faster. The technique used in a is more flexible, but b uses O(1) time where a uses O(n). (where n is the number of cases/else-ifs)
Similar Messages
-
CASE STATEMENTS AND CASE EXPRESSIONS IN ORACLE9I PL/SQL
제품 : PL/SQL
작성날짜 : 2001-11-13
CASE STATEMENTS AND CASE EXPRESSIONS IN ORACLE9I PL/SQL
=======================================================
PURPOSE
아래의 자료는 Case 문에서 oracle 8.1.7과 Oracle 9i의 New Feature로 8.1.7에서는
sqlplus 에서만 가능했고, 9i 부터는 pl/sql 까지 가능하다.
Explanation
1. Oracle 8.1.7 Feature
Oracle 8.1.7 에서 Case 문은 Decode 문과 유사하지만, 기존의 decode 문을 쓰는 것보다
더 많은 확장성과 Logical Power와 좋은 성능을 제공한다. 주로 나이와 같이 category 별로
나눌때 주로 사용하고 Syntex는 아래와 같다.
CASE WHEN <cond1> THEN <v1> WHEN <cond2> THEN <v2> ... [ELSE <vn+1> ] END
각각의 WHEN...THEN 절의 argument 는 255 까지 가능하고 이 Limit를 해결하려면
Oracle 8i Reference를 참조하면 된다.
The maximum number of arguments in a CASE expression is 255, and each
WHEN ... THEN pair counts as two arguments. To avoid exceeding the limit of 128 choices,
you can nest CASE expressions. That is expr1 can itself be a CASE expression.
Case Example : 한 회사의 모든 종업원의 평균 봉급을 계산하는데 봉급이 $2000보다 작은경우
2000으로 계산을 하는 방법이 pl/sql을 대신하여 case function을 사용할 수 있다.
SELECT AVG(CASE when e.sal > 2000 THEN e.sal ELSE 2000 end) FROM emp e;
Case Example : 나이를 column으로 가지고 있는 customer table을 예로 들어보자.
SQL> SELECT
2 SUM(CASE WHEN age BETWEEN 70 AND 79 THEN 1 ELSE 0 END) as "70-79",
3 SUM(CASE WHEN age BETWEEN 80 AND 89 THEN 1 ELSE 0 END) as "80-89",
4 SUM(CASE WHEN age BETWEEN 90 AND 99 THEN 1 ELSE 0 END) as "90-99",
5 SUM(CASE WHEN age > 99 THEN 1 ELSE 0 END) as "100+"
6 FROM customer;
70-79 80-89 90-99 100+
4 2 3 1
1 SELECT
2 (CASE WHEN age BETWEEN 70 AND 79 THEN '70-79'
3 WHEN age BETWEEN 80 and 89 THEN '80-89'
4 WHEN age BETWEEN 90 and 99 THEN '90-99'
5 WHEN age > 99 THEN '100+' END) as age_group,
6 COUNT(*) as age_count
7 FROM customer
8 GROUP BY
9 (CASE WHEN age BETWEEN 70 AND 79 THEN '70-79'
10 WHEN age BETWEEN 80 and 89 THEN '80-89'
11 WHEN age BETWEEN 90 and 99 THEN '90-99'
12* WHEN age > 99 THEN '100+' END)
SQL> /
AGE_G AGE_COUNT
100+ 1
70-79 4
80-89 2
90-99 3
Example
2. Oracle 9i Feature
Oracle 9i부터는 pl/sql에서도 case문을 사용할 수 있으면 이것은
복잡한 if-else 구문을 없애고, C언어의 switch문과 같은 기능을 한다.
아래의 9i pl/sql Sample 및 제약 사항을 보면 아래와 같다.
Sample 1:
A simple example demonstrating the proper syntax for a case
statement
using a character variable as the selector. See the section entitled
'Restrictions' at the end of this article for details on which PLSQL
datatypes may appear as a selector in a case statement or
expression.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
achar char(1) := '&achar';
begin
case achar
when 'A' then dbms_output.put_line('The description was Excellent');
when 'B' then dbms_output.put_line('The description was Very Good');
when 'C' then dbms_output.put_line('The description was Good');
when 'D' then dbms_output.put_line('The description was Fair');
when 'F' then dbms_output.put_line('The description was Poor');
else dbms_output.put_line('The description was No such Grade');
end case;
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 2:
A simple example demonstrating the proper syntax for a case
expression
using a character variable as the selector. See the section entitled
'Restrictions' at the end of this article for details on which PLSQL
datatypes may appear as a selector in a case statement or
expression.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
achar char(1) := '&achar';
description varchar2(20);
begin
description :=
case achar
when 'A' then 'Excellent'
when 'B' then 'Very Good'
when 'C' then 'Good'
when 'D' then 'Fair'
when 'F' then 'Poor'
else 'No such grade'
end;
dbms_output.put_line('The description was ' || description);
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
NOTE: The above simple samples demonstrate two subtle differences in the
syntax
required for case statements and expressions.
1) A case STATEMENT is terminated using the 'end case' keywords; a
case
EXPRESSION is terminated using only the 'end' keyword.
2) Each item in a case STATEMENT consists of one or more
statements, each
terminated by a semicolon. Each item in a case expression
consists of
exactly one expression, not terminated by a semicolon.
Sample 3:
Sample 1 demonstrates a simple case statement in which the selector
is
compared for equality with each item in the case statement body.
PL/SQL
also provides a 'searched' case statement as an alternative; rather
than
providing a selector and a list of values, each item in the body of
the
case statement provides its own predicate. This predicate can be any
valid boolean expression, but only one case will be selected.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
achar char(1) := '&achar';
begin
case
when achar = 'A' then dbms_output.put_line('The description was
Excellent');
when achar = 'B' then dbms_output.put_line('The description was Very
Good');
when achar = 'C' then dbms_output.put_line('The description was
Good');
when achar = 'D' then dbms_output.put_line('The description was
Fair');
when achar = 'F' then dbms_output.put_line('The description was
Poor');
else dbms_output.put_line('The description was No such Grade');
end case;
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 4:
This sample demonstrates the proper syntax for a case expression of
the
type discussed in Sample 3 above.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
achar char(1) := '&achar';
description varchar2(20);
begin
description :=
case
when achar = 'A' then 'Excellent'
when achar = 'B' then 'Very Good'
when achar = 'C' then 'Good'
when achar = 'D' then 'Fair'
when achar = 'F' then 'Poor'
else 'No such grade'
end;
dbms_output.put_line('The description was ' || description);
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 5:
This sample demonstrates the use of nested case statements. It is
also
permissable to nest case expressions within a case statement (though
it
is not demonstrated here), but nesting of case statements within a
case
expression is not possible since statements do not return any value.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
anum1 number := &anum1;
anum2 number := &anum2;
answer number;
begin
case anum1
when 1 then case anum2
when 1 then answer := 10;
when 2 then answer := 20;
when 3 then answer := 30;
else answer := 999;
end case;
when 2 then case anum2
when 1 then answer := 15;
when 2 then answer := 25;
when 3 then answer := 35;
else answer := 777;
end case;
else answer := 555;
end case;
dbms_output.put_line('The answer is ' || answer);
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 6:
This sample demonstrates nesting of case expressions within another
case
expression. Note again the absence of semicolons to terminate both
the
nested case expression and the individual cases of those
expressions.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
anum1 number := &anum1;
anum2 number := &anum2;
answer number;
begin
answer :=
case anum1
when 1 then case anum2
when 1 then 10
when 2 then 20
when 3 then 30
else 999
end
when 2 then case anum2
when 1 then 15
when 2 then 25
when 3 then 35
else 777
end
else 555
end;
dbms_output.put_line('The answer is ' || answer);
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Although PL/SQL anonymous blocks have been used in all of the examples
so far,
case statements and expressions can also be used in procedures,
functions, and
packages with no changes to the syntax.
The following samples are included for completeness and demonstrate the
use of
case statements and/or expressions in each of these scenarios.
Sample 7:
This sample demonstrates use of a case statement in a stored
procedure.
Note that this sample also demonstrates that it is possible for each
of
the items in the case body to consist of more than one statement.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
create or replace procedure testcasestmt ( anum IN number ) is
begin
case
when anum = 1 then dbms_output.put_line('The number was One');
dbms_output.put_line('In case 1');
when anum = 2 then dbms_output.put_line('The number was Two');
dbms_output.put_line('In case 2');
when anum = 3 then dbms_output.put_line('The number was Three');
dbms_output.put_line('In case 3');
when anum = 4 then dbms_output.put_line('The number was Four');
dbms_output.put_line('In case 4');
when anum = 5 then dbms_output.put_line('The number was Five');
dbms_output.put_line('In case 5');
else dbms_output.put_line('The description was Invalid input');
dbms_output.put_line('In the else case');
end case;
end;
exec testcasestmt(&anum);
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 8:
This sample demonstrates the use of a case statement in a stored
package.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
create or replace package testpkg2 is
procedure testcasestmt ( anum IN number );
function testcasestmt_f ( anum IN number ) return number;
end testpkg2;
create or replace package body testpkg2 is
procedure testcasestmt ( anum IN number ) is
begin
case
when anum = 1 then dbms_output.put_line('The number was One');
dbms_output.put_line('In case 1');
when anum = 2 then dbms_output.put_line('The number was Two');
dbms_output.put_line('In case 2');
when anum = 3 then dbms_output.put_line('The number was Three');
dbms_output.put_line('In case 3');
when anum = 4 then dbms_output.put_line('The number was Four');
dbms_output.put_line('In case 4');
when anum = 5 then dbms_output.put_line('The number was Five');
dbms_output.put_line('In case 5');
else dbms_output.put_line('The description was Invalid input');
dbms_output.put_line('In the else case');
end case;
end;
function testcasestmt_f ( anum IN number ) return number is
begin
case
when anum = 1 then dbms_output.put_line('The number was One');
dbms_output.put_line('In case 1');
when anum = 2 then dbms_output.put_line('The number was Two');
dbms_output.put_line('In case 2');
when anum = 3 then dbms_output.put_line('The number was Three');
dbms_output.put_line('In case 3');
when anum = 4 then dbms_output.put_line('The number was Four');
dbms_output.put_line('In case 4');
when anum = 5 then dbms_output.put_line('The number was Five');
dbms_output.put_line('In case 5');
else dbms_output.put_line('The description was Invalid input');
dbms_output.put_line('In the else case');
end case;
return anum;
end;
end testpkg2;
exec testpkg2.testcasestmt(&anum);
variable numout number
exec :numout := testpkg2.testcasestmt_f(&anum);
print numout
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 9:
This sample demonstrates the use of a case expression in a stored
package.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
create or replace package testpkg is
procedure testcase ( anum IN number );
function testcase_f ( anum IN number ) return number;
end testpkg;
create or replace package body testpkg is
procedure testcase ( anum IN number ) is
anumber number := anum;
anothernum number;
begin
anothernum :=
case
when anumber = 1 then anumber + 1
when anumber = 2 then anumber + 2
when anumber = 3 then anumber + 3
when anumber = 4 then anumber + 4
when anumber = 5 then anumber + 5
else 999
end;
dbms_output.put_line('The number was ' || anothernum);
end;
function testcase_f ( anum IN number ) return number is
anumber number := anum;
anothernum number;
begin
anothernum :=
case
when anumber = 1 then anumber + 1
when anumber = 2 then anumber + 2
when anumber = 3 then anumber + 3
when anumber = 4 then anumber + 4
when anumber = 5 then anumber + 5
else 999
end;
dbms_output.put_line('The number was ' || anothernum);
return anothernum;
end;
end testpkg;
variable numout number
exec testpkg.testcase(&anum);
exec :numout := testpkg.testcase_f(&anum);
print numout
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
제약 사항
다음의 databasetype은 case 문에서 지원되지 않는다.
BLOB
BFILE
VARRAY
Nested Table
PL/SQL Record
PL/SQL Version 2 tables (index by tables)
Object type (user-defined type)
All of these types except for object types face a similar restriction
even for if statements (i.e. they cannot be compared for equality directly) so this is unlikely to change for these types. Lack of support for object types is simply an implementation restriction which may be relaxed in future releases.
Reference Ducumment
Oracle 8.1.7 Manual
NOTE:131557.1I have done the following code but doesn't
like the statement of - "case(butNext)". What do you mean "doesn't like" -- did you get an error message?
I'm guessing it won't compile because you're trying to switch on a Button.
I tried something
like "g.fillOval(100,50,70,90, BorderLayout.NORTH)"...no that doesn't make sense. You only use BorderLayout.NORTH when you're adding components to a BorderLayout layout manager. An oval is not a component and fillOval isn't adding a component and Graphics is not a Panel or layout manager.
Would appreciate it if someone could tell me how to position
shapes using the graohic method. I think the problem is that you're confusing shapes with components. -
A function containing switch statement and foreach-object loop
Hello Guys
in my testdomain.lab, i have following five OUs in mt test AD structure:
'OUusers', 'OUcomputers','OUservers','OUadministrators','OUhelpdesks'.
i have created following five variables:
$OUusers = 'ou=OUusers,dc=mytestdomain,dc=lab'
$OUcomputers = 'ou=OUcomputers,dc=mytestdomain,dc=lab'and so on
now i have created a function which gets this names as input &
foreach-object creates the related OU.
but the problem is sometimes when i run my function, maybe some of those five OUs
currently exist in AD so this will cause a
terminating error.
so i know i must use switch statement to define conditions like this:
if $OUusers doesn't exist, execute this : new-ADOrganizationalunit $OUusers
if $OUcomputers doesn't exist, execute this : new-ADOrganizationalunit $OUcomputers
and so on...
it's a long time which i am trying to create a
function which contains such switch statement & properly forEach-object loop.
i have studied switch and foreach-object loops , but this scenario is complicated for me & i was unable to get the correct code.
Function createOUs {
# combination of ForEach-Object and Switch statement here
may someone give me the correct
command please?
thanks a lotLike this:
$CompanyRoot=tha'ou=MyCompany, dc=mytestdomain,dc=lab'
New-ADOrganizationalUnit -Name MyCompany -ErrorAction SilentlyContinue
$ous='Users', 'Computers','Servers','Administrators','Helpdesk'
foreach($ou in $ous){
New-ADOrganizationalUnit -Name $ou -Path $companyroot -ErrorAction SilentlyContinue
¯\_(ツ)_/¯
jrv, That can't be the solution because when you running a command which tries to creates an OU
which already exist in AD, causes a
terminating error which has two caveats:
1- shows red error message on screen
2- stops and doesn't continue to execute next lines of code
Note that -ea silentlycontinue and -ea ignore have no effect on
terminating errors and they cn't hide error messages, also script can't continue.
i examined that.
to get sure, run this function in your test AD & see the result:
function createOUs {
New-ADOrganizationalUnit -Name 'an-existing-ou' -Protected 0 -ea SilentlyContinue # you see that -ea silentlycontinue has no effect here
New-ADOrganizationalUnit -Name '2ndOU' -Protected 0 -ea SilentlyContinue # you see that because the previous error has been a terminating error, command execution has been stopped and this 2nd OU hasn't been creatde
another bad news is ( as i tested), if we query for an Organizational Unit which doesn't exist in AD , it generates a terminating error as well, so again here -ea has no effect.
test this:
PS C:\> Get-ADOrganizationalUnit -identity 'ou=nonesense,dc=yourDomain,dc=lab' -ea ignore
error doesn't disapear ;-) -
Switch Statement - orphaned case
Hello All
Could anyone explain why i get orphaned case when compiling ? ive never seen it before ?
After some searching all i could find was to remove ; from Switch(input);Any ideas ? thankyou
import java.util.*;
public class Menu
public static void main (String[] args)
Scanner kybd = new Scanner (System.in);
System.out.println ("Please Chose from 1-4");
System.out.println("1. Good Morning");
System.out.println("2. Good Afternoon");
System.out.println("3. Good Evening");
System.out.println("4. Exit");
int input = 0;
do
input = kybd.nextInt();
Switch(input);
case 1:System.out.println("Good Morning");
break;
case 2:System.out.println("Good Afternoon");
break;
case 3:System.out.println("Good Evening");
break;
case 4:System.out.println("Exit");
System.exit(4);
break;
while (input !=4);
}}heya all sorry may have been a bit confusing what i said , i did remove the ; but i get ; expected
And
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
at Menu.main(Menu.java:21)
this is shown as orphaned case by a red icon in netbeans.
Could anyone explain what an orphaned case is ?
import java.util.*;
public class Menu
public static void main (String[] args)
Scanner kybd = new Scanner (System.in);
System.out.println ("Please Chose from 1-4");
System.out.println("1. Good Morning");
System.out.println("2. Good Afternoon");
System.out.println("3. Good Evening");
System.out.println("4. Exit");
int input = 0;
do
input = kybd.nextInt();
Switch(input)
case 1:System.out.println("Good Morning");
break;
case 2:System.out.println("Good Afternoon");
break;
case 3:System.out.println("Good Evening");
break;
case 4:System.out.println("Exit");
System.exit(4);
break;
while (input !=4);
}} -
Problems with switch statement
He everyone,
i tried to built a page with 4 buttons. Each button is a symbol that contains 2 png´2 which are the the button Designs. If you click on button 1 it should move on the screen. If you click it again it should moves back. and if you click on another button while button1 is active then button1 should move back to starting position and button 2 should move on screen.
i use a switch statement and a variable.
on composition ready i used
sym.setVariable("current","");
to set the Variable
on each button(one of the png inside the symbols) i used:
var current = sym.getComposition.getStage.getVariable("current");
switch (current)
case "" :
sym.play("in");
break;
case button1 :
sym.play("out");
break;
default :
sym.getComposition.getStage.getSymbol(current).play("out");
sym.play("in");
break;
ad each animation of the buttons are labels for the in and out animation. There are also triggers that change the variable current on the stage
sym.getComposition.getStage.setVariable("current","button1");
if i test it inside of a browser and click on one of the button nothing happens.
i´m not sure what´s my mistake.
can anyone help me?
regards
mr.monsenHi,
Some syntax errors in red:
var current = sym.getComposition().getStage().getVariable("current");
switch (current)
case "" :
sym.play("in");
break;
case "button1" :
sym.play("out");
break;
default :
sym.getComposition().getStage().getSymbol(current).play("out");
sym.play("in");
sym.getComposition().getStage().setVariable("current","button1"); -
I am new to Java and am trying to learn how to use and understand the nuances involved in using the Switch statment.
Yesterday, I received tremendous help, As a result, I am closer to understanding the switch statement and how it works.
My program is designed to use 5 different input boxes. These represent a total for quizzes, homework assignments, 2 midterms, and a final exam.
These are casted to double; then, they are added together and divided by five to obtain an average (the student's GPA). The GPA is then going to assigned a grade depending up the range in the If then statement.
I intend on using a message box to inform the user of the GPA and another followed by another message box to show them their grade.
I would like to incorporate the switch statement (so I can learn how to use it) to show them their grade.
I know the code needs tweaking but this is what I have so far:
import javax.swing.JOptionPane;
public class Switchgrade{
//declaration of class
public static void main(String args[])
//declaration of main
String midone; String midtwo; String quiz; String homework; //declares variables to hold the grades, quiz and homework scores
String last;
double one; //first midterm
double two; //second midterm
double three;double four; double five; //final, quiz and homework scores
double average; //GPA
char a; char b; char c; char d; char f;char grade;
midone = JOptionPane.showInputDialog("Please enter the first midterm"); //first score to add
one = Double.parseDouble(midone);
midtwo = JOptionPane.showInputDialog("please enter second midterm"); //second midterm to add
two = Double.parseDouble(midtwo);
last = JOptionPane.showInputDialog("please enter final exam score");//final exam score to add
three = Double.parseDouble(last);
quiz = JOptionPane.showInputDialog("please enter quiz score");//quiz score to add
four = Double.parseDouble(quiz);
homework= JOptionPane.showInputDialog("please enter homework score");//homework score to add
five = Double.parseDouble(homework);
average = (one + two+ three + four + five)/5; //average of all five scores
if(average >= 90)
grade = 'a';
else
if(average >= 80 )
grade = 'b';
switch (grade)
case a:
JOptionPane.showMessageDialog(null,"The total of all your scores is " + b+"\nYour final grade is an A");
break;
default:
JOptionPane.showMessageDialog(null,"Sorry, you received a grade of " + b + ". \nYou failed.");
break;
System.exit(0);
}//end of main
}//end of class
As you can see, I am only using two grades, just so I can learn to use it. However, when I go to compile this, I get this error message:
constant expression required: case a:, with the ^ under the a.
What does this error message me and how do I fix this.
Thanks in advance for your help.case a:is trying to use a variable with the name "a" for the comparison. This is illegal in java
what you want is
case 'a':this will do a comparison against the char value 'a' -
I have to write a program that uses the switch statement and asks the user to select one of three TV models. The programs provides a description of the models. Use the switch statement, display the model chosen, the description and the price.The user should make a selection by model number: The default is "Your choice is not available!"
I am not 100% sure that I wrote this program correctly with the switch statements and according to the guidelines set forth and would appreciate it if somebody could look it over and see if it looks correct and if not what needs to be addressed. Also, I'm getting an error when I compile (error information at the bottom of the page) and am unsure what needs to be changed to rectify this. Thanks a lot for the guidance.
import java.util.*;
import javax.swing.JOptionPane;
public class javatvmodel { /**
* @param args the command line arguments
static Scanner console = new Scanner (System.in);
public static void main(String[] args) { // Declare and initialize variables
int model = 0;
String modelString;
modelString = JOptionPane.showInputDialog("This program asks the user to enter a television model number." + "\n" +
"The description of the model chosen will be displayed." + "\n" +
"\n" +
"Please enter the model number chosen" +"\n" +
"Model 100 comes with remote control, timer," + "\n" +
"and stereo sound and costs $1000" + "\n" +
"Model 200 comes with all the features of Model 100" + "\n" +
"and picture-in-picture, and costs $1200" + "\n" +
"Model 300 comes with all the features of Model 200 and" + "\n" +
"HDTV, flat screen, 16 x 9 aspect ratio and costs $2400");
switch (model)
case 100:
JOptionPane.showMessageDialog(null,"You chose model 100 with these features:" + "\n" +
"remote control, timer, and stereo sound" + "\n" +
"Your price will be $1000.00", "Television Selection",JOptionPane.INFORMATION_MESSAGE);
break;
case 200:
JOptionPane.showMessageDialog(null,"You chose model 200 TV with these features:" + "\n" +
"remote control, timer, stereo sound, and picture-in-picture" + "\n" +
"Your price will be $1200.00", "Television Selection", JOptionPane.INFORMATION_MESSAGE);
break;
case 300:
JOptionPane.showMessageDialog(null, "You chose model 300 TV with these features:" + "\n" +
"remote control, timer, stereo sound, picture-in-picture, HDTV, flat screen, and 16 x 9 aspect ratio" + "\n" +
"Your price will be $2400.00", "Television Selection", JOptionPane.INFORMATION_MESSAGE);
break;
default:
JOptionPane.showMessageDialog(null,"Your choice is not available!", JOptionPane.INFORMATION_MESSAGE); }
Compiling 1 source file to C:\Users\Ryan\Documents\Java\Lab6_Oct7_Moran\JavaTVmodel\build\classes
C:\Users\Ryan\Documents\Java\Lab6_Oct7_Moran\JavaTVmodel\src\javatvmodel.java:56: cannot find symbol
symbol : method showMessageDialog(<nulltype>,java.lang.String,int)
location: class javax.swing.JOptionPane
JOptionPane.showMessageDialog(null,"Your choice is not available!", JOptionPane.INFORMATION_MESSAGE);
1 error
BUILD FAILED (total time: 1 second)
Edited by: Nightryno on Oct 21, 2008 7:03 PMcome on now...
>
String modelString = "0";
model = Integer.parseInt(modelString);You haven't shown the input dialog yet! Move the parsing to after you've updated modelString.
>
>
modelString = JOptionPane.showInputDialog("This program asks the user to enter a television model number." + "\n" +
"The description of the model chosen will be displayed." + "\n" +
"\n" +
"Please enter the model number chosen" +"\n" +
"Model 100 comes with remote control, timer," + "\n" +
"and stereo sound and costs $1000" + "\n" +
"Model 200 comes with all the features of Model 100" + "\n" +
"and picture-in-picture, and costs $1200" + "\n" +
"Model 300 comes with all the features of Model 200 and" + "\n" +
"HDTV, flat screen, 16 x 9 aspect ratio and costs $2400");
switch (model)
case 100:
JOptionPane.showMessageDialog(null,"You chose model 100 with these features:" + "\n" +
"remote control, timer, and stereo sound" + "\n" +
"Your price will be $1000.00", "Television Selection",JOptionPane.INFORMATION_MESSAGE);
break;
case 200:
JOptionPane.showMessageDialog(null,"You chose model 200 TV with these features:" + "\n" +
"remote control, timer, stereo sound, and picture-in-picture" + "\n" +
"Your price will be $1200.00", "Television Selection", JOptionPane.INFORMATION_MESSAGE);
break;
case 300:
JOptionPane.showMessageDialog(null, "You chose model 300 TV with these features:" + "\n" +
"remote control, timer, stereo sound, picture-in-picture, HDTV, flat screen, and 16 x 9 aspect ratio" + "\n" +
"Your price will be $2400.00", "Television Selection", JOptionPane.INFORMATION_MESSAGE);
break;
default:
JOptionPane.showMessageDialog(null, "Your choice is not available!", "Television Selection", JOptionPane.INFORMATION_MESSAGE); -
HELP A COMPLETE NOOB! Java Switch Statement?
Hi, I am trying to use a simple switch statement and I just cant seem to get it to work?;
import java.util.Scanner;
public class Month {
public static void main(String[] args) {
String message;
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number:");
message = scan.nextLine();
int month = 8;
if (month == 1) {
System.out.println("January");
} else if (month == 2) {
System.out.println("February");
switch (month) {
case 1: System.out.println("January"); break;
case 2: System.out.println("February"); break;
case 3: System.out.println("March"); break;
case 4: System.out.println("April"); break;
case 5: System.out.println("May"); break;
case 6: System.out.println("June"); break;
case 7: System.out.println("July"); break;
case 8: System.out.println("August"); break;
case 9: System.out.println("September"); break;
case 10: System.out.println("October"); break;
case 11: System.out.println("November"); break;
case 12: System.out.println("December"); break;
default: System.out.println("Invalid month.");break;}
Please can anyone help, all I want is to enter a number and the corresponding month to appear. Thank you.This will work.
import java.util.Scanner;
public class Month {
public static void main(String[] args) {
// read user input
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number:");
int month = scan.nextInt();
// print the month
switch (month) {
case 1: System.out.println("January"); break;
case 2: System.out.println("February"); break;
case 3: System.out.println("March"); break;
case 4: System.out.println("April"); break;
case 5: System.out.println("May"); break;
case 6: System.out.println("June"); break;
case 7: System.out.println("July"); break;
case 8: System.out.println("August"); break;
case 9: System.out.println("September"); break;
case 10: System.out.println("October"); break;
case 11: System.out.println("November"); break;
case 12: System.out.println("December"); break;
default: System.out.println("Invalid month.");break;}
} -
Static Methods & Switch Statement
Need help with a switch statement and static methods. My program offers the user a menu to choose what they want to practice.
I want to use a switch statement to process the selection. Selecting 1, 2 or 3 causes the program to go to one of the following static methods:
addition()
subtraction
multiplication()
import javax.swing.JOptionPane; // Needed for JOptionPane
import java.text.DecimalFormat; // Needed for DecimalFormat
public class MathsFinal {
static boolean exit = false;
static int totalAnswersAsked = 0;
public static void main(String[] args)
int userChoice;
int correctAnswers = 0;
do{
//custom button text
do{
boolean exitAsking = true;
String userChoiceString = JOptionPane.showInputDialog (null,
"1. Practice addition\n"
+ "2. Practice subtraction\n"
+ "3. Practice multiplication\n"
+ "4. Quit the program\n"
+ "\n"
+ "Enter your choice",
"Enter your choice",
JOptionPane.QUESTION_MESSAGE);
int userAnswer, genNumOne, genNumTwo;
if(userChoiceString == null || userChoiceString.equals("4") )
{ //closed it
exit = true;
}else if(userChoiceString.equals("1"))
{ //addition
genNumOne = getRandomNumber(9,0);
genNumTwo = getRandomNumber(9,0);
userAnswer = genNumOne + genNumTwo;
correctAnswers += display(genNumOne, genNumTwo, userAnswer, "plus");
}else if(userChoiceString.equals("2"))
{ //subtraction
genNumOne = getRandomNumber(9,0);
genNumTwo = getRandomNumber(genNumOne,0);
userAnswer = genNumOne - genNumTwo;
correctAnswers += display(genNumOne, genNumTwo, userAnswer, "minus");
}else if(userChoiceString.equals("3"))
{ //multiplication
genNumOne = getRandomNumber(9,0);
genNumTwo = getRandomNumber(9,0);
userAnswer = genNumOne * genNumTwo;
correctAnswers += display(genNumOne, genNumTwo, userAnswer, "times");
}else
{ //user didn't enter a number
JOptionPane.showMessageDialog(null,
"Please enter a number between 1 and 4",
"Wrong entry",
JOptionPane.ERROR_MESSAGE);
exitAsking = false;
while(!exit);
while(!exit);
//create a DecimalFormat object for percentages.
DecimalFormat userPercent = new DecimalFormat("#0%");
//show results using information icon
JOptionPane.showMessageDialog(null,
"You got " + (userPercent.format(((double)correctAnswers / (double)totalAnswersAsked))) + " right!!",
"Thank you for playing",
JOptionPane.INFORMATION_MESSAGE);
//ends the program
System.exit(0);
public static int getRandomNumber(int large, int small)
return (int)((large - small) * Math.random()) + small;
public static int display(int genNumOne, int genNumTwo, int userAnswer, String operation)
String selectAddition = JOptionPane.showInputDialog("What is" + " " + genNumOne + " " + operation + " " + genNumTwo + "?");
if(selectAddition == null) { //pressed close
exit = true;
return 0;
else if(userAnswer == Integer.parseInt(selectAddition))
{ //answer correct
totalAnswersAsked++;
//show results using information icon
JOptionPane.showMessageDialog(null,
"Very good!",
"Well done",
JOptionPane.INFORMATION_MESSAGE);
return 1;
else if(userAnswer != Integer.parseInt(selectAddition))
{ // incorrect answer
totalAnswersAsked++;
JOptionPane.showMessageDialog(null,
"Sorry that was incorrect. Better luck next time",
"Bad luck",
JOptionPane.INFORMATION_MESSAGE);
return 0;
return 0;
}hi,
switch statement to process the selection. Selecting 1, 2 or 3
import javax.swing.JOptionPane; // Needed for JOptionPane
import java.text.DecimalFormat; // Needed for DecimalFormat
public class MathsFinal {
static boolean exit = false;
static int totalAnswersAsked = 0;
public static void main(String[] args)
int userChoice;
int correctAnswers = 0;
int userChoiceString=4;
do{
//custom button text
boolean exitAsking = true;
userChoiceString = Integer.parseInt(JOptionPane.showInputDialog (null,
"1. Practice addition\n"
+ "2. Practice subtraction\n"
+ "3. Practice multiplication\n"
+ "4. Quit the program\n"
+ "\n"
+ "Enter your choice",
"Enter your choice",
JOptionPane.QUESTION_MESSAGE));
int userAnswer, genNumOne, genNumTwo;
switch (userChoiceString)
case 1:
genNumOne = getRandomNumber(9,0);
genNumTwo = getRandomNumber(9,0);
userAnswer = genNumOne + genNumTwo;
correctAnswers += display(genNumOne, genNumTwo, userAnswer, "plus");
break;
case 2:
genNumOne = getRandomNumber(9,0);
genNumTwo = getRandomNumber(genNumOne,0);
userAnswer = genNumOne - genNumTwo;
correctAnswers += display(genNumOne, genNumTwo, userAnswer, "minus");
break;
case 3:
genNumOne = getRandomNumber(9,0);
genNumTwo = getRandomNumber(9,0);
userAnswer = genNumOne * genNumTwo;
correctAnswers += display(genNumOne, genNumTwo, userAnswer, "times");
break;
case 4: break;
default :
JOptionPane.showMessageDialog(null,
"Please enter a number between 1 and 4",
"Wrong entry",
JOptionPane.ERROR_MESSAGE);
exitAsking = false;
} while(userChoiceString != 4);
//create a DecimalFormat object for percentages.
DecimalFormat userPercent = new DecimalFormat("#0%");
//show results using information icon
JOptionPane.showMessageDialog(null,
"You got " + (userPercent.format(((double)correctAnswers / (double)totalAnswersAsked))) + " right!!",
"Thank you for playing",
JOptionPane.INFORMATION_MESSAGE);
//ends the program
System.exit(0);
public static int getRandomNumber(int large, int small)
return (int)((large - small) * Math.random()) + small;
public static int display(int genNumOne, int genNumTwo, int userAnswer, String operation)
String selectAddition = JOptionPane.showInputDialog("What is" + " " + genNumOne + " " + operation + " " + genNumTwo + "?");
if(selectAddition == null) { //pressed close
exit = true;
return 0;
else if(userAnswer == Integer.parseInt(selectAddition))
{ //answer correct
totalAnswersAsked++;
//show results using information icon
JOptionPane.showMessageDialog(null,
"Very good!",
"Well done",
JOptionPane.INFORMATION_MESSAGE);
return 1;
else if(userAnswer != Integer.parseInt(selectAddition))
{ // incorrect answer
totalAnswersAsked++;
JOptionPane.showMessageDialog(null,
"Sorry that was incorrect. Better luck next time",
"Bad luck",
JOptionPane.INFORMATION_MESSAGE);
return 0;
return 0; -
Continue in a switch statement
What is the difference between using unlabelled continue and break in a switch statement?
Looks like there is the same effect but I didn't found anything about using continue in switch in any documentation.
Here's a typical explanation of using switch statement:
"If the condition in a +switch statement+ matches a case constant, execution will run through all code in the +switch+ following the matching case statement until a +break statement+ or the end of the +switch statement+ is
encountered. In other words, the matching case is just the entry point into the case block, but *unless there's a break statement*, the matching case is not the only case code that runs"
Is it a good practise to use continue instead of break in such case?Books are right again :))
Thanks everybody who wrote here.
As I found out continue is only for use in the loop statements. I just use continue inside both for and switch statements and that's why I thought that it's appropriate to use it inside switch. No way!! In this way continue will affect only loop, not switch statement.
For example:
class BreakTest {
public static void main(String[] args) {
BreakTest br = new BreakTest();
br.testContinue();
br.testBreak();
public void testContinue() {
int[] int_arr = { 0, 0, 0, 0, 1, 0, 0 };
int count_in_switch = 0;
int count_in_for = 0;
for (int a : int_arr) {
switch (a) {
case 0:
continue;
default:
count_in_switch++;
count_in_for++;
System.out.println("count_in_switch=" + count_in_switch
+ " count_in_for=" + count_in_for);
public void testBreak() {
int[] int_arr = { 0, 0, 0, 0, 1, 0, 0 };
int count_in_switch = 0, count_in_for = 0;
for (int a : int_arr) {
switch (a) {
case 0:
break;
default:
count_in_switch++;
count_in_for++;
System.out.println("count_in_switch=" + count_in_switch
+ " count_in_for=" + count_in_for);
count_in_switch=1 count_in_for=*1*
count_in_switch=1 count_in_for=*7*
In case of using continue you won't get to count_in_for++; - you'll jump to the next iteration of for loop.
In case of using break you'll go out of switch and go to next statement, that goes after switch block -
i am trying to use switch statement for drawing different shapes by clicking shapes buttons (eg line ,rectangle oval etc) . i have got a method called setDrawMode and i am passing shape value as parameter to this method but nothing happen .all it is doing is drawing with default value.
my code for clicking button:
String s = event.getActionCommand();
if (s.equalsIgnoreCase("LINE"))
{ mycanvas.setDrawMode(0);}
else if (s.equalsIgnoreCase("RECTANGLE"))
{ mycanvas.setDrawMode(1);}
else if (s.equalsIgnoreCase("OVAL"))
{ mycanvas.setDrawMode(2);}my setDrawMode method:
public void setDrawMode(int mode)
switch (mode)
case LINE :
case RECTANGLE:
case OVAL:
this.mode = mode;
break; default:
throw new IllegalArgumentException();
}my code for paint method:
public void paintComponent(Graphics g)
super.paintComponent(g);
if (numPoints>0)
for (int i=0; i<numPoints-1; i+=2)
switch (mode)
case LINE:
g.drawLine(p.x,p[i].y,p[i+1].x,p[i+1].y);
g.drawLine(p[numPoints-1].x,p[numPoints-1].y,cx,cy);
break;
case RECTANGLE:
g.drawRect(p[i].x,p[i].y,p[i+1].x,p[i+1].y);
g.drawRect(p[numPoints-1].x,p[numPoints-1].y,cx,cy);
break;
case OVAL:g.drawOval(p[i].x,p[i].y,p[i+1].x,p[i+1].y);
g.drawOval(p[numPoints-1].x,p[numPoints-1].y,cx,cy);
break;
values for shapes
int LINE = 0
int RECTANGLE = 1
int OVAL = 2
please help
khurramwhat is the point of this switch here?
public void setDrawMode(int mode)
switch (mode)
case LINE :
case RECTANGLE:
case OVAL:
this.mode = mode;
break;
default: throw new IllegalArgumentException();
} This dosn't do anything but asign mode to the global mode, which is why you get the same value every time. You need to do something in the switch and you don't have a break between them so they would all execute anyway. You can try this.
public void setDrawMode(int mode)
switch (mode)
case LINE : this.mode = 0;
break;
case RECTANGLE: this.mode = 1;
break;
case OVAL: this.mode = 2;
break;
default: throw new IllegalArgumentException();
}But if your just trying to set a global mode you could just ommit the switch because its redundant
public void setDrawMode(int mode)
this.mode = mode;
// then you could call paint however you call it
paintComponent(this.getGraphics);
} -
How do I use switch and case statements to fill more than one other field?
Hi all,
I'm new to the community.
I'm trying to make an existing form more user friendly for my coworkers. I want to use a switch and case approach in a drop-down list field so that the selection fills two seperate other fields with different info related to the selection.
I can already do this with one field, but if I add a second target field under an existing case the text doesn't appear there when I make the selection from the dropdown.
Basically, I'm asking if I can do this:
switch
(sNewSel){
case "1": // Selection 1 Row2.Field1
= "text for field 1";
Row1.Field2 = "text for field 2";
break;
etc.
It works if the "row1.field2" option isn't there, but not when it is present.
Any takers?I'm not sure if I will be able to send you the form. There may be too much to redact.
Would this last bit of code in the cell affect anything?
if
(bEnableTextField)
{Row2.Field1.access
= "open"; // enable field
Row2.Field1.caption.font.fill.color.value= "0,0,0"; // set caption to black
That is, do I also need to repeat the same thing for the second target cell (Row1.Field2)?
What would be possible hang ups that would prevent it from working correctly?
Dave
By the way, I'm not sure if my other attachment posted. I am trying again. -
Multiple rawValues and switch statements - can you do this?
Hi, a simple question (i hope)
first i have to use javascript for his one....
Im just starting a form and it will have about a dozen dropdown lists (over about 15 pages), each with quite a few variables (i feel a headache coming on already...)
and what i would like to be able to do is have text fields at the end of the form (hidden) and insert data into them depending on what combination of choices the user has made in some or all of the dropdown lists.
I know how to get a standard switch statement to work fine but can you (and if so what is the syntax like) do this with multiple lists - and what event would be best to link it to - calculate perhaps?
the switch would be using stored variables and user entered data to produce composite output to the text field (so case: listA.rawvalue = 1 and listB.rawvalue = nine, and listC.rawvalue = cat etc etc [then] this.rawvalue = v1.value + listB.rawvalue etc.....
I'm sure you get the issue im struggling with - I've tried it a few ways but my syntax must be off somewhere
can anyone assist with the syntax for this kind of thing --or a sample would be fantastic.
cheersHey Legallogic!
I'm not 100% certain I understand what you are struggling with but I'd be happy to help. If you could provide an alternate explanation of your issue I'll take a look and help you solve it. What I *think* you're asking about is in reference to the test case of a switch statement. Typically a switch would be used to test the value of one particular variable, so:
switch (varTest)
case "A":
//Do something here
break;
case "B":
//Do something else here
break;
default:
//Do something cool here instead
break;
Are you asking how to use a single switch to test the value of multiple variables (or fields)? If so, my recommendation would be to simply use and if/else if/else block as you can craft your test cases however you'd like for those.
Like I said, I may not have understood the issue here so feel free to shoot me an email and I'll take a peek!
Josh Boyle
Cardinal Solutions Group
[email protected] -
Use of boolean variables in BPEL switch statements
I have a workflow with a single boolean input parameter:
<element name="input" type="boolean"/>
I wish to use a switch statement within the workflow, based on the value of that boolean parameter.
When I use the following XPath expression:
bpws:getVariableData("input","payload","/tns:BooleanRequest/tns:input")
I get the correct functionality, although I get the following BPEL compiler warning:
" [bpelc] [Warning ORABPEL-10078]: return value of this expression may not be a boolean
[bpelc] [Description]: in line 35 of "C:\eclipse\workspace\Boolean\Boolean.bpel", xpath expression "bpws:getVariableData("input","payload","/tns:BooleanRequest/tns:input")" used in <switch> may not return boolean type value, the xpath engine would automatically try to convert the return value to boolean..
[bpelc] [Potential fix]: Please use one of the built-in boolean functions from xpath http://www.w3.org/TR/xpath#section-Boolean-Functions to convert the return value to boolean.."
However, the boolean functions referenced do not appear to be relevant to a variable which is already of a boolean type. If I attempt to use the boolean() function in my XPath expression, I get rid of the compiler error, but the workflow now does not work as required.
How can I get rid of the compiler warning and still get the required functionality, and/or am I doing the wrong thing?
I am currently running on JBoss, with BPEL release 2.1.2 [build #1226].
Thanks for any help or ideas.Hi Marlon,
Thanks for that - I guess we have to accept the vagaries of XPath and the absence of type-checking for variables.
I hadn't fully understood until I started investigating that I can assign ANY string to variable of type xsd:boolean, which has been the cause of some of the confusion for me - whether that value is then considered true or false depends on how you write your test condition.
I tried with your condition, and it didn't seem to work (evaluated to true if the variable data was the string "true()", but otherwise it seemed to always evaluate to false.
I also tried the following:
condition="bpws:getVariableData('booleanVariable')=true()"
but that evaluates to true for any string of length > 0.
The only one I can get to consistently work is:
condition="bpws:getVariableData('booleanVariable')=string(true())"
although that means that variable data of "TRUE" will evaluate to false (may well be the correct behaviour, depending on how you're setting the boolean variable in the first place). -
Keyboard Input and switch statement error
Hi,
Below is a program to read an alphabet and check whether its a vowel/consonent using switch statement.
Its always executin' the default stmt and not going into the case 1. This is because the ascii value of the character is being stored rather than the character.Could you please rectify this program?
Thanks,
vs
import java.io.*;
class vowel
public static void main(String args[])throws Exception
System.out.println("Enter a character:");
char ch=(char)System.in.read();
switch(ch)
case 1: if(ch=='a')//||ch=='e'||ch=='i'||ch=='o'||ch=='u')
System.out.println("The character is a vowel-a");
break;
default: System.out.println("The character is a consonent ! ");ch = Character.toLowerCase(ch);
switch (ch) {
case 'a' :
case 'e' :
case 'i' :
case 'o' :
case 'u' :
System.out.println("The character is a vowel: " + ch);
break;
default :
System.out.println("The character is a consonent ! ");
}
Maybe you are looking for
-
Hi: I'm doing a site redesign and am moving content from old pages to new pages. All the pages are based on a template. I'm having to remove some formatting from the content, such as classes that have now changed, and then I paste the content into a
-
I'm getting an error message, even though there's no script!
This is so aggravating. I'm getting the following error message everytime I test my movie: **Error** Symbol=itemHolder_mc, layer=layer6, frame=1:Line 1: Statement must appear within on/onClipEvent handler z Total ActionScript Errors: 1 Reported Error
-
Free open-source WIG (Wireless Internet Gateway)
Hello guys I'm ttrying to develop a system that anables communication between the cell phone and the web server via sms (sms platform). Don't you guys know of any free open-source WIG gateway that is readily available for downloads? Also, is there an
-
the only part of the box showing is the red/yellow dots that are lit-green dot is not lit
-
Weird things happening with volume
When I have my headphones in and I'm listening to music the volume keeps turning itself up to its max, I then really struggle to turn it down using the volume buttons on the side of the phone, its like I am fighting it as it keeps trying to increase