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);
}}
Similar Messages
-
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) -
Default case not working in a switch statement
I get a run-time error when i input other flavor than the three listed in the code.
Any comments and suggestions are welcomed.
import java.util.Scanner;
public class EnumSwitchDemo
enum Flavor {VANILLA, CHOCOLATE, STRAWBERRY};
public static void main(String[] args)
Flavor favorite = null;
Scanner keyboard = new Scanner(System.in);
System.out.println("What is your favorite flavor? ");
String answer = keyboard.next();
answer = answer.toUpperCase();
favorite = Flavor.valueOf(answer);
switch(favorite)
case VANILLA:
System.out.println("Classic");
break;
case CHOCOLATE:
System.out.println("Rich");
break;
case STRAWBERRY:
System.out.println("Tasty");
break;
default:
System.out.println("Sorry, Flavor unavailable");
break;
}Yes, the static valueOf method of an Enum type throws an IllegalArgumentException, if the name is not defined, I think. So the problem is not the switch statement.
Btw, normally you don't need switch statements with enums, since you can define methods in enums.
-Puce -
"default" mixed between "case" in switch-statement
I was surprised to see some working code today like the following :
switch (i) {
default:
return false;
case 1:
return true;
case 2:
return false;
Does somebody know if it has always been the case that a default-switch is allowed anywhere within the switch-statement without disturbing the correct use of the code (i.e. reacting correctly on values 1 or 2) ?
Or has this been changed at one point in the Java implementation (i.a.w. can I expect different behaviour on different implementations/versions of the JVM) ?
regards,
MichielI ripped the following from the Java Language Specification.
SwitchStatement:
switch ( Expression ) SwitchBlock
SwitchBlock:
{ SwitchBlockStatementGroupsopt SwitchLabelsopt }
SwitchBlockStatementGroups:
SwitchBlockStatementGroup
SwitchBlockStatementGroups SwitchBlockStatementGroup
SwitchBlockStatementGroup:
SwitchLabels BlockStatements
SwitchLabels:
SwitchLabel
SwitchLabels SwitchLabel
SwitchLabel:
case ConstantExpression :
default :As you can see, one or more 'SwitchLabels' can be associated with a 'BlockStatement'. A switchlabel can either be 'defaul' or a 'case ConstantExpression'. There is no restriction of any order of those labels imposed on those SwitchBlockStatementGroups. The paragraph following this syntax list does impose a restriction upon the 'default' label, i.e. it is allowed at most once in a switch statement.
kind regards -
Alrighty, so I have to do this assignment for my Java course, using a switch statement. The assignment is to have the user enter a number (1-5), and have the corresponding line of a poem be displayed. So if the user entered 1, "One two, buckle your shoe" would be displayed. This is what I have and it's giving me a huge problem:
import java.util.Scanner;
public class Poem
public static void main(String[] args);
Scanner kboard = new Scanner(System.in);
System.out.println("Enter a number 1-5 (or 0 to quit).");
int n = kboard.nextLine();
switch (n);
case 1: System.out.println("One two, buckle your shoe.");
break;
case 2: System.out.println("Three four, shut the door.");
break;
case 3: System.out.println("Five six, pick up sticks.");
break;
case 4: System.out.println("Seven eight, lay them straight.");
break;
case 5: System.out.println("Nine ten, a big fat hen.");
break;
default: System.out.println("Goodbye.");
break;
}This is giving me a HUGE string of errors. (Something like 45). I'm wracking my brain here trying to figure this out. Any help is greatly appreciated. Thanks!Well that solved a lot of the errors. Now all I get is this:
--------------------Configuration: <Default>--------------------
C:\JavaPrograms\Poem.java:8: <identifier> expected
System.out.println("Enter a number 1-5 (or 0 to quit).");
^
C:\JavaPrograms\Poem.java:8: illegal start of type
System.out.println("Enter a number 1-5 (or 0 to quit).");
^
C:\JavaPrograms\Poem.java:12: illegal start of type
switch (n) {
^
C:\JavaPrograms\Poem.java:12: <identifier> expected
switch (n) {
^
C:\JavaPrograms\Poem.java:14: orphaned case
case 1: System.out.println("One two, buckle your shoe.");
^
C:\JavaPrograms\Poem.java:30: class, interface, or enum expected
} -
Can someone explain to me what an orphaned case is in a switch statement. I am not quite sure and I am having a bit of a problem in one of my applications. Thanks!!
Show the code, please.
The keyword "case" only has semantic meaning inside a switch statement. You may have accidently closed your switch statement with a misplaced "}". Delete and retype all of your "}" characters and watch EMACS correspond "}"s with "{"s. -
Compiler error when useing switch statements in an inner class
I have defined several constants in a class and want to use this constans also in an inner class.
All the constants are defined as private static final int.
All works fine except when useing the switch statement in the inner class. I get the compiler error ""constant expression required". If I change the definition from private static final to protected static final it works, but why?
What's the difference?
Look at an example:
public class Switchtest
private static final int AA = 0;
protected static final int BB = 1;
private static int i = 0;
public Switchtest()
i = 0; // <- OK
switch(i)
case AA: break; //<- OK, funny no problem
case BB: break; //<- OK
default: break;
private class InnerClass
public InnerClass()
i = 0; // <- OK: is accessible
if (AA == i) // <- OK: AA is seen by the inner class; i is also accessible
i = AA + 1;
switch(i)
case AA: break; // <- STRANGE?! Fail: Constant expression required
case BB: break; // <- OK
default: break;
}Thank's a lot for an explanation.Just a though:
Maybe some subclass of Switchtest could decalare its own variable AA that is not final, but it can not declare its own BB because it is visible from the superclass. Therefore the compiler can not know for sure that AA is final. -
Enum class not supported for switch() statement in 12.4 beta?
Hi fellow 12.4 beta testers,
It would appear "enum class" isn't supported for switch() statements in the 12.4 beta. This compiles fine under clang and g++. Will this be fixed for the final release? This currently causes compile errors for us, since __cplusplus >= 201103L evaluates to true, so our code uses "enum class" instead of plain "enum". It looks like the C++11 standard says it should be supported:
Switching on enum class in C++ 0x - Stack Overflow
Many thanks,
Jonathan.
$ cat test.cpp
#include <iostream>
enum class Ternary { KnownFalse = 0, KnownTrue = 1, Unknown = 2 };
int main( void )
Ternary foo;
switch ( foo ) {
case Ternary::KnownTrue:
case Ternary::KnownFalse:
case Ternary::Unknown:
std::cout << "Success\n";
$ clang++ -std=c++11 test.cpp
$ g++ -std=c++11 test.cpp
$ /opt/SolarisStudio12.4-beta_mar14-solaris-x86/bin/CC -std=c++11 test.cpp
"test.cpp", line 8: Error: Cannot use Ternary to initialize integral type.
"test.cpp", line 8: Error: Switch selection expression must be of an integral type.
"test.cpp", line 9: Error: An integer constant expression is required for a case label.
"test.cpp", line 10: Error: An integer constant expression is required for a case label.
"test.cpp", line 11: Error: An integer constant expression is required for a case label.
5 Error(s) detected.Thanks for reporting this problem! I have filed bug 18499900.
BTW, according to the C++11 standard, the code is actually not valid. Section 6.4.2, switch statement, says an implicit conversion to an integral type is required, which is not the case for for a scoped enum (one using the "class enum" syntax). This limitation was raised in the C++ Committee as an issue to be fixed, and the C++14 standard makes the code valid.
As a workaround, or to make the code conform to C++11, you can add casts to int for the enum variable and the enumerators.
Message was edited by: Steve_Clamage -
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 am new to Java and am trying to learn how to use and understand the nuances involved in using the Switch statment.
I am trying to write an application that will calculate grades for a student. I can use the If Then Else Control structure for this (which runs) but I would like to incorporate the Switch Statement in place of the multiple if then else structure. Here is the code that I have for the application:
import javax.swing.JOptionPane;
public class Switchgrades
public static void main(String args[])
String midone; String midtwo; String quiz; String homework;
String last;
double one; //first midterm
double two; //second midterm
double three;double four; double five; //final, quiz and homework scores
double average; //GPA
int a; int b; double c; double d; double f;int 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
switch (grade)
case a: //this is where I become confused and lost. I don't what I need to do to make it run.
{if(average >= 90)
b = Integer.parseInt(average);
JOptionPane.showMessageDialog(null,"The total of all your scores is " + b+"\nYour final grade is an A");}
/ I am just using one choice to make it run. When I can make it run, I plan on incorporating the other grades.
break;
<=====================================================================>
<=====================================================================>
//else --->this is part of the if that works in another program
// if(average >= 80 )
// JOptionPane.showMessageDialog(null,"The total of all your scores is " + average +"\nYour final grade is a B");
//else
//if(average >= 70 )
// JOptionPane.showMessageDialog(null,"The total of all your scores is " + average +"\nYour final grade is a C");
//else
//if(average >= 60 )
// JOptionPane.showMessageDialog(null,"The total of all your scores is " + average +"\nYour final grade is a D");
//else
//if(average <= 60 )
<=====================================================================>
<=====================================================================>
default:
JOptionPane.showMessageDialog(null,"Sorry, you received a grade of " + average + ". \nYou failed.");
System.exit(0);
As you can see, I already have all the if then else statements set up--between the <==>. The program runs with the If's but I can two error messages when I incorporate the Switch statement.
1) constant expression required.
I have case a and i guess it is not a constant. Again, I don't understand switch well enough to figure what I need to do to correct it.
2)"b = Integer.parseInt(average);" - cannot resolve the symbol--whatever that means. I have a "^" pointing at the period between Integer and parseInt.
Can anyone help explain what I have to do to make this program work using Switch.
I have not used Switch before and don't understand what I can use as opposed to what I must use for it to work.
Thanks for your help.I don't really know how you want your program going, but here is what I think.
1) From the start of the switch statement, where do you assign the value for "grade"? If you write the switch statement like below, you meant something like, if(grade == 'a'){...}, right!? Then, where did you get the "grade" from?
switch (grade)
case a:
You may want declare variable "grade" as char and place if sentence like this before the switch.
if(average >= 90)
grade = 'a';
else if(average >= 70)
grade = 'b';
switch (grade)
case a:
System.out.print("Your grade: A");
break;
case b:
System.out.print("Your grade: A");
break;
Is that What you want???
2)The method, Integer.parseInt(), takes String as parameter? Did you override this method? The variable "average" was declare as double, so why don't you just cast it to int?? -
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. -
Using a Switch statement for Infix to Prefix Expressions
I am stuck on the numeric and operator portion of the switch statement...I have the problem also figured out in an if/else if statement and it works fine, but the requirements were for the following algorithm:
while not end of expression
switch next token of expression
case space:
case left parenthesis:
skip it
case numeric:
push the string onto the stack of operands
case operator:
push the operator onto the stack of operators
case right parenthesis:
pop two operands from operand stack
pop one operator from operator stack
form a string onto operand stack
push the string onto operand stack
pop the final result off the operand stack
I know that typically case/switch statement's can only be done via char and int's. As I said I am stuck and hoping to get some pointers. This is for a homework assignment but I am really hoping for a few pointers. I am using a linked stack class as that was also the requirements. Here is the code that I have:
import java.io.*;
import java.util.*;
import java.lang.*;
/*--------------------------- PUBLIC CLASS INFIXTOPREFIX --------------------------------------*/
/*-------------------------- INFIX TO PREFIX EXPRESSIONS --------------------------------------*/
public class infixToPrefix {
private static LinkedStack operators = new LinkedStack();
private static LinkedStack operands = new LinkedStack();
// Class variable for keyboard input
private static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
// Repeatedly reads in infix expressions and evaluates them
public static void main(String[] args) throws IOException {
// variables
String expression, response = "y";
// obtain input of infix expression from user
while (response.charAt(0) == 'y') {
System.out.println("Enter a parenthesized infix expression."); // prompt the user
System.out.println("Example: ( ( 13 + 2 ) * ( 10 + ( 8 / 3 ) ) )");
System.out.print("Or as: ((13+2)*(10+(8/3))): ");
expression = stdin.readLine(); // read input from the user
// output prefix expression and ask user if they would like to continue
System.out.println("The Prefix expression is: " + prefix(expression)); // output expression
System.out.println("Evaluate another? y or n: "); // check with user for anymore expressions
response = stdin.readLine(); // read input from user
if (response.charAt(0) == 'n') { // is user chooses n, output the statement
System.out.println("Thank you and have a great day!");
} // end if statement
} // end while statement
} // end method main
/*------------- CONVERSION OF AN INFIX EXPRESSION TO A PREFIX EXPRESSION ------------*/
/*--------------------------- USING A SWITCH STATEMENT ------------------------------*/
private static String prefix(String expression) {
// variables
String symbol, operandA, operandB, operator, stringA, outcome;
// initialize tokenizer
StringTokenizer tokenizer = new StringTokenizer(expression, " +-*/() ", true);
while (tokenizer.hasMoreTokens()) {
symbol = tokenizer.nextToken(); // initialize symbol
switch (expression) {
case ' ':
break; // accounting for spaces
case '(':
break; // skipping the left parenthesis
case (Character.isDigit(symbol.charAt(0))): // case numeric
operands.push(symbol); // push the string onto the stack of operands
break;
case (!symbol.equals(" ") && !symbol.equals("(")): // case operator
operators.push(symbol); // push the operator onto the stack of operators
break;
case ')':
operandA = (String)operands.pop(); // pop off first operand
operandB = (String)operands.pop(); // pop off second operand
operator = (String)operators.pop(); // pop off operator
stringA = operator + " " + operandB + " " + operandA; // form the new string
operands.push(stringA);
break;
} // end switch statement
} // end while statement
outcome = (String)operands.pop(); // pop off the outcome
return outcome; // return outcome
} // end method prefix
} // end class infixToPrefixAny help would be greatly appreciated!so, i did what flounder suggested:
char e = expression.charAt(0);
while (tokenizer.hasMoreTokens()) {
symbol = tokenizer.nextToken(); // initialize symbol
switch (e) {
case ' ':
break; // accounting for spaces
case '(':
break; // skipping the left parenthesis
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
operands.push(symbol); // push the string onto the stack of operands
break; // case numeric
case '+':
case '-':
case '*':
case '/':
operators.push(symbol); // push the operator onto the stack of operators
break; // case operator
case ')':
operandA = (String)operands.pop(); // pop off first operand
operandB = (String)operands.pop(); // pop off second operand
operator = (String)operators.pop(); // pop off operator
stringA = operator + " " + operandB + " " + operandA; // form the new string
operands.push(stringA);
break;
default:
} // end switch statement
} // end while statement
outcome = (String)operands.pop(); // pop off the outcome
return outcome; // return outcomeafter this, I am able to compile the code free of errors and I am able to enter the infix expression, however, the moment enter is hit it provides the following errors:
Exception in thread "main" java.lang.NullPointerException
at LinkedStack$Node.access$100(LinkedStack.java:11)
at LinkedStack.pop(LinkedStack.java:44)
at infixToPrefix.prefix(infixToPrefix.java:119)
at infixToPrefix.main(infixToPrefix.java:59)
Any ideas as to why? I am still looking through seeing if I can't figure it out, but any suggestions? Here is the linked stack code:
public class LinkedStack {
/*--------------- LINKED LIST NODE ---------------*/
private class Node {
private Object data;
private Node previous;
} // end class node
/*-------------- VARIABLES --------------*/
private Node top;
/*-- Push Method: pushes object onto LinkedStack --*/
public void push(Object data) {
Node newTop = new Node();
newTop.data = data;
newTop.previous = top;
top = newTop;
} // end function push
/*--- Pop Method: pop obejct off of LinkedStack ---*/
public Object pop() {
Object data = top.data;
top = top.previous;
return data;
} // end function pop
} // end class linked stackEdited by: drmsndrgns on Mar 12, 2008 8:10 AM
Edited by: drmsndrgns on Mar 12, 2008 8:14 AM
Edited by: drmsndrgns on Mar 12, 2008 8:26 AM -
Methods & Switch Statement in java.. HELP!!
hi all...
i am having a slight problem as i am constructing a method --> menu() which handles displaying
menu options on the screen, prompting the user to select A, B, C, D, S or Q... and then returns the user
input to the main method!!!
i am having issues with switch statement which processes the return from menu() methd,,,
could you please help?!!
here is my code...
import java.text.*;
import java.io.*;
public class StudentDriver
public static void main(String[] args) throws IOException
for(;;)
/* Switch statement for menu manipulation */
switch(menu())
case A: System.out.println("You have selected option A");
break;
case B: System.out.println("You have selected option B");
break;
case C: System.out.println("You have selected option C");
break;
case D: System.out.println("You have selected option D");
break;
case S: System.out.println("You have selected option S");
break;
case Q: System.out.println("\n\n\n\n\n\n\t\t Thank you for using our system..." +
"\n\n\t\t\t Good Bye \n\n\n\n");
exit(0);
static char menu()
char option;
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n\n");
System.out.println("\n\t\t_________________________");
System.out.println("\t\t| |");
System.out.println("\t\t| Student Manager Menu |");
System.out.println("\t\t|_______________________|");
System.out.println("\n\t________________________________________");
System.out.println("\t| \t\t\t\t\t|");
System.out.println("\t| Add new student\t\t A \t|");
System.out.println("\t| Add credits\t\t\t B \t|");
System.out.println("\t| Display one record\t\t C \t|");
System.out.println("\t| Show the average credits\t D \t|");
System.out.println("\t| \t\t\t\t\t|");
System.out.println("\t| Save the changes\t\t S \t|");
System.out.println("\t| Quit\t\t\t\t Q \t|");
System.out.println("\t|_______________________________________|\n");
System.out.print("\t Your Choice: ");
option = stdin.readLine();
return option;
}Thanking your help in advance...
yours...
khalidHi,
There are few changes which u need to make for making ur code work.
1) In main method, in switch case change case A: to case 'A':
Characters should be represented in single quotes.
2) in case 'Q' change exit(0) to System.exit(0);
3) The method static char menu() { should be changed to static char menu() throws IOException {
4) Change option = stdin.readLine(); to
option = (char)stdin.read();
Then compile and run ur code. This will work.
Or else just copy the below code
import java.text.*;
import java.io.*;
public class StudentDriver{
public static void main(String[] args) throws IOException {
for(;;) {
/* Switch statement for menu manipulation */
switch(menu()) {
case 'A': System.out.println("You have selected option A");
break;
case 'B': System.out.println("You have selected option B");
break;
case 'C': System.out.println("You have selected option C");
break;
case 'D': System.out.println("You have selected option D");
break;
case 'S': System.out.println("You have selected option S");
break;
case 'Q':
System.out.println("\n\n\n\n\n\n\t\t Thank you for using our system..." +
"\n\n\t\t\t Good Bye \n\n\n\n");
System.exit(0);
static char menu() throws IOException {
char option;
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n\n");
System.out.println("\n\t\t_________________________");
System.out.println("\t\t| |");
System.out.println("\t\t| Student Manager Menu |");
System.out.println("\t\t|_______________________|");
System.out.println("\n\t________________________________________");
System.out.println("\t| \t\t\t\t\t|");
System.out.println("\t| Add new student\t\t A \t|");
System.out.println("\t| Add credits\t\t\t B \t|");
System.out.println("\t| Display one record\t\t C \t|");
System.out.println("\t| Show the average credits\t D \t|");
System.out.println("\t| \t\t\t\t\t|");
System.out.println("\t| Save the changes\t\t S \t|");
System.out.println("\t| Quit\t\t\t\t Q \t|");
System.out.println("\t|_______________________________________|\n");
System.out.print("\t Your Choice: ");
option = (char)stdin.read();
return option;
regards
Karthik -
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 ! ");
} -
Switch statement for AS3 - Flash CS3
Hey guys, I currently have a code of a switch statement for as1- as2.
This is it:
switch (int(Math.random() * 20))
case 0:
hint = "The total amount of confusion in this world remains constant. It just gets shifted around.";
break;
case 1:
hint = "If you experience poor performance, adjust the quality settings in your preference menu option.";
break;
case 2:
hint = "Anticipation of death is better than death itself.";
break;
case 3:
hint = "At the core of all well-founded belief lies belief that is unfounded.";
break;
case 4:
hint = "The problem with instant gratification is that it takes too long.";
break;
case 5:
hint = "Never let your schooling interfere with your education.";
break;
case 6:
hint = "Beware of geeks bearing gifs.";
break;
case 7:
hint = "Collaboration is essential: It allows you to blame someone else.";
break;
case 8:
hint = "Read my MIPs - no new VAXes.";
break;
case 9:
hint = "Where is the sea, said the fish, as they swam through it.";
break;
case 10:
hint = "You can safely blame any bugs on Aoedipus, who is too busy grinding battlegrounds to do QA on her own work.";
break;
case 11:
hint = "Anything worth doing is worth overdoing.";
break;
case 12:
hint = "There is more to life than increasing its speed.";
break;
case 13:
hint = "Don\'t worry, this will take about as long as the time it takes to play a 2v2 match with 4 ret pallies.";
break;
case 14:
hint = "There is nothing worse than the brilliant image of a fuzzy concept.";
break;
case 15:
hint = "If you are not part of the solution, you are part of the precipitate.";
break;
case 16:
hint = "Two wrongs don\'t make a right, but three lefts do.";
break;
case 17:
hint = "The heresy of today is the logic of tomorrow.";
break;
case 18:
hint = "It\'s not that life is so short, it\'s just that you\'re dead a really long time.";
break;
case 19:
hint = "Those who love sausage, the law, and holy canon should never watch any of them being made.";
break;
case 20:
hint = "What if there were no hypothetical questions?";
break;
} // End of switch
hint = "HINT: " + hint;
This code is for a dynamic tet with the var 'hint' (No ' ' )
But in as3 there is no var and I am having trouble converting it to AS3 coding, can someone show me the correct conversion of the code to make it work with AS3. I will make the instance name 'hint'.
Thank you ahead of time.In addition to what other guys said, if you still want to use switch it should be:
switch (Math.round(Math.random() * 20)) - this will cover all the possible integers.
Nevertheless, I believe using switch in this case is not as efficient and scalable as using, say, array.
1. array index access is faster than switch.
2. if you need to make additions, you will need to make additions in switch while with array you just need to add/subtract member
3. if you will need to switch to a more dynamic model (say, getting hints from xml) - it will not be possible with switch
4. you may need a greater degree of randmization (Math.random is not as random as one may think) in which case resorting/reordering array is much simpler and faster.
So, I suggest you switch to the following code:
var hints:Array = [];
hints[0] = "Anticipation of death is better than death itself.";
hints[1] = "Anything worth doing is worth overdoing.";
hints[2] = "At the core of all well-founded belief lies belief that is unfounded.";
hints[3] = "Beware of geeks bearing gifs.";
hints[4] = "Collaboration is essential: It allows you to blame someone else.";
hints[5] = "Don\'t worry, this will take about as long as the time it takes to play a 2v2 match with 4 ret pallies.";
hints[6] = "If you are not part of the solution, you are part of the precipitate.";
hints[7] = "If you experience poor performance, adjust the quality settings in your preference menu option.";
hints[8] = "It\'s not that life is so short, it\'s just that you\'re dead a really long time.";
hints[9] = "Never let your schooling interfere with your education.";
hints[10] = "Read my MIPs - no new VAXes.";
hints[11] = "The heresy of today is the logic of tomorrow.";
hints[12] = "The problem with instant gratification is that it takes too long.";
hints[13] = "The total amount of confusion in this world remains constant. It just gets shifted around.";
hints[14] = "There is more to life than increasing its speed.";
hints[15] = "There is nothing worse than the brilliant image of a fuzzy concept.";
hints[16] = "Those who love sausage, the law, and holy canon should never watch any of them being made.";
hints[17] = "Two wrongs don\'t make a right, but three lefts do.";
hints[18] = "What if there were no hypothetical questions?";
hints[19] = "Where is the sea, said the fish, as they swam through it.";
hints[20] = "You can safely blame any bugs on Aoedipus, who is too busy grinding battlegrounds to do QA on her own work.";
hint = hints[int(Math.random() * hints.length)];
// OR
hint = hints[Math.round(Math.random() * (hints.length - 1))];
Maybe you are looking for
-
Finder cover flow not playing .mp4 files
Recently I found the option to play video files while in the cover flow view in a finder window (click on the right pointing arrow that appears when hovering over the thumbnail). This week when I try playing a video (.mp4 files), I can see that the v
-
Report writer in third currency
currently our special purpose ledger basic key figure only has local and group currency, can we add another currency for example document currency , the objective is to show three currency in our report writer report, is it possible? re-config summar
-
How can I delete photos in the "Edited" album in the iPhoto app on my iPad??
How can I delete photos in the "Edited" folder in the iPhoto App on my iPad?
-
How to create report category for PNPCE ldb in ECC 6.0
Hi Experts, How to create report category for the LDB pnpce in ECC6.0 Thanks in Advance, Regards, IFF
-
Firefox is loading but the webpage (eg google or whatever) is not centred
This means that the search box (for example google search) is positioned right (right aligned). this means that i cannot read the webpage when it loads or get to my bookmarks drop down list. Also, there is not a scrollbar on the right hand side eithe