NetBeans использует запятую по умолчанию. Почему? - PullRequest
1 голос
/ 18 октября 2019

Привет, парни и девушки. Итак, Netbeans (как и большинство IDE) используют точки (.) Для организации десятичных разрядов, верно? Я не знаю почему, но моя IDE начала использовать запятую (,) для организации десятичных разрядов ... даже в выводах, отображаемых в консоли, используются запятые. Как я могу изменить его обратно на настройки по умолчанию и снова начать использовать точку в десятичных разрядах?

PS: когда я пытаюсь ввести число с использованием точки и десятичных разрядов (например, 4.5) я получаю это сообщение об ошибке:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
    at EstruturasDeControle.If.main(If.java:16)
Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:404)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine(ExecMojo.java:764)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine(ExecMojo.java:711)
    at org.codehaus.mojo.exec.ExecMojo.execute(ExecMojo.java:289)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

1 Ответ

0 голосов
/ 22 октября 2019

Сканирующий вход, который ожидает запятую, а не точку в качестве разделителя для десятичных значений (или наоборот), напрямую связан с используемым Locale.

Существует три способа указания Locale для решения вашей проблемы:

  1. Вы можете указать локаль, которая будет использоваться по умолчанию в качестве параметра при запуске NetBeans:

    --locale <language[:country[:variant]]>

    Например: --locale en:US для американского английского и --locale fr:FR для французского.

    Этот параметр будет применяться только к текущему сеансу NetBeans.

  2. Вы можете навсегда установить язык по умолчанию, используемый NetBeans, указав его в файле и т. Д. /netbeans.conf в каталоге установки NetBeans:

  3. Вы можете динамически указать Locale, который будет использоваться на уровне приложения в коде. Например, в вашем случае вы можете установить локаль, используемую Scanner вашего приложения, вызвав useLocale().

Код вашего кода может выглядеть следующим образом:

Scanner scanner = new Scanner(System.in);
scanner.useLocale(Locale.US); // US locale, so period is expected for numeric input.
...
scanner.useLocale(Locale.FR); // France locale, so comma is expected for numeric input.

Все три подхода могут решить вашу проблему, и вы можете использовать любой или все из них. Ваши конкретные потребности определяют, какие из них будут использоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...