|
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. |
Using javascript & html, i have a button on a page and a text box. User inputs a grade number into the text box and presses the button. An alert pops up based on the input, using a simple if statement, telling the user if the entered grade is a merit, pass etc.
+ Show Spoiler + if(grade!="") { if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") } } else { alert("Please enter a grade from 0 to 100.") } }
The question is, why do i need to lay out everything within a second if statement? The first time i wrote it, i had similar to the following:
+ Show Spoiler +
if(grade="") { alert("You need to enter a grade") } else if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
however, this kept displaying "This is below threshold." instead of running the if(grade="") part. My tutor said it might be something to do with the if statements switching from string ("") to int (grade>-1&&grade<40) which is somehow messing it up.
Many thanks
|
if(grade="")
That is not a comparison, it just sets the variable grade to an empty content.
|
Okay thanks, silly error
|
On March 14 2013 23:41 FFGenerations wrote:Okay thanks, silly error  I recommend Yoda notation. Lots of people don't like it, but you can seriously get used to reading it quite quickly, and it makes errors like that impossible:
if("" = grade){ ... }
If you made the same mistake, but always put the constant you're comparing to on the left side of the operator, you'll get an exception instead of the unexpected behavior you were getting, because you can't assign a new value to ""
|
On March 14 2013 23:25 FFGenerations wrote:Using javascript & html, i have a button on a page and a text box. User inputs a grade number into the text box and presses the button. An alert pops up based on the input, using a simple if statement, telling the user if the entered grade is a merit, pass etc. + Show Spoiler + if(grade!="") { if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") } } else { alert("Please enter a grade from 0 to 100.") } }
The question is, why do i need to lay out everything within a second if statement? The first time i wrote it, i had similar to the following: + Show Spoiler +
if(grade="") { alert("You need to enter a grade") } else if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
however, this kept displaying "This is below threshold." instead of running the if(grade="") part. My tutor said it might be something to do with the if statements switching from string ("") to int (grade>-1&&grade<40) which is somehow messing it up. Many thanks This isn't an answer to your actual question, but I'd like to suggest an improvement in your program:
if("" == grade) { alert("You need to enter a grade") } else if(grade > -1 && grade < 40) { alert("This is below threshold.") } else if(grade<50) { alert("This is a third class degree.") } else if(grade<60) { alert("This is a lower second degree.") } else if(grade<70) { alert("This is an upper second degree.") } else if(grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
Your checks like "grade>39" are redundant, because they come after you have already determined that grade is not less than 40 (otherwise you would have run into the previous if).
|
On March 14 2013 03:48 ragz_gt wrote:Show nested quote +On March 13 2013 20:08 Frigo wrote:On March 13 2013 07:00 Frigo wrote:On March 13 2013 02:21 ragz_gt wrote: Does anyone know if there is a JUnit contrib that allow customizable test execution order? I remember such a feature in a newer JUnit release. It can at least randomize orders I believe, not sure about a user-defined order though. Can tell you more details tomorrow when I have access to work mail. http://www.hascode.com/2012/11/new-features-in-junit-4-11/Yeah, it is possible. It is rather limited that it can only sort by method name (and ascend only, can't descend LOL). But I guess I can name stuff by levels (1000s, 2000s etc) and should work Kind of silly though Yeah, they implemented it in a very stupid way, can't even extend it.
|
On March 15 2013 00:19 AmericanUmlaut wrote:Show nested quote +On March 14 2013 23:25 FFGenerations wrote:Using javascript & html, i have a button on a page and a text box. User inputs a grade number into the text box and presses the button. An alert pops up based on the input, using a simple if statement, telling the user if the entered grade is a merit, pass etc. + Show Spoiler + if(grade!="") { if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") } } else { alert("Please enter a grade from 0 to 100.") } }
The question is, why do i need to lay out everything within a second if statement? The first time i wrote it, i had similar to the following: + Show Spoiler +
if(grade="") { alert("You need to enter a grade") } else if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
however, this kept displaying "This is below threshold." instead of running the if(grade="") part. My tutor said it might be something to do with the if statements switching from string ("") to int (grade>-1&&grade<40) which is somehow messing it up. Many thanks This isn't an answer to your actual question, but I'd like to suggest an improvement in your program: + Show Spoiler + if("" == grade) { alert("You need to enter a grade") } else if(grade > -1 && grade < 40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade<60) { alert("This is a lower second degree.") } else if(grade<70) { alert("This is an upper second degree.") } else if(grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
Your checks like "grade>39" are redundant, because they come after you have already determined that grade is not less than 40 (otherwise you would have run into the previous if).
Isn't it better if the code is only:
+ Show Spoiler + if(grade>=40&&grade<50) { alert("This is a third class degree.") } else if(grade >= 50 && grade<60) { alert("This is a lower second degree.") } else if(grade >= 60 && grade<70) { alert("This is an upper second degree.") } else if(grade >= 70 && grade<=100) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
It looks a bit more clear with <= 100, and you also skip the -1 & 40 check and the one for empty grade. They are covered in the last else.
|
On March 15 2013 02:32 darkness wrote:Show nested quote +On March 15 2013 00:19 AmericanUmlaut wrote:On March 14 2013 23:25 FFGenerations wrote:Using javascript & html, i have a button on a page and a text box. User inputs a grade number into the text box and presses the button. An alert pops up based on the input, using a simple if statement, telling the user if the entered grade is a merit, pass etc. + Show Spoiler + if(grade!="") { if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") } } else { alert("Please enter a grade from 0 to 100.") } }
The question is, why do i need to lay out everything within a second if statement? The first time i wrote it, i had similar to the following: + Show Spoiler +
if(grade="") { alert("You need to enter a grade") } else if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
however, this kept displaying "This is below threshold." instead of running the if(grade="") part. My tutor said it might be something to do with the if statements switching from string ("") to int (grade>-1&&grade<40) which is somehow messing it up. Many thanks This isn't an answer to your actual question, but I'd like to suggest an improvement in your program: + Show Spoiler + if("" == grade) { alert("You need to enter a grade") } else if(grade > -1 && grade < 40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade<60) { alert("This is a lower second degree.") } else if(grade<70) { alert("This is an upper second degree.") } else if(grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
Your checks like "grade>39" are redundant, because they come after you have already determined that grade is not less than 40 (otherwise you would have run into the previous if). Isn't it better if the code is only: + Show Spoiler + if(grade>=40&&grade<50) { alert("This is a third class degree.") } else if(grade >= 50 && grade<60) { alert("This is a lower second degree.") } else if(grade >= 60 && grade<70) { alert("This is an upper second degree.") } else if(grade >= 70 && grade<=100) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
It looks a bit more clear with <= 100, and you also skip the -1 & 40 check and the one for empty grade. They are covered in the last else.
I actually prefer data based code for those situations. My javascript is rusty so the syntax might not be 100% correct or optimal:
var boundaries = new Array( new Array(39, function(){}), new Array(49, function(){alert("This is a third class degree.")}), new Array(59, function(){alert("This is a lower second class degree.")}), new Array(69, function(){alert("This is a upper second class degree.")}), new Array(100, function(){alert("This is a first class degree.")}) );
// foreach would be better but don't remember if it was native JS for (i = 0; i < boundaries.length; ++i) { if (grade <= boundaries[i][0]) { boundaries[i][1](); break; } }
|
^ what's the value of boundaries.length? 100 or number of arrays (5 in this case)? If the former, then I'm not sure if this would be any faster/better because of numerous iterations and you also use memory to create arrays.
Edit: It should be the former like other languages, but I'm not familiar with JavaScript anyway.
|
I don't think speed matters, it's more a question of what is more readable and maintainable code. Write easy code first, optimize for speed later (and measure first!). But is this more readable than the original code? Not sure... personal preference I think.
|
On March 15 2013 03:53 alwinuz wrote: I don't think speed matters, it's more a question of what is more readable and maintainable code. Write easy code first, optimize for speed later (and measure first!). But is this more readable than the original code? Not sure... personal preference I think.
I don't really want to start a big huff over nothing, but there is a misconception I don't want spread. The idea that an easily maintainable design is a trade off with with code speed is absurd. The better the design, the smaller the code base, more maintainable, readable, and faster it will be. If you find that your code is running slow, then optimizing it will only cause problems in your understanding of the code. This is often why people rewrite programs from scratch, because they tried to optimize something, realized they did the design wrong, and start over.
Optimization should be done out the gate, so that your design pattern will reflect the quickest way to solve the problem, and be easier to understand because of it.
|
On March 15 2013 04:17 RoyGBiv_13 wrote:Show nested quote +On March 15 2013 03:53 alwinuz wrote: I don't think speed matters, it's more a question of what is more readable and maintainable code. Write easy code first, optimize for speed later (and measure first!). But is this more readable than the original code? Not sure... personal preference I think. I don't really want to start a big huff over nothing, but there is a misconception I don't want spread. The idea that an easily maintainable design is a trade off with with code speed is absurd. The better the design, the smaller the code base, more maintainable, readable, and faster it will be. If you find that your code is running slow, then optimizing it will only cause problems in your understanding of the code. This is often why people rewrite programs from scratch, because they tried to optimize something, realized they did the design wrong, and start over. Optimization should be done out the gate, so that your design pattern will reflect the quickest way to solve the problem, and be easier to understand because of it. Depends on what kind of optimization you're talking about. You're basically talking about having a good model of the program before you make it, which indeed benefits both maintainability and speed, but I don't think most people would call that optimization, that's more along the lines of "either you know what you're doing before you go in, or you fuck it up and rewrite it, learning something in the process". It's not like you write a program, are really proud of it, test the speed and rewrite it from scratch because a completely different design would be faster.
So I would say the idea "make it first, then optimize where needed" makes sense because the optimization you're talking about isn't something you can do ahead of time since you don't know what it is, you already designed the program wrong from the start if you need to do it.
|
well you could just put more thought into what you're doing; my example was just a super fast messing around thing to get something working in javascript, however if i thought for 10 seconds i could have written it better like demonstrated, or even better yet
|
On March 15 2013 02:32 darkness wrote:Show nested quote +On March 15 2013 00:19 AmericanUmlaut wrote:On March 14 2013 23:25 FFGenerations wrote:Using javascript & html, i have a button on a page and a text box. User inputs a grade number into the text box and presses the button. An alert pops up based on the input, using a simple if statement, telling the user if the entered grade is a merit, pass etc. + Show Spoiler + if(grade!="") { if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") } } else { alert("Please enter a grade from 0 to 100.") } }
The question is, why do i need to lay out everything within a second if statement? The first time i wrote it, i had similar to the following: + Show Spoiler +
if(grade="") { alert("You need to enter a grade") } else if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
however, this kept displaying "This is below threshold." instead of running the if(grade="") part. My tutor said it might be something to do with the if statements switching from string ("") to int (grade>-1&&grade<40) which is somehow messing it up. Many thanks This isn't an answer to your actual question, but I'd like to suggest an improvement in your program: + Show Spoiler + if("" == grade) { alert("You need to enter a grade") } else if(grade > -1 && grade < 40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade<60) { alert("This is a lower second degree.") } else if(grade<70) { alert("This is an upper second degree.") } else if(grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
Your checks like "grade>39" are redundant, because they come after you have already determined that grade is not less than 40 (otherwise you would have run into the previous if). Isn't it better if the code is only: + Show Spoiler + if(grade>=40&&grade<50) { alert("This is a third class degree.") } else if(grade >= 50 && grade<60) { alert("This is a lower second degree.") } else if(grade >= 60 && grade<70) { alert("This is an upper second degree.") } else if(grade >= 70 && grade<=100) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
It looks a bit more clear with <= 100, and you also skip the -1 & 40 check and the one for empty grade. They are covered in the last else. You changed his logic - the original function generated a different message for values 0-40 than for values outside the range 0-100. If I enter "30" into your function, I get "Please enter a grade from 0 to 100", that's silly.
|
On March 15 2013 03:19 darkness wrote: ^ what's the value of boundaries.length? 100 or number of arrays (5 in this case)? If the former, then I'm not sure if this would be any faster/better because of numerous iterations and you also use memory to create arrays.
Edit: It should be the former like other languages, but I'm not familiar with JavaScript anyway.
The later, like EVERY other language. Boundaries is an array with 5 elements (which are other arrays of 2 elements each but they could be ints objects or arrays of arrays, thats not relevant), so the length of boundaries is 5.
|
On March 14 2013 23:25 FFGenerations wrote:Using javascript & html, i have a button on a page and a text box. User inputs a grade number into the text box and presses the button. An alert pops up based on the input, using a simple if statement, telling the user if the entered grade is a merit, pass etc. + Show Spoiler + if(grade!="") { if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") } } else { alert("Please enter a grade from 0 to 100.") } }
The question is, why do i need to lay out everything within a second if statement? The first time i wrote it, i had similar to the following: + Show Spoiler +
if(grade="") { alert("You need to enter a grade") } else if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
however, this kept displaying "This is below threshold." instead of running the if(grade="") part. My tutor said it might be something to do with the if statements switching from string ("") to int (grade>-1&&grade<40) which is somehow messing it up. Many thanks
Your code seems to be able to compare integers and strings without regard for the data type.
I think after you've validated the grade is a number, you have to apply a parseInt(grade), then you can perform all these if..else checks. That's what I think I did when I did JS some years ago.
I think it parses your string grade into ASCII, which is causing your unexpected behavior.
|
On March 15 2013 06:34 Blisse wrote:Show nested quote +On March 14 2013 23:25 FFGenerations wrote:Using javascript & html, i have a button on a page and a text box. User inputs a grade number into the text box and presses the button. An alert pops up based on the input, using a simple if statement, telling the user if the entered grade is a merit, pass etc. + Show Spoiler + if(grade!="") { if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") } } else { alert("Please enter a grade from 0 to 100.") } }
The question is, why do i need to lay out everything within a second if statement? The first time i wrote it, i had similar to the following: + Show Spoiler +
if(grade="") { alert("You need to enter a grade") } else if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
however, this kept displaying "This is below threshold." instead of running the if(grade="") part. My tutor said it might be something to do with the if statements switching from string ("") to int (grade>-1&&grade<40) which is somehow messing it up. Many thanks Your code seems to be able to compare integers and strings without regard for the data type. I think you have to apply a parseInt(grade) after you've validated the grade is a number, before you can perform all these checks. That's what I think I did when I did JS some years ago. There's no problem comparing strings and numbers in javascript. Try something like: alert("20" > 5) and you'll get true.
|
On March 15 2013 06:37 Tobberoth wrote:Show nested quote +On March 15 2013 06:34 Blisse wrote:On March 14 2013 23:25 FFGenerations wrote:Using javascript & html, i have a button on a page and a text box. User inputs a grade number into the text box and presses the button. An alert pops up based on the input, using a simple if statement, telling the user if the entered grade is a merit, pass etc. + Show Spoiler + if(grade!="") { if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") } } else { alert("Please enter a grade from 0 to 100.") } }
The question is, why do i need to lay out everything within a second if statement? The first time i wrote it, i had similar to the following: + Show Spoiler +
if(grade="") { alert("You need to enter a grade") } else if(grade>-1&&grade<40) { alert("This is below threshold.") } else if(grade>39&&grade<50) { alert("This is a third class degree.") } else if(grade>49&&grade<60) { alert("This is a lower second degree.") } else if(grade>59&&grade<70) { alert("This is an upper second degree.") } else if(grade>69&&grade<101) { alert("This is a first class degree.") } else { alert("Please enter a grade from 0 to 100.") }
however, this kept displaying "This is below threshold." instead of running the if(grade="") part. My tutor said it might be something to do with the if statements switching from string ("") to int (grade>-1&&grade<40) which is somehow messing it up. Many thanks Your code seems to be able to compare integers and strings without regard for the data type. I think you have to apply a parseInt(grade) after you've validated the grade is a number, before you can perform all these checks. That's what I think I did when I did JS some years ago. There's no problem comparing strings and numbers in javascript. Try something like: alert("20" > 5) and you'll get true.
Because "20" as an ASCII value should be greater than 5, at least it would make sense if it were.
"4" > 5 doesn't seem like it would return true, but it probably does here. Again, not a JS person.
And anyways, I don't believe you're suggesting one should compare strings with integers like that. Best practice should always be string with string and int with int.
|
On March 15 2013 03:53 alwinuz wrote: I don't think speed matters, it's more a question of what is more readable and maintainable code. Write easy code first, optimize for speed later (and measure first!). But is this more readable than the original code? Not sure... personal preference I think.
I think it's definitely more readable and maintainable.
There is just one place you have to look at to know where every level begins and ends, you don't have to go through each "else if" to find all the values. If you need to adjust it you instantly know where you have to do it, no need to search through potentially dozens of cases. If you have to add a case, no need to search through all branches to know where it belongs, you can see it in the short list.
Sure, in this case it's a small amount of branches but i had a similar situation with price groups where certain video lengths resulted in different prices and there were twice as many potential values and the previous "if/else if" stuff was far too long. After i changed it to something similar to my code above (in PHP), it was so easy that i was able to copy-paste the list into an email to the product manager and he understood it easily.
I could probably also have written it like this, which is easier to the untrained eye:
var boundaries = new Array(); boundaries["39"] = ""; boundaries["49"] = "third level"; ...
|
Hey guys, small C++ question that I hope someone can help me with. Assuming we have a std::stack called someStack consisting of SomeClass objects, why does this sort of code work fine?
SomeClass *next = someStack.top(); stack.pop(); next.printWhatever();
Since next is a pointer variable pointing to someStack.top(), shouldn't it point to a null object once that object is destroyed through pop?
|
|
|
|
|
|