🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

4回答

2538閲覧

forとifの組み合わせ

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

1クリップ

投稿2019/10/20 03:53

javaで、for文とif文を組み合わせて
1 2 4 5 7 8 10 11 13
と出力されるプログラムの記述方法を教えていただきたいです

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

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

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

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

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

jimbe

2019/10/20 04:17

for と if がなぜ必要なのかを記載頂く必要があるかと思います. 結果だけを見れば for も if も必要なく System.out.println("1 2 4 5 7 8 10 11 13"); で済んでしまいます.
hermit19901127

2019/10/20 04:26

それです。 『「1 2 4 5 7 8 10 11 13」を効率よく出力する』であれば答えられますが 「あなたがなぜ、それに困っているか」が分からないので、こちらとしても 「1 2 4 5 7 8 10 11 13」の範囲で効率よく出力するか 「1 2 4 5 7 8 10 11 13」以外の数値が増えた対応も考えるか。 答えを提供する側としても、ここが問題となっている次第だと思います
hermit19901127

2019/10/20 04:27

jimbeさんの言う通り、「1 2 4 5 7 8 10 11 13」だけ表示したいのであれば それが最適解ですが。 そんな些細な問題ではないと推測します…
guest

回答4

0

まずは数列の規則を見極めるところから始めなければなりません。

数多くの候補から慎重に検討した結果、A110118であると推測されます。決してビーティ数列だと実装が面倒そうだという理由ではありません。

Java

1for (int n = 1; n <= 9; n++) { 2 System.out.print((int)Math.floor(n * (Math.sqrt(6) + Math.sqrt(2) + 2) / 4)); 3 System.out.print(" "); 4} 5System.out.println();

すばらしいと言いたいところですが、一つ問題が発覚しました。ifを使っていません。これは致命的なミスです。そこで我々は新たな数列を探し出す事にし、A215099を見つけました。数列の定義は0からですが、それ以外は面倒そうなので1から始まるとしても問題ないでしょう。ます。

Java

1var a = new int[10]; 2a[0] = 0; 3for (int n = 1; n <= 9; n++) { 4 if (n == 1) { 5 a[n] = 1; 6 } else { 7 int k = a[n - 1]; 8 k: for (;;) { 9 k++; 10 int p = k + a[n - 2]; 11 for (int i = 2; i < p; i++) { 12 if (p % i == 0) continue k; 13 } 14 break; 15 } 16 a[n] = k; 17 } 18 System.out.print(a[n]); 19 System.out.print(" "); 20} 21System.out.println();

ちゃんとif文も使えました。forが3回、ifが2回と、これを書いている時点のどの回答者の回答よりもふんだんに使っています。**これが正解に違いありません。**ただ、素数判定の所は非常に遅いアルゴリズムになっていますので、もっと速くする方法についてはこれまた真面目にやると面倒なので今後の課題として質問者のために残しておきたいと思います。


【追記】

(空想上の)コメントで「配列を使うのは無駄では無いか?」「10番目以降を無限に(せめてintの限界までに)生成できないのはコードとして間違っている」というご指摘を受けました。

大変申し訳ありません。まったくその通りであり、配列を使う必要性は全くなく、至極無駄でございます。ですが、質問者様が退会してしまったため、私のやる気がぐーんと下がっており、コードを修正する気力が0となっております。質問者様が再度入会し、新たにこの事についてお知りになりたいと質問して下されば、答えようかと考えております。

投稿2019/10/20 05:36

編集2019/10/20 05:47
raccy

総合スコア21737

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

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

Zuishin

2019/10/20 05:39

これが正解ですね。
退会済みユーザー

退会済みユーザー

2019/10/20 05:43

おぉwこのサイトすげぇ!
hermit19901127

2019/10/20 05:43

質問主はたぶんここまで詳しい解答を求めてるようには見えませんが、、、個人的に興味があります。 学が追い付いてないので、勉学の資料にします…。(Zuisinさんわかるんですか…ちょっとぱっと見では理解出来ないです…)
Zuishin

2019/10/20 05:47 編集

えっと、正解というのは正解のことではなく正解という意味です。セイカイとか、せーかいとか SEIKAI と書いた方が伝わりやすかったかもしれません。
Zuishin

