0

我感觉如此接近却又如此遥远!

/**
 * A program that accepts and int input through 2 command line arguments then,
 * calculates and prints  all the prime numbers up to that integer
 */

public class Primes {


   /**
   * Main method takes in 2 command line arguments  and calls
    * necessary algorithm
    * 
    * @param args command line arguments
    */
  public static void main(String[]args) {

  int a = Integer.parseInt(args[0]);
  int n = Integer.parseInt(args[1]);

  for(;args.length < 2;) {

     if(a == 1){
        System.out.println(algorithmOne(n));
        /* }
           else if(a == 2) {
           //reference to method
           }
           else{ //reference to method
           }*/
     }


     System.err.println(timeTaken());
  }
 }


  /**Algorithm 1 method
   *
   *
   */
  public static boolean algorithmOne(int n) {

     for(int m = 2; m < n; m++) {
        if(n%i == 0)
           return false;
     }
     return true;
  }




  /**
   * Method works out time taken to perform an algorithm
   *
   * 
   */
  public static void timeTaken() {

     long startTime = System.currentTimeMillis();
     long time = 0;

     for(int i = 0; i < 1000; i++) {
        time += i;
     }

     long endTime = System.currentTimeMillis();
     System.out.println(endTime - startTime); //prints time taken
  }
}

这是我到目前为止所写的。

我得到的错误是 'void' type not allowed here,我研究并了解到:我使用的方法在需要值的地方不返回值,例如等号的右侧或参数到另一个方法。

问题是,我没有看到它在我的代码中的确切应用!另外,我感觉在我修复这个错误之后会弹出更多错误,所以任何远见都将不胜感激。

感谢您的时间和知识。

4

7 回答 7

9

你打电话:

 System.err.println(timeTaken());

什么时候:

public static void timeTaken() {

那么你希望打印什么?timeTaken不返回任何值。

你可以做的是返回一个值timeTaken

  public static long timeTaken() {

     long startTime = System.currentTimeMillis();
     long time = 0;

     for(int i = 0; i < 1000; i++) {
        time += i;
     }

     long endTime = System.currentTimeMillis();
     long diff = endTime - startTime;
     System.out.println(diff ); //prints time taken
     return diff;
  }

但请注意,您会打印两次该值(内部timeTaken及其返回值)。

于 2013-04-08T08:32:59.243 回答
5

这发生在 TimeTaken() 的打印中:

System.err.println(timeTaken());

您正在尝试打印无效的内容。println(自然)没有接受 void 的重载。

于 2013-04-08T08:33:04.433 回答
3

你在timeTaken()打电话System.out.println()。这是不正确的,因为System.out.println()需要获取一个或更多参数,并且由于您的方法不返回任何内容,因此您收到错误消息。

你只需要打电话timeTaken()(不带System.out.println())。它将打印您正在计算 insde 的差异,因为您已经在方法中打印了它:

代替:

System.out.println(timetaken());

采用:

timetaken();
于 2013-04-08T08:34:02.673 回答
3
System.err.println(timeTaken());

您一定会在这里遇到错误:您正在调用System.err.println(timeTaken());并且您的方法没有返回任何内容,即void. 所以你的方法返回类型必须在那里。或者您以这种方式调用该方法。

timeTaken()
于 2013-04-08T08:34:09.063 回答
3

您的方法 timeTaken() 不返回值,但您尝试在该行中使用返回值:

System.err.println(""+timeTaken());

要么让它返回一个字符串以打印到控制台,要么只调用该方法。

于 2013-04-08T08:35:08.813 回答
3

您最好使用 IDE 用 Ja​​va 编写代码。日食,netbeans等

于 2013-04-08T08:36:33.600 回答
3

将您的方法返回类型更改为并在方法末尾long添加语句。return所以你不会System.err.println(timeTaken());
在你的代码中得到错误,timeTaken()方法正在向 发送voidSystem.err.println(..),而在 JAVA 中没有这样的规范/设计可以发送void到任何方法参数。这就是为什么它在行抛出编译器错误System.err.println(timeTaken());

/**
   * Method works out time taken to perform an algorithm
   *
   * 
   */
  public static long timeTaken() {

     long startTime = System.currentTimeMillis();
     long time = 0;

     for(int i = 0; i < 1000; i++) {
        time += i;
     }

     long endTime = System.currentTimeMillis();
     long totalTime = endTime - startTime;
     System.out.println(totalTime); //prints time taken
     return totalTime;

  }
于 2013-04-08T08:42:10.517 回答