我有一个
int[,] map = int[100, 100];
和
String mapString;
MapString只是包含大量的数字(除了数字没有其他字符)。
现在我想用mapString的第一个字符分配数组中的第一个值(map[0,0]),用mapString的第二个字符分配第二个值(map[0,1]),依此类推。我使用以下代码:
int currentposition = 0;
for (int x = 0; x < 100; x++)
{
for (int y = 0; y < 100; y++)
{
map[x, y] = ArrayTest.Properties
.Settings
.Default
.mapSaveSetting
.ElementAt(currentposition);
currentposition++;
}
}
现在发生的几乎是我所希望的。问题是它给每个值分配两个数字,而不是一个。我也不知道他在使用什么数字,因为它们不是我的地图保存设置中的数字,但我可以自己处理。
我真正不明白的唯一问题是,在执行这个for循环后,每个值都包含两个数字。为什么会发生呢?ElementAt(int)只返回一个字符,对吗?
对我来说,这真的是一个合乎逻辑的错误,但我找不到它。如果我只是在思维方式上犯了一个愚蠢的错误,请不要冒犯我。
编辑由于现在似乎还不清楚问题是什么,我将添加一个示例。
map[0, 0] == 42
...可能是一种输出。即使字符串以例如4245634开头,也没有意义,因为ElementAt(int)应该只返回4,而不是42,对吗?
您正在将char
值分配给int
。char
设计了一个Unicode代码点,它隐式地转换为int
,但不是以您期望的方式:它提供了代码点。
示例:
Console.WriteLine((int)'A'); // Will print 65
实际上,您正试图将表示为字符串的一位数转换为int
。使用int.为此解析
。
Console.WriteLine(int.Parse("5")); // Will print 5
另一个问题:您不应该在字符串上使用
ElementAt
,因为它将不必要地迭代整个字符串直到指定的索引,因为string
没有实现IList
您可以像这样使用索引器:
int currentposition = 0;
var setting = ArrayTest.Properties.Settings.Default.mapSaveSetting;
for (int x = 0; x < 100; x++)
{
for (int y = 0; y < 100; y++)
{
map[x, y] = int.Parse(setting[currentposition].ToString());
currentposition++;
}
}
但是将每个
char
转换为一个新的字符串
实际上是一种浪费,所以只需使用一些基本的数学来代替:
int currentposition = 0;
var setting = ArrayTest.Properties.Settings.Default.mapSaveSetting;
for (int x = 0; x < 100; x++)
{
for (int y = 0; y < 100; y++)
{
map[x, y] = setting[currentposition++] - '0';
}
}
这是因为数字的代码点是连续的。
我认为你的错误与字符的ASCII值有关。您应该知道每个字符都有一个相关的ASCII值,特别是0
的ASCII值为48
,1
的ASCII值为49
,依此类推(您可以通过检查ASCII表来检查)。
因此,要获得正确的字符值,应该从字符串中的值减去字符0的值,如下面的代码段所示。
map[x, y] = ArrayTest.Properties.Settings.Default.mapSaveSetting.ElementAt(currentposition) - '0';
您正在将char
分配给int
。由于存在从char
到int
的隐式对话,因此您将获得字符的Unicode代码(在您的示例中,字符表示数字)。要解决此问题,您应该将字符转换为int。在您的情况下,由于所有字符都是数字,您可以执行如下操作:
map[x, y] =
ArrayTest.Properties.Settings.Default.mapSaveSetting.ElementAt(currentposition) - 48;
这是因为符号[0..9]的Unicode代码是连续的,等于[48..57]。
我如何用整数或字符串填充我的GridPane?我目前正在数独GUI上工作,无法使其工作。我已经知道不可能用Java FX标签来显示它,因为它是Java.FX.scene.Control类。我需要以某种方式将数独值转移到GridPane中相应的坐标。
问题内容: 我的代码: 引用的日志文件是: 然后,需要检查脚本中的下一个条件是: 如果条件不起作用 问题答案: 必要的修复: 此后已在问题中解决。 可能必要的修复: 如注释中所述,在脚本中使用尾随空格表示将尾随空格存储在其中,这将破坏与的比较。
假设我有一个整数数组,如和一个简单的字符串,如。我如何循环通过数组和填充每一个值。假设是这样的: 输出: 到目前为止,我已经尝试了以下内容: 但是,它在print语句中给出了。解决这个问题最好的方法是什么?
老师们好: C 语言实现, 给定一个字符串长度不是16字节倍数时,请将字符串左边用0填充,使其长度为16字节的整倍数。 期望得到下面给出的结果
我有一个外国金融机构签名,我需要执行: FFI调用者需要提供一个缓冲区和该缓冲区的大小。Rust将向该缓冲区中填充一个字符串,最大值为,如果成功,则返回。FFI调用方应将字符串解释为ASCII。 鉴于我有一个
rank ▲ ✰ vote url 77 340 83 533 url 给字符串填充0 有什么方法可以给字符串左边填充0,这样就可以有一个特定长度. 字符串: >>> n = '4' >>> print n.zfill(3) >>> '004' 对于数字: >>> n = 4 >>> print '%03d' % n >>> 004 >>> print format(4, '03') # pyt