【问题标题】:Problems Importing the Class Method that I Want to Use in Java导入我想在 Java 中使用的类方法时出现问题
【发布时间】:2016-05-01 15:07:32
【问题描述】:

我正在学习Java,遇到了导入另一个类的方法的问题。每当我尝试编译主程序时,都会收到此错误:“错误:包 utils 不存在”。任何帮助将不胜感激。

这里是主程序:

  // Summation of Primes


import mypackage.utils;
import java.util.*;

public class euler10 {
    public static void main(String[] args) {

    int count = 0;

    ArrayList<Integer> primes = findPrimes(2000000);
    for (int prime : primes) {
        count += prime;
    }

    System.out.println(count);
}
}

这是我想要使用的方法的课程。位于 mypackage 中,与主程序位于同一目录中。

package mypackage;

import java.util.*;

public class utils {

    public static ArrayList<Integer> findPrimes(int n) {
        boolean[] isComposite = new boolean[n+1];

        for (int i = 2; i*i <= n; i++) {
            if (!isComposite [i]) {
                for (int j = i; i*j <= n; j++) {
                    isComposite [i*j] = true;
                }
            }
        }

        ArrayList<Integer> primeList = new ArrayList<Integer>();

        int arrLength = isComposite.length;
        for(int index = 2; index < arrLength; index++) {
            if (!isComposite[index]) {
                primeList.add(new Integer(index));
            }
        }
        return primeList;
    }
}

【问题讨论】:

  • 来吧。命名约定!类名使用大写字母。

标签: java import packages


【解决方案1】:

即使您已经导入了您的类,您也应该使用该类的实例来访问它们的非静态方法或使其成为静态并通过 Class.method 访问它,或者您可以将导入设为静态,如下所示...

import static java.lang.Math.*;

然后只使用函数

double r = cos(PI * theta);

refference

【讨论】:

    【解决方案2】:

    好的,首先你必须将你的类名改为以大写字符开头,请参阅Documentation

    类名应该是名词,大小写混合 每个内部单词都大写。尽量保持你的类名简单 和描述性的。使用整个单词——避免使用首字母缩写词和缩写词 (除非缩写比长形式更广泛使用, 例如 URL 或 HTML)。

    然后将你的包添加到euler10:

    package mypackage;
    

    要访问findPrimes(),您必须使用utils.findPrimes

    【讨论】:

      【解决方案3】:

      尝试以下方法:

      1. Euler10.java & Utils.java 在 mypackage 中
      2. Euler10.java,没有明确的 utils 导入,因为它们在同一个包中
      3. 所有类名都以大写开头
      4. findPrimes 方法是使用 Utils 访问的,因为它是一个静态方法

      欧拉10.java:

      package mypackage;
      
      import java.util.*;
      
      public class Euler10 {
      public static void main(String[] args) {
      
          int count = 0;
      
          List<Integer> primes = Utils.findPrimes(2000000);
          for (int prime : primes) {
              count += prime;
          }
      
          System.out.println(count);
      }
      

      }

      Utils.java:

      package mypackage;
      
      import java.util.*;
      
      public class Utils {
      
      public static ArrayList<Integer> findPrimes(int n) {
          boolean[] isComposite = new boolean[n+1];
      
          for (int i = 2; i*i <= n; i++) {
              if (!isComposite [i]) {
                  for (int j = i; i*j <= n; j++) {
                      isComposite [i*j] = true;
                  }
              }
          }
      
          ArrayList<Integer> primeList = new ArrayList<Integer>();
      
          int arrLength = isComposite.length;
          for(int index = 2; index < arrLength; index++) {
              if (!isComposite[index]) {
                  primeList.add(new Integer(index));
              }
          }
          return primeList;
        }
      }
      

      最后,我的包布局:

      注意:我没有检查 findPrimes 函数的准确性。

      编译并运行:

      1. 导航到 mypackage 目录并编译所有 java 文件,即

        [mypackage]$ javac *.java

      2. 升级并运行 Euler10

        [mypackage]$ cd ..

        [src]$ java mypackage/Euler10

      仅供参考,我得到的输出是:1179908154

      注意:为什么我在运行java Euler10之前要上一级,这里会解释:Receiving "wrong name" NoClassDefFoundError when executing a Java program from the command-line

      【讨论】:

      • 我修复了命名约定等所有小问题。我将两个文件放在同一个文件夹(mypackage)中尝试再次编译 euler10,变量出现“找不到符号”错误实用程序出现了。
      • @Broke.College.Kid23,我相信您正在尝试通过命令行编译和运行。我用编译和运行说明编辑了我的帖子。希望对您有所帮助,谢谢。
      • 我想通了。我不得不删除所有路径环境变量,重新安装 Java,现在它运行良好。不过感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多