理解' void'在这种情况下输入错误?

时间:2013-04-08 08:31:18

标签: java

到目前为止我感觉如此接近!

/**
 * 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'类型在这里不允许,我研究并了解到:我使用的方法不会在需要值的地方返回值,例如右边的等号签名或参数到另一种方法。

问题是,我没有在我的代码中看到确切的位置! 此外,我有一种感觉,在我修复这个错误之后会出现更多错误,所以任何远见都会非常感激。

感谢您的时间和知识。

7 个答案:

答案 0 :(得分: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内及其返回值)。

答案 1 :(得分:5)

在TimeTaken()的打印中会发生这种情况:

System.err.println(timeTaken());

你正在尝试打印无效的东西。 println(自然地)没有超载接受无效。

答案 2 :(得分:3)

您正在timeTaken()中呼叫System.out.println()。这是不正确的,因为System.out.println()需要获得一个或多个参数,并且由于您的方法没有返回任何内容,因此您收到错误。

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

而不是:

System.out.println(timetaken());

使用:

timetaken();

答案 3 :(得分:3)

System.err.println(timeTaken());

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

timeTaken()

答案 4 :(得分:3)

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

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

让它返回一个字符串以打印到控制台,或者只是调用方法。

答案 5 :(得分:3)

您最好使用IDE在Java中进行编码。 eclipse,netbeans等。

答案 6 :(得分:3)

将方法返回类型更改为long,并在方法末尾添加return语句。因此,您不会在第System.err.println(timeTaken());行中收到错误 在您的代码中,timeTaken()方法正在向void发送System.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;

  }