Мне нужен файл .txt
, содержащий много случайных целых и двойных чисел - по одному на строку.Я придумал следующий код:
StringBuilder info = new StringBuilder();
for(int i = 0; i < 10000; i++) {
int id = (int)(Math.random() * 1000);
double weight = Math.random() * 100;
info.append(id)
.append(" ")
.append(weight)
.append("\n");
}
Files.write(Paths.get("something.txt"), info.toString().getBytes());
И он работал как положено.Однако, когда я попытался «обрезать» код до следующего:
StringBuilder info = new StringBuilder();
for(int i = 0; i < 10000; i++) {
info.append((int)(Math.random() * 1000))
.append(" ")
.append(Math.random() * 100)
.append("\n");
}
Files.write(Paths.get("something.txt"), info.toString().getBytes());
, я получил исключение:
java.lang.ClassFormatError: Усеченный файл класса в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoader.defineClass (ClassLoader.java:763) в java.security.SecureClassLoader.defineClass (SecureClassLoader.java:142) в java.net.URLlassLoader (ClassLoaderLoader)Java: 467) на java.net.URLClassLoader.access $ 100 (URLClassLoader.java:73) на java.net.URLClassLoader $ 1.run (URLClassLoader.java:368) на java.net.URLClassLoader $ 1.run (URLClassLoader.java:362) в java.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader.java:361) в java.lang.ClassLoader.loadClass (ClassLoader.java:424) в sun.misc.Launcher$ AppClassLoader.loadClass (Launcher.java:338) в java.lang.ClassLoader.loadClass (ClassLoader.java:357) в sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)
A 1012 * Ошибка: 1012 * A 1012JNI ошибкаили произошла, пожалуйста, проверьте вашу установку и попробуйте еще раз Исключение в теме "main"
Впервые я сталкиваюсь с такой проблемой.Я попытался немного поиграть с кодом и понял, что проблема воспроизводится , если имеется более одного вызова на Math.random()
за append
вложенность .
Я также пробовал с этимдругие методы, такие как обычный старый:
int foo() {
return 42;
}
вместо Math.random()
вызовов.Он скомпилирован и успешно выполнен.
Что такое Math.random()
, что он терпит неудачу здесь?Существуют ли другие методы, которые небезопасно использовать подобным образом?Какой официальный термин описывает это поведение?Является ли это общим различием между методами - могут ли они быть вызваны таким образом?Что именно происходит здесь и как описание исключения связано с этим?
РЕДАКТИРОВАТЬ: Возможно, это просто ошибка IDE / JDK / Configuration, но я не уверен в этом.Я работаю с этим кодом в IDE IntelliJ IDEA Ultimate Edition версии 2018.1.4.0 в паре с jdk1.8.0_161.