質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1063閲覧

Javaのスレッドによる実行時間の測定

o2ka_cz

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/05/19 15:03

JavaでCollatz conjectureの実装

https://en.wikipedia.org/wiki/Collatz_conjecture
の実装をしていて、コマンドラインでargs0,args1が与えられます。
複数のスレッドによる作業で実行時間が小さくなることを確認したいです。
メソッドcheckがCollatz conjectureの計算部分です。

##エラー部分
CheckCollatzMT.java:62: error: Nthreads is not abstract and does not override abstract method run() in Runnable
class Nthreads implements Runnable {
^
CheckCollatzMT.java:64: error: cannot find symbol
boolean v = CheckCollatz.check(new BigInteger(args[0]));
^
symbol: variable args
location: class Nthreads
###ソースコード```java
import java.math.BigInteger;
import java.util.Date;
import java.io.*;

public class CheckCollatzMT {

protected static BigInteger two = new BigInteger("2");
protected static BigInteger three = new BigInteger("3");
protected static boolean v;

public static boolean check(BigInteger n) {
//System.out.println(n);
if(n.equals(java.math.BigInteger.ONE)){ //n==1
return true;
}
else if(n.mod(two).equals(java.math.BigInteger.ZERO)){
n = n.divide(two);
return check(n);
}
else{
n = n.multiply(three).add(java.math.BigInteger.ONE);
return check(n);
}
}

public static void main(String[] args) {
if (args.length != 2) {
System.out.println("Usage:");
System.out.println("java CheckCollatzMT n num_threads");
System.out.println("where positive integers i: 1<= i <= n will be checked");
System.out.println("and num_threads is the number of threads to use");
System.exit(1);
}

long start_time = new Date().getTime(); if(args[1] == "1"){ boolean v = CheckCollatz.check(new BigInteger(args[0])); } else { v = CheckCollatz.check(new BigInteger(args[0])); Nthreads sample = new Nthreads(); Thread thread = new Thread(sample); for(int i=0; i<Integer.valueOf(args[1]); i++){ thread.start(); } } long end_time = new Date().getTime(); System.out.println("Ellapsed time: " + (end_time-start_time) + "ms"); if(v){ System.out.println("The conjecture seems valid up to n="+args[0]); } else { System.out.println("The conjecture is not valid"); }

}

}

class Nthreads implements Runnable {
public void run(BigInteger n) {
boolean v = CheckCollatz.check(new BigInteger(args[0]));
}
}

####試したこと Nthreadsクラスをインナークラスにしたりした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2019/05/19 16:27

コンパイルエラーが出たときのソースそのものを提示してくださいね。今提示しているコード内容だとクラス名がCheckCollatzMTになっていたりCheckCollatzになっていたりとばらばらです。 またコードのマークダウン(バッククォート3つ)は以下のように必ず行頭から書かないといけません。 ```java import x.y.z; ... ``` 本質問を編集してマークダウン周辺の行を直してみてください。そうしていただけると閲覧者の皆さんがコードを見やすくなります。そうでないとまともなソースコードに見えません。
jimbe

2019/05/20 01:44

考えられたコードには見えませんので, 他のエラーはこれから...というトコロでしょうか.
guest

回答1

0

ベストアンサー

インターフェースの使い方をご理解頂いていますでしょうか.
Runnable の run には引数はありません.

投稿2019/05/20 01:34

jimbe

総合スコア12545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問