[解決済み] 配列をループして相対誤差を計算する
質問
私のプログラムは、配列{-5, -4, -3, -2, -1, -1/2, -1/3, -1/4, 0, 1/4, 1/3, 1/2, 1, 2, 3, 4, 5}から抽出して、ユーザーが入力した数の相対誤差を計算するために4つの入れ子ループしながら実行しようとしています。以下は、この課題の抜粋です。
ここで、a、b、c、dの各々は17個の数{-5, -4, -3, -2, -1, -1/2, -1/3, -1/4, 0, 1/4, 1/3, 1/2, 1, 2, 3, 4, 5}のうちの1つである。チャーミング理論("charming theory")は、あなたの4つの個人的な数字を使ったde Jager式で、相対誤差1%の範囲でμを近似できると主張している。例えば、地球から月までの平均距離をマイルで近似すると、μ = 238,900となる。また、あなたがOSUのスポーツファンであり、OSUの最後の全米選手権シーズンの勝利数(14、大学チームの年間勝利数記録)、オハイオスタジアムの座席数(102,329)、ジェシー・オーエンスがベルリンで4つの金メダルを取った年(1936)、あなたが高校時代にフィールドホッケーをしていたときのジャージ番号(13)があなたの個人番号であるとします。すると、14-5102329119361/2134の値は約239,103となり、μの約0.08%以内となる。
あなたの仕事は、近似すべき定数μが何かをユーザに尋ね、4つの個人数w、x、y、zを順番に尋ね、de Jagerの式をμに限りなく近づける指数a、b、c、dの値、waxbyczdの式の値、近似値の100分の1以下の相対誤差を計算して報告するJavaプログラムを作ることです. "。
下のコードは、今のところ私が持っているものです。このままでは動作しないことは分かっていますが、少なくとも正しい方向に進んでいることを願っています。ただ、これからどうすればいいのか、ネストしたループをどう修正すればいいのか、よくわかりません。どのように動作させるべきか本当に悩んでいるので、どんな助けでも非常にありがたいです。また、このようなネストされたループにはforループが適していると思いますが、forを使用する前にwhileループを使用する必要があることも理解しています。
import components.simplereader.SimpleReader;
import components.simplereader.SimpleReader1L;
import components.simplewriter.SimpleWriter;
import components.simplewriter.SimpleWriter1L;
public final class ABCDGuesser1 {
private ABCDGuesser1() {
}
public static void main(String[] args) {
SimpleReader in = new SimpleReader1L();
SimpleWriter out = new SimpleWriter1L();
out.print("Enter a positive real-valued universal physical or mathematical constant: ");
double mu = in.nextDouble();
out.print("Enter four postitive numbers not equal to 1: ");
double w = in.nextDouble();
double x = in.nextDouble();
double y = in.nextDouble();
double z = in.nextDouble();
int[] charm = { -5, -4, -3, -2, -1, -1 / 2, -1 / 3, -1 / 4, 0, 1 / 4,
1 / 3, 1 / 2, 1, 2, 3, 4, 5 };
int a = 0;
int i = 0;
while (i < charm.length) {
a = charm[i];
double max1 = (Math.pow(w, a));
i++;
int b = 0;
int j = 0;
while (j < charm.length) {
b = charm[j];
double max2 = (Math.pow(x, b));
j++;
int c = 0;
int k = 0;
while (k < charm.length) {
c = charm[k];
double max3 = (Math.pow(y, c));
k++;
int d = 0;
int n = 0;
while (n < charm.length) {
d = charm[n];
double max4 = (Math.pow(z, d));
n++;
}
out.print(max1);
}
}
}
in.close();
out.close();
}
}
解決方法は?
-
Invexityさんがおっしゃるように、int[] チャームではなく、double[] チャームです。
-
ループしている間、bestEstimate を追跡する。
ということで、あなたのコードは次のようになります。
package area51;
import java.io.PrintStream;
public final class ABCDGuesser1 {
private ABCDGuesser1() {
}
public static void main(String[] args) {
PrintStream out = System.out;
//out.print("Enter a positive real-valued universal physical or mathematical constant: ");
double mu = 2.567;
//out.print("Enter four postitive numbers not equal to 1: ");
double w = 123.4;
double x = 2.567;
double y = 8.9;
double z = 12.6;
double[] charm = { -5, -4, -3, -2, -1, -1 / 2, -1 / 3, -1 / 4, 0, 1 / 4, 1 / 3, 1 / 2, 1, 2, 3, 4, 5 };
double bestEstimate = 0;
String bestIndexes = "";
for (int i = 0; i < charm.length; i++) {
double max1 = (Math.pow(w, charm[i]));
for (int j = 0; j < charm.length; j++) {
double max2 = (Math.pow(x, charm[j]));
for (int k = 0; k < charm.length; k++) {
double max3 = (Math.pow(y, charm[k]));
for (int n = 0; n < charm.length; n++) {
double max4 = (Math.pow(z, charm[n]));
double currentEstimate = max1 * max2 * max3 * max4;
if (Math.abs(mu - currentEstimate) < Math.abs(mu - bestEstimate)) {
bestEstimate = currentEstimate;
bestIndexes = ""+i+","+j+","+k+","+n;
}
}
//out.print(max1);
}
}
}
out.println("Best Estimate = " + bestEstimate);
out.println("Best Indexes = " + bestIndexes);
}
}
関連
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】Javaの".class期待値"
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み】ソースルート外のJavaファイル intelliJ