2019/10/20 05:51

正解よりもっと相応しい言葉に思い当たりました。「優勝」
hermit19901127

2019/10/20 05:51

恥ずかしながら、個人として「ぜんぜんわけわかんないwww」みたいな状態なので、この文書と参考資料を読みつつ、理解する段階です…
hermit19901127

2019/10/20 05:57

いわゆる「プログラマならわかるプログラマジョーク」みたいな印象ですね。 とはいえ、それ以上が分からず、己の無知を痛感します…。 いずれ、コレを解けるような知的なプログラマになれるように邁進したい所です…。
A-pZ

2019/10/21 05:13

間違いなく優勝
guest

0

大喜利ですよね。

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

Java

1class Wandbox 2{ 3 public static void main(String[] args) 4 { 5 var items = java.util.stream.IntStream.range(0, 5) 6 .map(i -> i * 3 + 1) 7 .flatMap(i -> java.util.stream.IntStream.range(0, 2).map(j -> j + i)) 8 .toArray(); 9 for (int i: items) { 10 if (i < 14) System.out.printf("%d ", i); 11 } 12 } 13}

出力形式が間違っていたので修正しました。

投稿2019/10/20 04:16

編集2019/10/20 04:23
Zuishin

総合スコア28669

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

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

hermit19901127

2019/10/20 04:20

おっしゃる通り、これは大喜利というか、プログラマの知識自慢になる要素しかないです 1 2 4 5 7 8 10 11 13 これだけ表示するなら ・「1 2 4 5 7 8 10 11 13」だけ表示する即席なシステムを組めばいい ・「1 2 4 5 7 8 10 11 13」以降も増えた場合のプログラムも考えないといけない これで答えが分かれるのと、述べた1番目の条件だと、さらに「実行速度」等で知恵比べに至る可能性があります。 そもそもの問題が質問主の「あなた、それで何に困ってるの?」が分からない故の次第です…
Zuishin

2019/10/20 04:24

宿題を人にやらせようと思っているだけだと思います。
hermit19901127

2019/10/20 04:32

熱意があれば、こちらも答えますが、『単に宿題で「1 2 4 5 7 8 10 11 13」を表示する』だけなら、Zuisinさんのおっしゃる通り System.out.println("1 2 4 5 7 8 10 11 13");で「結果」だけ出せとしかいいようがないですね。 ただ学生として「単位」だけ得たいなら、Zuisinさんの解答が最適解です。
Zuishin

2019/10/20 04:38 編集

いや、たぶん私の回答を提出したら怒られると思いますよ。if と for を学んでいる最中の人の回答ではないので、カンニングしたのがバレバレです。最後の一文字が微妙に設問と違いますし。
hermit19901127

2019/10/20 04:38

そもそも、授業だと「それに至るまでの過程」としてのソースを重要視されるはずで、 System.out.println("1 2 4 5 7 8 10 11 13"); とか、たしかに「出力した文字列」としては正しいけど、過程が正しくないと怒られますw ただ、実務としては、そういう、言葉はあれですが「クソ」みたいな実装をしないといけない場面が納期とかであったりしますね…(極力避けたいですが)
Kapustin

2019/10/20 04:39

コードを拝見して、なぜか巨大ロボの合体シーンを彷彿としました。笑
退会済みユーザー

退会済みユーザー

2019/10/20 05:06

あー「デザインパターン:トムブラウン」ですね。 if の使い方がひでぇw
退会済みユーザー

退会済みユーザー

2019/10/20 05:07

> hermit19901127 さん TDD 的には正かと
hermit19901127

2019/10/20 05:11

デザインパターンに「トムブラウン」があるのは初耳です…。 後学のために、参考URLを教えていただけると嬉しいです… こちらとしては 「デザインパターン トムブラウン」でGoogleで検索しました。 そでも出ない状態です…。 基本的にはデザインパターン ●●で検索すれば出るものだと思っています…。 純粋に気になるので、教えていただけないでしょうか…
hermit19901127

2019/10/20 05:14

te2jiさんを責める意図はなく、純粋にZuishinさんの記述に問題がある故の指摘だと存じます… そこに興味があるため、こちらでも検索などをしたのですが、参考資料に行き当たらず… 差支えがなければ、トムブラウンのデザインパターンの解説を詳しくしているサイト等のURLはないでしょうか… 情報が気になります…
hermit19901127

