|
this is the constructor
public set(int[] intSet)
{
this.boolSet = new bool[101];
for (int i = 0; i < intSet.Length; )
{
if (!(intSet[i] < 0 && intSet[i] > 100))
{
boolSet[intSet[i]] = true;
i++;
}
else
{
Console.WriteLine("This doesn't work");
}
}
}
I noticed that i is always equal to zero
Also..
public override string ToString()
{
Console.Write("this is the array: ");
int i = 0;
while( i < boolSet.Length)
{
if (boolSet[i])
{
Console.Write(" " + (i+1));
}
i++;
}
Console.WriteLine("");
return base.ToString();
}
This makes the boolean entry into a string to be printed, I have a random numbers coming through, there is always a 1 appearing in the array, if I take out the + 1 it will just be zero...
any help would be appreciated.
And yes, I know List would be good but this is an assignment and they want us to use array and to overwrite the ToString.
I am at a loss.
|
|
|
|
|
Hi,
I didn't get your question? What is your concrete problem?
Regards
Sebastian
|
|
|
|
|
Sivyo wrote: intSet[i] < 0 && intSet[i] > 100
How can a number be less than zero AND greater than 100 ?
Christian Graus
Driven to the arms of OSX by Vista.
Read my blog to find out how I've worked around bugs in Microsoft tools and frameworks.
|
|
|
|
|
your right, I made a very obvious mistake. its supposed to be i > 0 and i <100
|
|
|
|
|
Where do I start?
None of the code you gave will do what you want. Notable problems:
Sivyo wrote: if (!(intSet[i] < 0 && intSet[i] > 100))
No varaible can be Less than zero and greater than 100. Maths does not allow it. Look at "||" for OR rather than AND.
If you correct this you will never exit the for loop:
Sivyo wrote: for (int i = 0; i < intSet.Length; )//change to while maybe
Why? Because you only increment i when you set boolset[i] to true.
If I alter your constructor to this:
public set(int[] intSet)
{
boolSet = new bool[inset.Length];
for (int i = 0; i < intSet.Length; i++)
{
if (!((intSet[i] < 0) || (intSet[i] > 100)))
{
boolSet[intSet[i]] = true;
}
else
{
boolSet[intSet[i]] = false;
}
}
}
it will work a little better, and I will leave the rest to you!
No trees were harmed in the sending of this message; however, a significant number of electrons were slightly inconvenienced.
This message is made of fully recyclable Zeros and Ones
|
|
|
|
|
I did mess up with the whole greater and less then thing... its suppossed to be
i<100 && i> 0
and your right, it is an endless loop of "it doesn't work"
...
and if I make those changes
public set(int[] intSet)
{
this.boolSet = new bool[intSet.Length];
for (int i = 0; i < intSet.Length;i++)
{
if (!(intSet[i] > 0 && intSet[i] < 100))
{
boolSet[intSet[i]] = true;
}
else
{
Console.WriteLine("This doesn't work");
boolSet[intSet[i]] = false;
}
}
}
it goes through "this doesn't work" the whole time...
|
|
|
|
|
Well then you should put away the ! in your if-statement...
|
|
|
|
|
it still goes through "This doesn't work " a whole lot but does insert the numbers into the array
|
|
|
|
|
it still doesn't stop my program from crashing when the user inserts a number over those numbers
|
|
|
|
|
Do you receive an exception? If yes, what message does the exception has?
|
|
|
|
|
I noticed when I debug that it doesn't get i... i is always equal to 0
|
|
|
|
|
I'm betting it doesn't do it "the whole time" - just about 100 times!
I think if you put a similar Console.WriteLine into the "boolSet[intSet[i]] = true" part of the if statement, then it will not happen often. Why? Because your input data is nearly all negative or greater than 100.
Do you know how to use the debugger? If so then put a breakpoint on the "boolSet = new bool..." line, and single step you way round the loop a few times - see what you have in the data, and what your code it doing with it. It is well worth getting used to the debugger, it will save you a lot of time in the future!
P.S. you don't need the "this." part of "this.boolSet = new bool..." - it is implied and makes the code harder to read... It's not wrong to include it, but it isn't needed and you will find out later why you can do it.
No trees were harmed in the sending of this message; however, a significant number of electrons were slightly inconvenienced.
This message is made of fully recyclable Zeros and Ones
|
|
|
|
|
Addendum: Now that you have changed to "boolSet[intSet[i]]" you need to swap the "new bool[inset.Length]" back to "new bool[101]" or you will have problems if the number of elements in your data is less than 101!
No trees were harmed in the sending of this message; however, a significant number of electrons were slightly inconvenienced.
This message is made of fully recyclable Zeros and Ones
|
|
|
|
|
I noticed when debugging that i is always equal to 0...
|
|
|
|
|
Okay, could you post the code with all your changes again. I'm not sure what you changed and what not... Did you forgot the i++ in the for-loop?
|
|
|
|
|
public set(int[] intSet)
{
this.boolSet = new bool[101];
for (int i = 0; i < intSet.Length;i++)
if (intSet[i] > 0 && intSet[i] < 100)
{
boolSet[intSet[i]] = true;
}
else
{
boolSet[intSet[i]] = false;
}
}
}
would it be easier to check the range when user inserts numbers?
int[] userIn = new int[3];
bool flag = false;
while (flag ==false)
{
Console.WriteLine("User, please enter 3 number 0 - 100");
for (int i = 0; i < userIn.Length; i++)
{
if (Int32.TryParse(Console.ReadLine(), out userIn[i]))
flag = true;
}
}
That is in main
|
|
|
|
|
Is the app crashing in the main-method or within the set-method? The set-method seems to be okay...
|
|
|
|
|
its crashing as soon as after the 3 numbers are entered. Maybe it would be better if one of the numbers is checked first then inserted into the array...
|
|
|
|
|
Your crash is likely coming from here:
else
{
boolSet[intSet[i]] = false;
}
If intSet[i] is greater than 100 or less then 0(lets say its 103) we go into the else block. Your boolSet array only has 101 items in it so trying to access boolSet[103] will raise and arrayOutOfBoundsException (or something similar) is that the message you see?
Also can you state the programs goals more clearly? What information should boolSet hold?
|
|
|
|
|
boolSet should hold weather or no each array has been chosen.
Example in an array of 5 and the numbers 1 2 3 5 were chosen then...
0 = False, 1 = False, 2 = true, 3 = True, 4 = False, 5 = True
so the program will show on the Console Write line 1 2 3 5
SO I have random numbers from 0 to 100 chosen in order to create 2 separate sets.
Then the user must insert 3 numbers to create a userSet. This is where I am having problems. If the user stays in range ect. then it works fine. But when he/she doesn't... well... I get out of bounds error. I know there must be an easier way of doing it... but I really don't have any experience
|
|
|
|
|
I see. It should be a fairly easy fix then. (although you have some other problems in your user input code)
The easiest way to fix the crash is to remove the else block completely. Think about it, if intSet[i] is not between 0 and 100 there is not an entry in the boolSet array to hold the information, and in fact you don't need one if you only care about the numbers 0 to 100 anyway!
The best way with your current code would be to have all the elements in boolSet set to false to start with then let the code you already have set to true the ones the user entered.
For the problems with your input code, try entering 1, 2, d.
Also if you have the requirements from the assignment posting them here (or the relevant parts) would give us a clear idea of what you have to achieve. (note I have no intention of doing your homework for you but im quite happy to you help you with problems as you have been doing the work yourself so far! )
|
|
|
|
|
yea I figured that,
there are two parts, the first part...
Write a class that will be used for creating sets of whole numbers in the range of 0…100. Implement the sets with a Boolean array. Define in the class the following operations:
1. A constructor without parameters, which initialize the set as an empty set.
2. A constructor that gets an array of wholes and creates a set that contains those array members.
9. Override the methods ToString and Equals that inherit from Object in the following way:
10. ToString – will return a string representation of the set.
Part two is where the user comes in
Write a program that checks the sets class in the following way:
• Create 2 sets by drawing 10 random numbers in the range of 0…100 for each set, and display the sets contents.
• Perform intersection and union of the two sets and display the received sets.
• Get from the user 3 numbers and create a third set. Check whether this set is a sub-set of one of the sets and display the result.
I am also having problems that after I create union and intersection, there is only one set and not two and the originals die...
I haven't played around with that yet so not going to ask for help with it yet.
|
|
|
|
|
Looks like an interesting assignment. Are you still having problems with the previous bits?
|
|
|
|
|
nah, don't have a problem with the strange 0, for some reason its not there anymore.
|
|
|
|
|
found another issue... I insert 3 6 fg and get an output of 4 7....
|
|
|
|