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' タイプです。これを調査して学んだこと: 等号の右側やパラメータを別のメソッドに渡します。

問題は、それが私のコードのどこに当てはまるか正確にはわかりません! また、これを修正した後、さらにエラーが発生する気がするので、先見の明をいただければ幸いです。

お時間と知識をありがとうございました。

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;
  }

ただし、値を 2 回出力することに注意してください (内部timeTakenとその戻り値の両方)。

于 2013-04-08T08:32:59.243 に答える
5

これは、TimeTaken() の出力で発生します。

System.err.println(timeTaken());

無効なものを印刷しようとしています。println(当然)noeにはvoidを受け入れるオーバーロードはありません。

于 2013-04-08T08:33:04.433 に答える
3

メソッド timeTaken() は値を返しませんが、次の行で戻り値を使用しようとします。

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

コンソールに出力する文字列を返すか、メソッドを呼び出すだけです。

于 2013-04-08T08:35:08.813 に答える
3

メソッドの戻り値の型を に変更し、メソッドの最後にステートメントをlong追加します。 In your code, method is sent value to the , and in JAVA there is no such specification/design to send to any method parameter.returnという行でエラーが発生することはありません。そのため、行にコンパイラエラーがスローされていますSystem.err.println(timeTaken());
timeTaken()voidSystem.err.println(..)voidSystem.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 に答える
3

に電話timeTaken()していSystem.out.println()ます。System.out.println()1つ以上の引数を取得する必要があり、メソッドが何も返さないため、エラーが発生しているため、正しくありません。

timeTaken()(なしで)呼び出すだけですSystem.out.println()。メソッド内ですでに印刷しているため、計算中の差が印刷されます。

それ以外の:

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

IDE を使用して Java でコーディングすることをお勧めします。日食、ネットビーンズなど。

于 2013-04-08T08:36:33.600 に答える