我有什么错误的代码? 【JAVA]

时间:2015-02-22 07:20:50

标签: java

我是Java新手,我想知道这段代码有什么问题,它给我一个错误说:

  

线程“main”中的异常java.lang.Error:未解决的编译问题:

     

对于Random

类型,方法nextInt(int)未定义      

在Random.main(Random.java:8)

     

线程“main”中的异常java.lang.Error:未解决的编译问题:       对于Random

类型,方法nextInt(int)未定义
import java.util.Random;

public class Random {
    public static void main(String[] args){
        Random rnd = new Random();
        System.out.println(rnd.nextInt(100));
    }
}

4 个答案:

答案 0 :(得分:4)

您的Random班级隐藏java.util.Random。重命名你的班级。

Random rnd = new Random();创建了一个类的实例,而不是java.util.Random,而您的类没有nextInt方法。

答案 1 :(得分:2)

当Java看到对象的声明时,引用的类取决于对象的声明方式。

  • 如果类的名称不是完全限定的,那么java将首先查看该类所在的包,然后在import语句中搜索类和包以尝试查找相应的类。
  • 如果声明中类的名称是完全限定的,那么将使用完全限定的类,即您正在告诉编译器您希望对象是哪个对象类。

在您的情况下,您有自己的名为Random的类,它正在导入java.util.Random。但是,由于类名在声明时未完全限定,因此当前包中的类Random优先,这意味着有效地忽略了文件中java.util.Random的导入。

一些选项:

  • 重命名您的课程
  • 如果要引用java.util.Random
  • ,请使用完全限定的类名

e.g。

import java.util.Random;
public class Random {

public static void main(String[] args){

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

    System.out.println(rnd.nextInt(100));

  }
}

在这种情况下,使用完全限定名称消除了您希望引用的类的歧义,并明确告诉Java使用哪个版本。

如果这是用于学习,那么具有相同名称的类可能没问题,但是,对于需要长期维护的代码,您可能需要重新考虑您的命名约定。

答案 2 :(得分:0)

我认为这会导致java.util.Random和您自己的Random类之间发生冲突。我想在你写的行Random rnd = new Random();它从你自己的Random类创建一个对象。最好将您的班级重命名为CustomizeRandom或者像这样

答案 3 :(得分:0)

作为@Eran already answered,您刚刚使用了Random类(用户定义),但您需要使用java.util.Random类。

以下是一个可以帮助您的工作示例:

import java.util.Random;
class RandomNumber {
    public static void main(String[] args) {
        Random rdm= new Random();
        int c=100;
        System.out.println("no is "+rdm.nextInt(c));
    }
}

它会生成0到100之间的数字,您还可以使用Random类的其他方法。

编辑:@vogel& @trengot感谢您编辑此答案,从下次我将用更好的正式语言回答。 (y)的