Switch Statement again
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'
Similar Messages
-
HELP -menu using a switch statement
Hello to all. I'm new to the Java world, but currently taking my first Java class online. Not sure if this is the right place, but I need some help. In short I need to write a program that gives the user a menu to chose from using a switch statement. The switch statement should include a while statement so the user can make more than one selection on the menu and provide an option to exit the program.
With in the program I am to give an output of all counting numbers (6 numbers per line).
Can anyone help me with this?? If I'm not asking the right question please let me know or point me in the direction that can help me out.
Thanks in advance.
Here is what I have so far:
import java.util.*;
public class DoWhileDemo
public static void main(String[] args)
int count, number;
System.out.println("Enter a number");
Scanner keyboard = new Scanner (System.in);
number = keyboard.nextInt();
count = number;
do
System.out.print(count +",");
count++;
}while (count <= 32);
System.out.println();
System.out.println("Buckle my shoe.");
}Thanks for the reply. I will tk a look at the link that was provided. However, I have started working on the problem, but can't get the 6 numbers per line. I am trying to figure out the problem in parts. Right now I'm working on the numbers, then the menu, and so on.
Should I tk this approach or another?
Again, thanks for the reply. -
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?? -
I am doing a question in which I have to make a simple ATM program that can withraw and deposit money as many times as the user wants. To exit the program the user has to hit "x". I have to use a switch statement. Im getting incompatible type errors after compiling it. Can anyone help me? Sorry if the formattings not too good.
//ATM.java
//This program reads in a user's opening balance and performs a withdrawal or a deposit at the request of the user
import java.text.*;
public class ATM
public static void main(String args[])
int balance;
char withdrawal, deposit, choice;
//Ask for the opening balance
System.out.print("Please enter your opening balance");
balance=UserInput.getInt();
//Find out what the user wants done
System.out.print("What would you like to do? (Withdrawal, Depositor Exit(x))");
choice=UserInput.getChar();
switch(choice){
case "w":
while(balance>0)
System.out.print("How much would you like to withdraw?");
withdrawal=UserInput.getChar();
balance=balance-withdrawal;
System.out.print("Your remaining balance is " + balance);
break;
case "d":
while(balance>0)
System.out.print("How much do you wish to deposit?");
deposit=UserInput.getChar();
balance=balance+deposit;
System.out.print("Your new balance is " + balance);
break;
case "x":
System.out.print("Goodbye and thank you for using this program");
break;
default:
System.out.print("We were not able to process your request, please try again");
break;
}Type a reply to the topic using the form below. When finished, you can optionally preview your reply by clicking on the "Preview" button. Otherwise, click the "Post" button to submit your message immediately.
Subject:
Click for bold Click for italics Click for underline Click for code tags
Formatting tips
Message:
Add topic to Watchlist:
Original Message:
Switch statement problem
Xivilai Registered: Mar 3, 2007 9:52 AM Mar 3, 2007 10:06 AM
I am doing a question in which I have to make a simple ATM program that can withraw and deposit money as many times as the user wants. To exit the program the user has to hit "x". I have to use a switch statement. Im getting incompatible type errors after compiling it. Can anyone help me? Sorry if the formattings not too good.
//ATM.java
//This program reads in a user's opening balance and performs a withdrawal or a deposit at the request of the user
import java.text.*;
public class ATM
public static void main(String args[])
int balance;
char withdrawal, deposit, choice;
//Ask for the opening balance
System.out.print("Please enter your opening balance");
balance=UserInput.getInt();
//Find out what the user wants done
System.out.print("What would you like to do? (Withdrawal, Depositor Exit(x))");
choice=UserInput.getChar();
switch(choice){
case 'w':
while(balance>0)
System.out.print("How much would you like to withdraw?");
withdrawal=UserInput.getChar();
balance=balance-withdrawal;
System.out.print("Your remaining balance is " + balance);
break;
case 'd':
while(balance>0)
System.out.print("How much do you wish to deposit?");
deposit=UserInput.getChar();
balance=balance+deposit;
System.out.print("Your new balance is " + balance);
break;
case 'x':
System.out.print("Goodbye and thank you for using this program");
break;
default:
System.out.print("We were not able to process your request, please try again");
break;
} -
Java Program.. HELP (switch statement)
I need help on fixing this program for school.ive looked at information online but i still do not see what i am doing wrong.
The College Rewards Program is based on a student�s achievements on the ACT Test. Students that have excelled on the test are going to be rewarded for the hard work that they put into high school and studying for the exam. The following are the rewards that will be given to students. They are cumulative, and they get all rewards below their score.
1. 35-36 $100 a week spending money
2. 33-34 Free computer
3. 31-32 $10,000 free room and board
4. 25-30 $5000 off the years tuition
5. 21-24 $500 in free books per year
6. 17-20 Free notebook
7. 0-16 Sorry, no rewards, please study and try taking the ACT again.
Make a prompt so the user is asked for their ACT score( be careful).
Change the ACT score into a number
Then have the program use that number to display a message about the Rewards program.
Sample output:
What was your score on the ACT: 44
Entry error, please enter a number from 0 to 36. (error trap wrong numbers)
What was your score on the ACT: 27
You got a 27 on the ACT, your rewards are: ( have it number the rewards)
1. $5,000 off the year�s tuition
2. $500 dollars a year in books
3. A free notebook
Congratulations on your hard work and good score.
import java.util.Scanner;
import java.text.*;
public class Act
public static void main (String [] args)
Scanner scan = new Scanner( System.in );
int score,reward;
score=0;
boolean goodnum;
do
System.out.println( "What was your ACT score? " );
score = scan.nextInt() ;
if (score >0 || score <36) goodnum = true;
else
System.out.println ("Please enter the correct number");
goodnum=false;
while (score<0 || score>36) {
if (score==35 || score==36) reward=1;
else if (score ==34 || score score==33) reward=2;
else if (score==32 || score==31) reward=3;
else if (score>=25 && score<=30) reward=4;
else if (score>=21 && score<=24) reward=5;
else if (score>=17 && score<=20) reward=6;
else reward=7;
c=0
switch (reward) {
case 1: $100 a week spending money
c++
System.out.println ("$100 a week spending money");
case 2: Free computer
c++
System.out.println ("Free computer");
case 3: $10,000 free room and board
c++
System.out.println ("$10,000 free room and board");
case 4: $5000 off the years tuition
c++
System.out.println ("$5000 off the years tuition");
case 5: $500 in free books per year
c++
System.out.println ("$500 in free books per year");
case 6: Free notebook
c++
System.out.println ("Free notebook");
case 7: Free notebook
c++
System.out.println ("Sorry, no rewards, please study and try taking the ACT again.");
break;
default:
System.out.println ("Sorry, no rewards, please study and try taking the ACT again.");
break;
}There are some strange things going on here that could be fixed, so I'll just put my version of how i'd handle this up.
import java.util.Scanner;
import java.text.*; // is this really needed? Scanner's the only class I see
public class Act {
public static void main( String[] args ) {
Scanner scan = new Scanner( System.in );
int score, reward; // don't need to set a value yet
boolean goodnum;
do {
System.out.println( "What was your ACT score? " );
score = scan.nextInt();
if ( score >= 0 && score <= 36 ) goodnum = true; // note the && and =s
else {
System.out.println( "Please enter a valid number (between 0 and 36)." );
goodnum = false;
} while ( !goodnum ); // when this loop finished, the number will be between 0 and 36, a good number
if ( score >= 35 ) reward = 1; // save yourself the typing, by now score must be between 0 and 36
else if ( score >= 33 ) reward = 2; // so just go down with else ifs.
else if ( score >= 31 ) reward = 3; // this will only reach the lowest point.
else if ( score >= 25 ) reward = 4;
else if ( score >= 21 ) reward = 5;
else if ( score >= 17 ) reward = 6;
else reward = 7;
// what was the c for? reward already tells how well they did
// You handled the switch statement almost perfectly
// don't break so that reward progressively adds to the output
if ( reward >= 6 ) { // this if statement is optional, just for good esteem. You could even take it out of the if{}
System.out.println( "For your score of "+String.valueOf( score )+" you will be rewarded the following:" );
switch ( reward ) {
case 1: // $100/week spending money
System.out.println( "$100 a week spending money." );
case 2: // Free computer
System.out.println( "Free computer." );
case 3: // $10,000 room and board
System.out.println( "$10,000 free room and board." );
case 4: // $5000 off tuition
System.out.println( "$5000 off the year's tuition." );
case 5: // $500 in free books per year
System.out.println( "$500 in free books per year." );
case 6: // Free notebook
System.out.println( "Free notebook." );
break; // break here to keep away from discouraging the fine score
case 7: // since 7 and default are the same result, ignore this and it'll pass to default
default: // but technically, since reward must be from 1 to 7, default would never explicitly be called
System.out.println( "Sorry, no rewards. Please study and try taking the ACT again." );
break; // likely this break is unneccessary
}That works in my head, hope it works on your computer. -
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"); -
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 ;-) -
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 have got a 13 inch MacBook Pro and it got stuck in a loop so I switched it off by holding the power button down and now when I switch it on the apple logo appears then I get a blank slot at the bottom of the screen then the circle appears and rotates and then it switches off again, I have tried starting it again with the system disc that came with it when it was new but it makes no difference. Is there a sequence that I can use to force it to start.
Sorry. We can't help you. It's no longer an iPhone. Apple won't touch it.
Take it to whoever replaced the screen and see if they can help you.
iPhones are not user servicable and Apple does not sell iPhone parts at all. I'd be surprised if you were actually able to back it up at this point. It sounds like it's completely borked. -
How to convert switch statement into iif than else statement in SSRS
Hi All;
How do i convert switch statement into iif statement in ssrs
=
Switch(
Fields!createdonValue.Value = Now(), "Today",
Fields!createdonValue.Value = DateAdd("d",-1,Today()),"Yesterday",
Fields!createdonValue.Value >= FORMATDATETIME(DateAdd(DateInterval.Day, -6,DateAdd(DateInterval.Day, 1-Weekday(today),Today)),DATEFORMAT.ShortDate) and
Fields!createdonValue.Value <= FORMATDATETIME(DateAdd(DateInterval.Day, -0,DateAdd(DateInterval.Day, 1-Weekday(today),Today)),DATEFORMAT.ShortDate),"Last Week",
Fields!createdonValue.Value >= FORMATDATETIME(DateAdd(DateInterval.Day, -13,DateAdd(DateInterval.Day, 1-Weekday(today),Today)),DATEFORMAT.ShortDate) and
Fields!createdonValue.Value <= FORMATDATETIME(DateAdd(DateInterval.Day, -0,DateAdd(DateInterval.Day, 1-Weekday(today),Today)),DATEFORMAT.ShortDate),"Last Fortnight",
Fields!createdonValue.Value >= DateValue(DateAdd("M",-1,DateAdd("D",-(Day(Now)-1),Now))) and
Fields!createdonValue.Value <= DateValue(DateAdd("D",-1,DateAdd("D",-(Day(Now)-1),Now))),"Last Month",
Fields!createdonValue.Value >= DateSerial(Year(Now()), 1, 1) and
Fields!createdonValue.Value <= DateSerial(Year(Now()), 12, 31),"Year to Date"
Any help much appreciated
Thanks
Pradnya07Not sure why you want to se IIF as Switch is more compact
Anyways it will look like this
=IIf(
Fields!createdonValue.Value = Now(), "Today",IIf(
Fields!createdonValue.Value = DateAdd("d",-1,Today()),"Yesterday",Iif(
Fields!createdonValue.Value >= FORMATDATETIME(DateAdd(DateInterval.Day, -6,DateAdd(DateInterval.Day, 1-Weekday(today),Today)),DATEFORMAT.ShortDate) and
Fields!createdonValue.Value <= FORMATDATETIME(DateAdd(DateInterval.Day, -0,DateAdd(DateInterval.Day, 1-Weekday(today),Today)),DATEFORMAT.ShortDate),"Last Week",IIf(
Fields!createdonValue.Value >= FORMATDATETIME(DateAdd(DateInterval.Day, -13,DateAdd(DateInterval.Day, 1-Weekday(today),Today)),DATEFORMAT.ShortDate) and
Fields!createdonValue.Value <= FORMATDATETIME(DateAdd(DateInterval.Day, -0,DateAdd(DateInterval.Day, 1-Weekday(today),Today)),DATEFORMAT.ShortDate),"Last Fortnight",IIf(
Fields!createdonValue.Value >= DateValue(DateAdd("M",-1,DateAdd("D",-(Day(Now)-1),Now))) and
Fields!createdonValue.Value <= DateValue(DateAdd("D",-1,DateAdd("D",-(Day(Now)-1),Now))),"Last Month",IIf(
Fields!createdonValue.Value >= DateSerial(Year(Now()), 1, 1) and
Fields!createdonValue.Value <= DateSerial(Year(Now()), 12, 31),"Year to Date")))))
Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs -
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). -
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 -
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 -
this is what my iphone 4 shows. iv tried switching off again and again, closing apps by double tapping the home button but still not working. please help.
is there any other method to download ios 6.1.2.
my phone is not being recognized by itunes on my new windows 8. neither its working on touch copy.
kindly help.
thankswell in thatcase, i need another help .
thanks for your instant reply.
i have currently bought a new laptop (windows 8) and my iphone is not being recognized by itunes.
because i have no backup on my previous laptop, i downloaded touchcopy but even touch copy is not recognizing my iphone.
Maybe you are looking for
-
Switching from OS 9.2.2 to Tiger - account administrator?
Sorry to ask dumb question. I am about to switch from OS 9.2.2 to Tiger. In preparation for the big move I have been spending a lot of time here reading through the troubles others have had. I see many threads on these forums about working with accou
-
Apple TV 2 isn't recognizing that I have a season pass after update.
I recently updated to the latest update on Apple TV. I have a season pass to a show, but now my Apple TV 2 does not allow me to download episodes without paying for them again. I am logged in with my apple ID, so that's not the problem. I received
-
Auto Generation Cross References
Hi I am working on xml to InDesign automation process form last year, I am looking to auto generate Cross References linking by using xml. Whereas my xml contains following tags for linking. <figref pid="p200179129960143001">Table 1</figref> <ptr pid
-
Photos will not load ..... Help please.
Can't install my photos I am getting "The iPod (my name) can not be updated. An unknown error occurred (-4)" when I plug my iPod into my computer. When I go to photos and go to the drop-down window to click my pictures or anything I get "iTunes has e
-
HT5957 how about newwsstand issue in ipad ios7 when to fixed it?
we experienced this issue in ipad... https://discussions.apple.com/message/23028337#23028337 Thanks