|
My code is stored within Team Foundation Server so I could roll back if needed. That's a great idea with the ram drive although using disk storage, if you have the space available, might work as well. Either way, I have been making changes as I progress to learn the language and IDE better without making copies. Probably not the best idea but I don't plan to code this way in the long term.
|
|
|
|
|
I have a problem with my script:
Public partial class Form_Process : Form
{
Static Object[ , , ] normW = null;
Private void process(){
for(int i=0; i<3; i++){
normalW[i] = Normali;
}
}
}
Error: Wrong number of indices inside []; expected 3
I hope anyone can help me for my error script above.
I'm sorry for my bad english. Thank you.
modified 9-Jan-15 16:46pm.
|
|
|
|
|
There are a number of problems, including that you never instantiate the array.
First off, why an array? Rather than a Tuple or a List?
Are you actually trying to make an array of three two-dimensional arrays?
Try
Object[,][] normalW = new Object[,][ 3 ] ;
(Untested)
(That ain't working.)
|
|
|
|
|
Yes, i wanna try to use 3 dimensional array, just for learning.
I also used a List. Thank's a lot.
|
|
|
|
|
Is normW the same as normalW? If yes, then you declared it as a 3 dimensional variable.
If you solve it, you'll get the same error on Normali if that is indeed a 2 dimensional variable.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Yes i'm sorry. Thank you. NormW is same as NormalW. I try to save the Normali[i, j] (2 dimensional) in NormW[z, i, j] (3 dimensional)
|
|
|
|
|
Sample 3-dimensional Array initialization:
int[,,] d3ary = new int[3, 4, 5];
for (int i = 0; i < d3ary.GetUpperBound(0); i++)
{
for (int j = 0; j < d3ary.GetUpperBound(1); j++)
{
for (int k = 0; k < d3ary.GetUpperBound(2); k++)
{
d3ary[i, j, k] =
}
}
}
«A man will be imprisoned in a room with a door that's unlocked and opens inwards ... as long as it does not occur to him to pull rather than push» Wittgenstein
|
|
|
|
|
Yes, you're right. I used the code like yours. But i used d3ary.GetLength(0). Is that same with d3ary.GetUpperBound(0)?
|
|
|
|
|
In C#, for all practical purposes, it is legitimate to consider the value returned by 'GetUpperBound to be the same as the value returned by GetLength. Normally in C#: Array.GetLowerBound(#n) will return zero.
It is possible, though unusual, to have Arrays in C# whose lower bounds are not zero; for example: you might inter-operate with Excel and get an Array whose indexes are one-based. Or you can create such strange arrays by using the Array.CreateInstance(Type, Int32[], Int32[]) overload of Array.CreateInstance.
Here's a one-based array of string of length #5:
Array oneBasedArray = Array.CreateInstance(typeof(string), new int[] { 5 }, new int[] { 1 });
oneBasedArray.SetValue("hello", 1); And:
> ? oneBasedArray.GetUpperBound(0)
5
> ? oneBasedArray.GetLength(0)
5
> ? oneBasedArray.GetLowerBound(0)
1 I suggest you engage with non-zero based Arrays as you need to in the course of inter-op with COM, or whatever.
«A man will be imprisoned in a room with a door that's unlocked and opens inwards ... as long as it does not occur to him to pull rather than push» Wittgenstein
|
|
|
|
|
Ok, I got the point. So, GetUpperBound and GetLowerBound are more flexible than using GetLength, aren't they?
They're used as we need.
Thank you BillWoodruff.
|
|
|
|
|
If you're going to use GetUpperBound , then your loop condition needs to be <= rather than < .
GetUpperBound returns the last index for the dimension, not the length.
int[,,] d3ary = new int[3, 4, 5];
Console.WriteLine("{0}, {1}, {2}", d3ary.GetUpperBound(0), d3ary.GetUpperBound(1), d3ary.GetUpperBound(2));
Console.WriteLine("{0}, {1}, {2}", d3ary.GetLength(0), d3ary.GetLength(1), d3ary.GetLength(2));
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
When you declare a three dimensional array, you are saying that each row, column and zaxis-whatever-it-is-called is the same size:
object[,,] ar3d = new object[2,3,4]; But that isn't necessarily the case with the code you show - we have no guarantee that each of the 2D arrays loaded into Normali is the same each time. And if we aren't sure, nor is the compiler!
So when you try to assign a new 2D array to a row, it complains because a 3D array is not made up of arrays of references to arrays of references to objects - it is in fact a flat linear space of objects which is interpreted as a 3D array.
Probably, what you are trying to do is construct a jagged array:
object[][,] normW = new object[3][,];
for (int i = 0; i < normW.Length; i++)
{
object[,] normali = MyProcess(i);
normW[i] = normali;
} Where it doesn't matter what the dimensions of the array you generate in your processing are.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Ok, Thank you for your help. I got it.
|
|
|
|
|
Ah, so I had them backward? That's counter-intuitive.
|
|
|
|
|
Hi,
Why I am getting Object reference not set to an instance of an object when trying to read from registry? although I have a valid value there! The error is shown on this line:
connection_string = "Server=" + myapplication.GetValue("ServerHost").ToString() + ";";
and the value of ServerHost is 127.0.0.1
public string get_connectionstring(string system_key)
{
string connection_string;
RegistryKey myapplication_registry = Registry.LocalMachine.OpenSubKey("SOFTWARE\\myapplication", true);
RegistryKey system_registry = Registry.LocalMachine.OpenSubKey("SOFTWARE\\myapplication\\" + system_key, true);
connection_string = "Server=" + myapplication.GetValue("ServerHost").ToString() + ";";
connection_string += "Port=" + myapplication.GetValue("ServerPort").ToString() + ";";
connection_string += "Database=" + system_registry.GetValue("DatabaseName").ToString() + ";";
connection_string += "Uid=" + myapplication.GetValue("ServerUserID").ToString() + ";";
connection_string += "Pwd=" + cipher_utility.Decrypt<RijndaelManaged>(myapplication.GetValue("ServerPassword").ToString(), "{xxxxx-xxxx-xxxx-xxxx-xxxxxx}", "{xxxx-xxxx-xxxx-xxxx-xxxxx}") + ";";
connection_string += "Connect Timeout=" + myapplication.GetValue("ConnectTimeout").ToString()+ ";";
connection_string += "default command timeout=" + myapplication.GetValue("ConnectTimeout").ToString() + ";";
return connection_string;
}
Technology News @ www.JassimRahma.com
|
|
|
|
|
Thanks guys,
I found the problem.
It was an issue with processor type.
The PC was 64bit and the exe was 32bit.
http://www.softnames.com
|
|
|
|
|
I'm using VS2008 winforms over .net 3.5
I'm playing xvid encoded videos using AudioVideoPlayback. Works most of the time OK but sometimes the video freezes for several seconds before resuming at high speed to catch up. This happens on more than one PC (though all PCs are the same model).
It strikes me that the cause could be hard to track down unless someone has seen similar; any suggestions on what could cause this or any suggestions for reliable playing of xvid videos in winforms?
Thanks
A
|
|
|
|
|
Hi! I'm newer to c# and I'm making a very simple game where I basically give AI directional instructions. The problem is, the commands keep looping! When I issue "TurnRight" I only want it to happen once, but the object doesn't stop spinning and non of my other commands, Idle, TurnLeft, etc, want to work. Help would be appreciated!!!!
Example:
case Ability.TurnRight:
switch (m_facing)
{
case World.Direction.North:
m_facing = World.Direction.East;
break;
case World.Direction.South:
m_facing = World.Direction.West;
break;
case World.Direction.East:
m_facing = World.Direction.South;
break;
case World.Direction.West:
m_facing = World.Direction.North;
break;
}
break;
|
|
|
|
|
Okay, the problem here seems to be that whatever you have that triggers the switch isn't being set to a neutral state. In other words, you are in a situation where you have Ability.TurnRight set, and then you're switching based on m_facing, which sets a case that gets triggered again immediately. What I would do, immediately after your switch statement, reset the variable that contains Ability.TurnRight.
|
|
|
|
|
Thanks for the response! Ok, that makes sense, but I thought the "break;" would prevent the command from continuing? (Still digging through the files)
And for more clarity I'm using a parent "MainChar" and child of "PacMan". I set up the array of "moves" (like exampled in my previous post) in the "MainChar" and I'm trying to issue the commands in "PacMan" so I can make him turn and move forward to collect all the pips before dying.
|
|
|
|
|
No, break is a keyword that is required in a switch statement to say that a particular piece of code has "finished". It doesn't reset any variables. Let me demonstrate with a simple example:
bool finished;
int i = 0;
while (!finished)
{
switch (i)
{
case 0:
Console.WriteLine("Loopy");
break;
case 1:
finished = true;
break;
}
} As you can see, this will never finish because i is never set to 1.
|
|
|
|
|
Thanks for the example. I'm starting to see what you mean by the "looping". To apply that to another ability, with the following example "Forward" PacMan will continue moving forward as long as the space in front of him is empty because the only check for success is that the space in "front" of him is empty, as determined by "LookForward"?
case Ability.Forward:
GameObject.Type objectTypeInDesiredPosition = LookForward();
if (objectTypeInDesiredPosition == GameObject.Type.Empty)
{
SetPosition(GetFowardPosition());
}
break;
|
|
|
|
|
The issue of "involuntary recursion" is sometimes something you can't avoid having to handle: for example, events of certain WinForm Controls will be called when a Form is initialized, which may trigger side-effects that need to be stopped.
If you can't easily re-design your flow-of-control to eliminate this problem, then a "fix" is to:
0. first test to see if setting 'm_facing is triggering the recursion: create a boolean variable in Form scope:
private bool dontRecurse = false;
private void MyMethod(...)
{
if(dontRecurse) return;
dontRecurse = true;
switch(...)
{
case Ability.TurnRight:
switch (m_facing)
{
case World.Direction.North:
m_facing = World.Direction.East;
break;
case World.Direction.South:
m_facing = World.Direction.West;
break;
case World.Direction.East:
m_facing = World.Direction.South;
break;
case World.Direction.West:
m_facing = World.Direction.North;
break;
}
}
dontRecurse = false;
} Observe if this fixes the problem: if it does not then:
1. using the debugger: set a break-point in the code where you the first change occurs: in your case that would in one of the Switch/Case clauses before 'm_facing is set.
2. run your code making sure you trigger a case where you hit the break-point, and then single-step (F11) from the break-point to isolate what is triggering the re-execution of the the case statement.
When you have a clear understanding of what triggers the recursion, then re-design or use boolean flag as necessary.
«A man will be imprisoned in a room with a door that's unlocked and opens inwards ... as long as it does not occur to him to pull rather than push» Wittgenstein
|
|
|
|
|
Thanks for the tips! I'll try to use this. ^^
|
|
|
|
|
I have a base64 input("NjU0MDgA=") in a XML file which I am trying to convert to hexadecimal with the following code in C#:
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes = Encoding.ASCII.GetBytes("NjU0MDgA=");
string hex = BitConverter.ToString(bytes);
hex.Replace("-", String.Empty);
The 'hex' output is in the following format:
4D5459334D5445344D4467413D
However, required output should be in the format:
#44ff11 (example)
|
|
|
|
|