2014-01-20 1 views
1

Привет, я действительно новичок в Java, и я просто хотел узнать, почему моя программа не компилируется. Всякий раз, когда я компилятор программы я получаю сообщение об ошибке из:Очень простой генератор случайных чисел Компиляция Проблема

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method nextInt(int) is undefined for the type Random 

    at Random.main(Random.java:11) 

Любой вход на мой вопрос будет весьма признателен.

import java.util.Random; 

class Random { 
    public static void main(String[] args) 
    { 
     Random dice = new Random(); 
     int number=0; 

     for(int counter=1; counter<=10; counter++) 
     { 
      number = dice.nextInt(6); 
      System.out.println(number); 
     } 
    } 

} 
+0

Если кто-то хочет добавить более подробное объяснение [здесь] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.4.1) является ссылкой на Java Спецификация теневого копирования (см. Пример последнего кода в этом параграфе о типе тени). – Pshemo

+0

@ user3183586 Не забудьте [принять ответ] (http://meta.stackexchange.com/a/65088/155831), если вы нашли одно полезное – Reimeus

ответ

17

Вы прячут Random класс вы импортируете из java.util.Random, называя свой класс Random. Назовите это чем-то другим.

class RandomTest { 
    ... 
} 

Примечание: Не забудьте переименовать имя файла тоже с соответствующим именем (RandomTest.java в приведенном выше примере).

+0

Хорошо, что имеет смысл благодаря – user3183586

7

У вас есть класс под названием Random, но вы также пытаетесь использовать класс API, также называемый Random. Когда вы вызываете dice.nextInt(6), Java вызывает функцию nextInt на вашем классе, а не на методе API. Для того, чтобы исправить, изменить код следующим образом:

import java.util.Random; 

class AnythingButRandom { 
    public static void main(String[] args) 
    { 
     Random dice = new Random(); 
     int number=0; 

     for(int counter=1; counter<=10; counter++) 
     { 
      number = dice.nextInt(6); 
      System.out.println(number); 
     } 
    } 

} 

(переименовать Random.java в AnythingButRandom.java)

7

Ты прячешься свой импорт, вы можете переименовать класс; или вы можете использовать полное имя пакета

java.util.Random dice = new java.util.Random(); // <-- like so 
+0

+1 для повторной повторной отправки других ответов – csmckelvey

2

Когда вы создаете случайные кости объекта, это не создает java.util.Random объекта, он создает объект собственного класса Random. Метод nextInt вызывается на объект вашего класса, и поскольку он не существует, вы получаете ошибку. Назовите свой класс «НИЧЕГО», кроме «Случайного», или любого другого вашего импорта. Не забудьте также переименовать свой файл, с тем же самым новым именем.

+0

Мне просто интересно, как вы добавили что-то новое, что еще не было предоставлено другими ответами? – csmckelvey

+0

Не особенно, но я уже начал печатать до того, как остальная часть ответов была опубликована ... –

+0

Ну, это правильно. – csmckelvey

0

При инициализации случайный объект с

Random dice = new Random(); 

это на самом деле создает объект вашего класса Random не из java.util.Random.

Если вы действительно хотите, чтобы ваш класс будет называться Random затем использовать

java.util.Random dice = new java.util.Random(); 

Но это просто некрасиво. Я предлагаю вам найти другое имя для своего класса.