2019/10/20 05:20

>> hermit19901127 さん >TDD 的には正かと TDDとは何なのでしょうか…その初歩的な質問で申し訳ないです… 正という言葉あるので、私の発言の正しさが認められた…程度の認識です… すみません…te2jiさんの略称でわからない部分等、検索して調べる努力も致したのですが、答えに至らず… 純粋な知識欲として興味があるので、強制はしませんが答えていただけると幸いです…
退会済みユーザー

退会済みユーザー

2019/10/20 05:38

ダメェ~。人生には学んでも意味のないことがあります。放置しとくと良いです。 TDD は「テスト駆動開発」です。最初の手順として、想定される出力がなされるコードを記述するのがお作法です。こっちは掘り下げたほうが良いですw
hermit19901127

2019/10/20 05:48

>TDD は「テスト駆動開発」です。最初の手順として、想定される出力がなされるコードを記述するのがお作法です。こっちは掘り下げたほうが良いですw https://ja.wikipedia.org/wiki/テスト駆動開発 なるほど! 最初に「想定される入力」を作り、そこから作る…と言う事なのでしょうか… 無意識に自分もやってたのですが、それがTDDという名称があるのですね…勉強になります… このへん、今後の業務でも大事になりそうなので、目を通します…
guest

0

「3の倍数は出力しない」というプログラムを求められていることを前提とします。
まずfor文だけで「1〜13の数字を出力する」コードを書いてみてください。
そのあと、if文で「3の倍数の時は数字を出力しない」ように条件をつけてみてください。
記述方法については、ここの回答欄に書ききれないほど詳しく丁寧に解説しているサイトがたくさんありますので、ぜひ検索して参考にしてください。

投稿2019/10/20 04:10

Kapustin

総合スコア1186

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

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

hermit19901127

2019/10/20 04:13 編集

>「3の倍数は出力しない」 そのような解釈ですか…質問主さんの文言からは見抜けませんでした… if( hensuu % 3 == 0 ) みたいな条件式で実現できませんでしょうか… 質問主さんが、そもそも最終結果として何を求めているのかわからない故の次第です…
Kapustin

2019/10/20 04:31

> hermit19901127 何か学校の課題や入門書の問題なのかなと想定しました。おっしゃる通り、それ以外でこの数列を出力する現実的な状況が想定できなかったので。。笑 条件式も上記の考え方で実現できると思います!
guest

0

いくらでも方法はあると思いますが、端的な回答だと

java

1 2int[] pattern = new int [1 2 4 5 7 8 10 11 13];//半角スペースの間に,(カンマ)入れないとエラーになるのでそこだけ注意 3 4for(int i = 0 ; i < pattern.length ; 1++) 5{ 6 if( i != pattern [i] ) { continue ;} 7 System.out.println( pattern[i] ); 8} 9

ですが、根源的質問として、あなたは「なぜその質問をしようと思ったのでしょうか…」」
その次第です…

「1 2 4 5 7 8 10 11 13」とだけ出力したいだけなら、強引ではありますが、もっと他の解決方法等もあるのと
「1 2 4 5 7 8 10 11 13」に固執した出力が求められる状況が想定できません…

投稿2019/10/20 04:09

編集2019/10/20 04:10
hermit19901127

総合スコア368

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

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

swordone

2019/10/20 04:53

配列の初期化の方法を間違ってる。
hermit19901127

2019/10/20 04:56

それを自覚した上で、コメントに //半角スペースの間に,(カンマ)入れないとエラーになる のでそこだけ記載いたしました…(それ以外でエラーが起きたら、こちらのミスです) 今回の論点は、そもそも、「問題解決」というより「あなたは何がしたいの?」というのが論点なので、 コードのエラーレベルの問題定義以前の問題だと察しています…
hermit19901127

2019/10/20 04:59

「とりあえず動くコードが欲しい」となれば、コンパイルエラーが起きないようなコードをきちんと成形した上で提出しますが、 そもそも「主は何したいの?」が分からないので、「コンパイルエラーが起こらない」コードではなく、文言レベルの解答しか送れない。その次第です…・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問