blockquote>//have to add +1 so I don't get 0
Нет, действительно нет.
В Java массивы основаны на 0. Значение массива из 11 элементов имеет индексы
0
..10
.
Random.nextInt(n)
возвращает значение между0
иn-1
.Поэтому выражение
((die1.nextInt(6)+1)+(die2.nextInt(6)+1))
будет между2
..12
.Либо увеличьте размер массива до 13, чтобы подгонять
12
(первые 2 элемента останутся неиспользованными), либо просто удалите+1
's:Random die1 = new Random(), die2 = new Random(); int [] counters = new int [11]; for (int i = 0; i <1001; i++){ ++counters[die1.nextInt(6)+die2.nextInt(6)]; }
Также вы можете' t распечатать массив с помощью print (). Возможное решение состоит в том, чтобы печатать каждый элемент отдельно:
for (int i = 0; i < counters.length; ++i) { System.out.print((i+1) + ":" + counters[i] + " "); } System.out.println();
Вся вышеупомянутая работа хорошо, если необходимо заменить только раздел AppSettings.
В случае, если необходимо работать с различными файлами конфигурации (все разделы), Вы могли бы хотеть рассмотреть запускающееся заявление с помощью хоста, который создает домен приложения для главного приложения и устанавливает другой файл конфигурации в зависимости от параметров, в которых Вы передали.
Вот код, который работал на меня:
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = "file://" + System.Environment.CurrentDirectory;
setup.DisallowBindingRedirects = true;
setup.DisallowCodeDownload = true;
if (args.Length != 0 && args[0].Equals("-test"))
{
setup.ConfigurationFile = "PATH_TO_YOUR_TEST_CONFIG_FILE";
}
else {
setup.ConfigurationFile = "PATH_TO_YOUR_LIVE_CONFIG_FILE";
}
AppDomain domain = AppDomain.CreateDomain("FRIENDLY_NAME", null, setup);
domain.ExecuteAssembly("YourMainApp.exe");
Код из MSDN
static void DisplayMappedExeConfigurationFileSections()
{
// Get the application configuration file path.
string exeFilePath = System.IO.Path.Combine(
Environment.CurrentDirectory, "ConfigurationManager.exe.config");
// HERE !!!
// Map to the application configuration file.
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
configFile.ExeConfigFilename = exeFilePath;
Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(configFile,
ConfigurationUserLevel.None);
// Display the configuration file sections.
ConfigurationSectionCollection sections = config.Sections;
Console.WriteLine();
Console.WriteLine("Sections in machine.config:");
// Loop to get the sections machine.config.
foreach (ConfigurationSection section in sections)
{
string name = section.SectionInformation.Name;
Console.WriteLine("Name: {0}", name);
}
}
Полученный от того, Как использовать Конфигурацию. GetSection () и ConfigurationManager. OpenMappedExeConfiguration ()
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = @"C:\Inetpub\Test\Config\Dev.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");
string ConfigVersion = section.Settings["ConfigVersion"].Value;
Да Вы должны будете использовать ExeConfigurationFileMap