0
for文で..................
for文をつかって、以下のようにテキストファイルに出力
するプログラムのサンプルを回答に載せてくれる人待ってます。ご教授お願います。(失礼かもしれませんが、説教のみの回答はいりません。)
*
**
***
****
*****
****
***
**
*
0
for文をつかって、以下のようにテキストファイルに出力
するプログラムのサンプルを回答に載せてくれる人待ってます。ご教授お願います。(失礼かもしれませんが、説教のみの回答はいりません。)
*
**
***
****
*****
****
***
**
*
0
前に似たような質問が出てましたよ。
ってかここにいる皆様は説教をしてるわけではなく、あくまでもアドバイスをしてるんだと思いますよ。
ま、どう受け取るかは受け手のやる気次第なんでしょうけどね。
ちなみにこの回答は説教ではなくアドバイスです。
0
FileWriter fileWriter = new FileWriter("ファイルパス");
for(boolean endFlg = false; !endFlg; ){
fileWriter.write("*\n");
fileWriter.write("**\n");
fileWriter.write("***\n");
fileWriter.write("****\n");
fileWriter.write("*****\n");
fileWriter.write("****\n");
fileWriter.write("***\n");
fileWriter.write("**\n");
fileWriter.write("*\n");
fileWriter.close();
endFlg = true;
}
ふむ、for文使ってる、ちゃんと出力されてる。
きちんと提示された条件通りですな。
これでいいでしょうか?
あ、エラー処理はしていませんのでその辺はご自身で。
あと、forループは1回しか回っていませんが、ちゃんとforを使ってありますし平気ですよね?
0
三等兵さん
私もさっきニュアンス的に似たようなものを作ってしまいましたw
私のは、for 文の中で switch を書いて case を 0 〜 8(for 文のインデックス) まで書くというもの・・・
0
>三等兵さん
サンプルありがとうございます。
すいません。質問の情報が足りなかったみたいです。
i++(インクリメント)も使うみたいです。
ご教授お願いします。
0
インクリメントを使うのでしたら、私のサンプルが良いかも・・。
ばっちり i をインクリメントして使ってますし。
では以下に私がさっき作ったサンプルを。
FileWriter fileWriter = new FileWriter("ファイルパス");
for (int i = 0; i < 9; i++) {
switch (i) {
case 0:
fileWriter.write("*\n");
break;
case 1:
fileWriter.write("**\n");
break;
case 2:
fileWriter.write("***\n");
break;
case 3:
fileWriter.write("****\n");
break;
case 4:
fileWriter.write("*****\n");
break;
case 5:
fileWriter.write("****\n");
break;
case 6:
fileWriter.write("***\n");
break;
case 7:
fileWriter.write("**\n");
break;
case 8:
fileWriter.write("*\n");
break;
}
}
条件クリア間違いなし。
0
FileWriter fileWriter = new FileWriter("ファイルパス");
for(int i = 0; i < 1; i++ ){
fileWriter.write("*\n");
fileWriter.write("**\n");
fileWriter.write("***\n");
fileWriter.write("****\n");
fileWriter.write("*****\n");
fileWriter.write("****\n");
fileWriter.write("***\n");
fileWriter.write("**\n");
fileWriter.write("*\n");
fileWriter.close();
}
インクリメント使ってみました^^
相変わらず一回しか回っていませんが問題ないですよね?
>ほげさん
switch は思いつきませんでしたw
やってることの割に、すごいコードになりそうですね。
0
と、書いてる間にほげさんのswitchのサンプルが。
素敵です。
0
三等兵さん
2度目のサンプルの i < 1 の部分を見て、仕事場なのについ噴き出しそうになっちゃいましたw
確かに条件は満たしてますよね実際のところ。
0
三等兵さん
ほげさんサンプルありがとうございます。
ほげさんのサンプルの方がかっこよさそうなので
そちらを参考にしたいと思います。
あとは、ほげさんのサンプルに以下の記述を囲めばよいのですよね。
<ファイル名:Test.java>
class Test {
public static void main(String[] args) {
【ほげさんのサンプル】
}
0
>失礼かもしれませんが、説教のみの回答はいりません。)
説教が嫌いなのはわかりますが、掲示板のルールは守りましょう。
【JAVAの道の掲示板利用ルール】
http://www.javaroad.jp/bbs/bbs_rule.htm
掲示板を利用する際の禁止事項を以下に記載します。
・ 学校の宿題などをそのまま貼り付け、「わかりません。」といった質問を行う行為
0
>失礼かもしれませんが、説教のみの回答はいりません。
「自分は馬鹿です」と言っているのと同じです。
そういう回答が嫌なのであれば、友達か先生に聞きましょう。
0
あー、「いい」サンプルがいっぱい出揃っていますねぇ。
「Javaわかんね」のスレを立てた方とは違うのかな?
この後コンパイルが通りません、的発言があるんじゃないかと推察。
2006-12-26 11:21 三等兵さんのアドバイスも参考に。
0
>とおりすがりさん
掲示板の禁止事項を読んでなかったです。
ごめんなさい。今後気をつけます。
>mioさん
>「自分は馬鹿です」と言っているのと同じです。
『説教のみの回答はいりません』が、どうして『自分は馬鹿です』と同じなのかわかりません。
べつに自分は、説教のみの回答は入らないだけあって、
「自分は馬鹿です」とは一言も言っていないし、そのような意味を含めた発言も言っていません。
>そういう回答が嫌なのであれば、友達か先生に聞きまし>ょう。
そうですね。それが一番良いですね。でも今周りにだれもいないので、この掲示板で助けてもらおうと思っています。
あまり深く言うと、バッシングされそうなのでこのぐらいにしておきます。では......
0
いやー、皆さん親切ですね〜
きみはそうやって世間を渡っていくんだろうねぇ。
>『説教のみの回答はいりません』が、どうして
では、説教好きの私から一言
説教とは
(1)教訓をたれること。また、かた苦しい話や小言を言うこと。
(2)経典や教義をわかりやすく説き、人々を教え導くこと。
(大辞林から)
つまり、きみは教訓や教義のような物を教えてもらいたくない訳だよね。
でも頭の良い人はそういった事をいっぱい聞きたがるものです、そして自分の物にするんだよ。
説教のみというのは、こういった問題を解くための鍵が含まれているのに、もったいない・・
つまり、説教を聴きたくない=バカ
そういうことです。
0
私は、「説教のみの回答はいりません」と言いました。
「説教を含んだ回答はいりません」または「説教はいりません」とは一言も言っていません。
よって、俺≠説教を聴きたくない=バカの方式になり、あなたの意見は無効とさせてもらいます。
0
自分では馬鹿じゃないと思っていても、馬鹿と思われる可能性が高いよって意味ですよ。
0
そんな言葉尻だけ取って反論してもしょうがないでしょ。
これら全てを説教(俗世間で捉えられている意味)と捉えずに、アドバイスと思って自分の成長に繋げましょうよ。
それと mio さんと tama さんも発言がちょっと過激だと思いますよ。
思っていてももそういう事はこういう場所では言わない方が良いのではないでしょうか。
火に油を注ぐ結果になることくらいは容易に想像できたはずです。
0
http://www.tt.rim.or.jp/~rudyard/torii009.html
ご教授お願いします、と言った割には答えだけが欲しいみたいだね。
自分で自分を馬鹿ではないと思っているようですが、回答してくれた方より知識がないことは認めましょう。
なのにその態度はなんでしょうか?
もっとマナー(古い言葉?でネチケット)を身に着けましょう。
きっとあなたの役に立ちますよ。
import java.io.*;
public class Hoge {
public static void main(String[] args) throws IOException {
String[] strs = {"*", "**", "***", "****", "*****", "****", "***", "**", "*"};
BufferedWriter out = new BufferedWriter(new FileWriter("hoge.txt"));
int i = 0;
for (String str : str) {
out.write(str);
out.newLine();
i++;
}
out.close();
}
}
エラー処理はしていませんし、インクリメントの意味もありませんし、コンパイルも通していない(!)ので、その辺は自分でやってください。
0
>tama さんも発言がちょっと過激だと思いますよ。
失礼しました、若輩ぶりを露呈しましたね、以後慎みます。
0
hogeぽんさん
確かに最近はネチケットを知らない方は多いと思います。
hogeぽんさんの仰る通り、java意味不明さんはネチケットをわかってない節があります。
java意味不明さんもネットを使ってる以上、hogeぽんさんのアドバイスを無駄にせず、真摯に受け止めてネットの利用価値をどんどん高めていきましょう!!
mioさん、tamaさん
あ、調子乗った事言ってすみません・・
私も若輩者故、至らない点が多々あると思いますので、遠慮せずにどんどん御説教してくださいw
ちなみにhogeぽんさんのサンプル、私が真面目に作ったサンプル(さっきのじゃないです)と全く違う作りだったので、新鮮さを感じております。
色々な方の考えを聞けるのってとても勉強になります。
hogeぽんさん、サンプルのご提示ご苦労様です。
0
2006-12-26 14:45 に書き込んだ私の発言を一部訂正させて下さい。
私も若輩者故
↓
私こそ若輩者故
乱文失礼しました。
0
この例題、なかなか面白いですね。とまりません。
forという縛りがなければもっときれいに書けますよ。
ただ、これまでの例題を見ると本当にアレですね。
コレはコレで、そこまでしなくても・・・って例ですし。
まぁ、あくまで参考、ということで。
import java.io.*;
class TriangleFunction {
private final int max;
private int counter;
private int result;
public TriangleFunction(int max) {
this.max = max;
}
public int execute() {
// 一応インクリメントも使っております。
// デクリメントまで使ってますがw
return max < ++counter ? --result : ++result;
}
}
public class Hoge {
private static final String str = "*****";
public static void main(String[] args) throws IOException {
BufferedWriter out = new BufferedWriter(new FileWriter("hoge.txt"));
TriangleFunction f = new TriangleFunction(str.length());
for (int c = f.execute(); c != 0; c = f.execute()) {
out.write(str.substring(0, c));
out.newLine();
}
out.close();
}
}
0
>hogeぽんさん、ほげさん、tamaさん、mioさん
すいませんでした。馬鹿という言葉が出て、ついカッとなってしまいました。教えてもらう立場なのにマナーを
身につけていなく無礼な発言をしてしまい申し訳ございませんでした。ほげさんの言うとおり、みなさんの発言一つ一つをアドバイスとして受け止め、今後気をつけたいと思います。
あとhogeぽんさんのサンプルを参考にして提出します。
hogeぽんさん、ありがとうございました。
0
あー、私の例を参考にされるようですが、前者のコンパイルエラーを直すか(案の定あった)、拡張for文を普通のfor文に直すならまだしも、後者はJavaをきちんと理解しない状態で提出するのには向きません。
後者のプログラムは完全に興味本位で作ったものであり、おそらく先生が意図していたのは私の前者の例に近いものだと思います。
後者を参考にするならそこら辺のことに気をつけてくださいね。
0
hogeぽんさん
私が作ったサンプルも一応、提示しておきますね。
きれいではなく大した事ないサンプルですが・・
StringBuffer buf = new StringBuffer(64);
// row loop
for (int i = 0; i < 9; i++) {
int end = i;
if (i > 4) {
end = (i - 8) * (-1);
}
// col loop
for (int j = 0; j < end + 1; j++) {
buf.append("*");
}
buf.append("\n");
}
あとは buf を一気にファイルに出力してます。
0
先程のサンプル、row loop の中をもう少しスッキリさせたいところなのですがねぇ・・
あ、それとjava意味不明さん。
私のこのサンプルも、興味本位で作っただけなので、参考にする必要はございませんので、あしからず。
0
それともう一つ作ってた、さっきのサンプルと似てるサンプルも貼っつけときます。
// row loop
for (short i = 0; i < 9; i++) {
// col loop
for (short j = 0; j < 5; j++) {
if (i < 5) {
if (i + 1 > j) {
buf.append("*");
}
} else {
if (i < j + 5) {
buf.append("*");
}
}
}
buf.append("\n");
}
0
>ほげさん
すっきりというか、三項演算子でまとめて、さらにいじるとこんな感じでしょうか?
これくらいの三項演算子は私としてはOKなんですが、一般的にはどんなものなんでしょうねぇ。
StringBuilder buf = new StringBuilder(64);
int length = 9; // 偶数を入れると・・・
for (int i = 0; i < length; i++) {
int end = i > length/2 ? length - i : i + 1;
// col loop
for (int j = 0; j < end; j++)
buf.append("*");
buf.append("\n");
}
まぁ、方法はいくらでもあるってことですね。
0
意外にこういうのって息抜きとしていいですね^^;
ちょっとやってみました。
私はifを使いたくなかったので以下のようになりました。
一番出っ張ってる数とループカウントの差分を
計算すると、ifなしで出来ますね。
参考にしてください。
// これは一番出っ張ってるところの数
// 質問だと、5ですよね。
int max = 5;
// 表示行数「一番出っ張ってるところの数×2+1」
int cnt = max * 2 - 1;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < cnt; i ++) {
int now = i + 1;
// 差分の絶対値を計算すれば良いのでした。
int dispCnt = max - Math.abs(max - now);
for (int j = 0; j < dispCnt; j++) {
sb.append("*");
}
sb.append("\r\n");
}
System.out.println(sb.toString());
0
hogeぽんさん
サンプルの改良ありがとうございます。
参考になります!!
>これくらいの三項演算子は私としてはOKなんですが、一般的にはどんなものなんでしょうねぇ。
私は三項演算子は一切使わないようにしています。
やはり、一般的には少数派な書き方かと思いますので・・・
可読性を考えた場合、使わない方が望ましいのかなと私は思いました。
(あくまでも個人的な見解です)
0
青森さん
サンプルの改良ありがとうございます。
参考になります!!
>差分の絶対値を計算すれば良いのでした。
そうなんですよね。
絶対値を求めるメソッドが何であるかを思い出せなかった自分が恥ずかしい限りです。
0
こういうの楽しいですね。
できるだけ短く(?)
String asta = "*****";
for(int i = -4; i < 5; i++){
System.out.println(asta.substring(Math.abs(i)));
}
0
>hogeぽんさん
前者のサンプルを参考にしました。
>アドバイスくれた皆さん
コンパイルも自力で行い、エラーも解決しました。(エラーの解決は友達に聞きましたが...)javaも動かし、ファイルも作成されました。できたファイルの中身見た時、ものすごく感動しました。2日間java勉強したのですが、javaについてなんとなくですが、わかりました。これもみなさんのおかげです。ありがとうございます。
0
public class FlowSample8 {
public static void main(String[] args) {
// 上り
for (int i = 0; i < 10; i++) {
for (int j = 0; j <= i; j++) {
System.out.print("☆");
}
System.out.print("\n");
}
System.out.println("☆☆☆☆☆☆☆☆☆☆☆");
// 下り
for (int i = 0; i < 10; i++) {
for (int j = 9; j >= i; j--) {
System.out.print("☆");
}
System.out.print("\n");
}
}
}
0
public class AstariskTest{
public static void main(String[] args) throws Exception{
for(int i=0;i<10;i++){
StringBuilder sb = new StringBuilder();
for(int j=0;j<5-Math.abs(5-i); j++){
sb.append("*");
}
System.out.println(sb);
}
}
}
こんなのが欲しかったんじゃないのかな?多分。
質問から6ヶ月以上経過しているので、回答を書き込むことはできません。