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

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

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

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

Q&A

解決済

3回答

1727閲覧

0,1,2,3,と文字を連結させたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2021/09/30 06:10

編集2021/09/30 08:10

修正させていただきました。

問題分を追加させていただきます。
0から99までの整数をカンマで連結した以下のような文字列sを生成するコードを作成。
0,1,2,3,...98,99,

また、完成した文字列sをカンマで分割し、String配列cに格納する。

3つのパターンを書き起こせ
という課題が出されました。

StringBuilderを使ったパターン
concatを使ったパターン
は分かったですが、残り1つのパターンが分からず下記の状態で悩んでおります。
このままだと、
1,
2,
3,
となってしまう。その原因は?
なぜ、文字が繋がらないのか?と聞かれ
お応えできませんでした。
今あってるのは、","とfor文のみと言われました。

Java

1 2public class HelloWorld{ 3public static void main(String args[]){ 4 5 for (int a = 0; a < 100; a++) { 6     String s = a + ","; 7     } 8} 9} 10

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

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

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

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

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

K_3578

2021/09/30 06:16 編集

何がいけないのでしょうか。と言われてもエラーが出ているのか、それとも違う結果が表示されているのか こちらにはわからないので追記してください。 因みにこちらではクラス名だけこちらの環境に変更して実行してみましたが 0,1,2,3,4,...98,99, という結果になっていました。これが意図した動作なら提示されていない部分に問題があります
退会済みユーザー

退会済みユーザー

2021/09/30 06:15

失礼しました。 現在、 1, 2, 3, と分かれて出ております。
K_3578

2021/09/30 06:24 編集

あぁ成程、同じ行に0,1,2,3,・・・ という風に出したいという事ですね。 既にm.ts10806さんが回答されているので私は回答を控えます
m.ts10806

2021/09/30 06:17

>ド初心者です。 初心者アイコンがありますし、書かなくて良いです。 あと、コードはマークダウンのcodeにてご提示ください
m.ts10806

2021/09/30 06:20

質問は編集できるので 「どうしたいがどうなる」ときちんと書いてください。
退会済みユーザー

退会済みユーザー

2021/09/30 07:23

お二人とも、ご丁寧にありがとうございます。とても助かりました。
m.ts10806

2021/09/30 07:51

ついでに タイトルの↓も消しておいてもらえたらと。 >ド初心者です。
dodox86

2021/09/30 07:52

3つのケースを考えることと、質問編集前のコード、1つひとつの要素の出力の後に改行が入ってしまうのは別の話のはずなのですが、ちょっと説明が分かりづらいようです。ひとつひとつ片付けてはいかがでしょう。
dodox86

2021/09/30 07:58

課題自体が恐らく「どうしてこういうコードになったのか」説明できるほどの理解とプログラマーの意図も問うものでしょうから、それも本質問の回答に求めるとなるとかなり難しいのでは。ある意味、丸投げになってしまいます。
BeatStar

2021/09/30 08:34

この質問の本題はなんでしょうか。 1. 改行せずに一気に表示したい 2. もう一つのパターンが何か知りたい(実装は自分で考えられる) 3. そもそも何をすべきかさえわからない 4. その他 どれでしょうか。 もし4ならその内容も書いてください。
退会済みユーザー

退会済みユーザー

2021/09/30 09:30 編集

失礼いたしました。 String s = a + “,”;の部分を 修正して、改行せずに一気に表示したいと考えております。 言葉足らずで申し訳ございません。
m.ts10806

2021/09/30 09:29

>改行せずに一気に表示したい 既に投稿されている回答2件で対応可能です。
dodox86

2021/09/30 09:30

> String s = i + “,”;の部分を > 修正して、改行せずに一気に表示したいと考えております。 その件だけをとったら、既にいただいた回答にありますよね。何が問題なのでしょう。
dodox86

2021/09/30 09:32

端的に言うと、「いただいている今の回答内容ではそこからどうしたら良いか分からない。その部分を解決できる動くコードが知りたい。」と言うことなのでしょうか。
BeatStar

2021/09/30 09:35 編集

予想としては、整数 -> 文字列 -> 文字列の配列 という処理のためだと思いますが、今の質問内容では「単に改行せずに一行で表示できればいい」としか読めませんよ。 失礼ですが、質問者さん、そもそも問題の意図すらつかめていないのでは?
退会済みユーザー

退会済みユーザー

2021/09/30 09:37

printをしようせず、 String s = a + ","; の部分で解決できるコードがございましたら、ご指導頂きたいです。
m.ts10806

2021/09/30 09:38

質問本文に書いておいてください。
m.ts10806

2021/09/30 09:41 編集

ただ、そこを考えるのが課題では? printlnの特性が分かっていれば自明です。(どっちにしても出力して確認するんならどっちかは1回以上は必要なわけで)
guest

回答3

0

ベストアンサー

先に前提から。

プログラミングは「こう書けばいい」っていうものじゃありません
簡単に言えば、プログラミングは「現実世界のシミュレーション」です。

for文だのif文だの変数だのはあくまで道具です。

まず、質問者さん、プログラミングだのJavaだのは置いといて、「現実世界でならどうするか」を考えてみましょう。
たとえば数学の問題なり、質問にあるものを手作業でやるなりとかです。

今回のものは、言い換えるとわけわかんないものになりそうですが、たとえば、

[依頼] ここに長方形の画用紙が一枚ある。これに0~99までの数字を、 "0,1,2,...,98,99," というように書いていく。この0~99が書かれた画用紙を s とする。 あなたはこのsをハサミで切り分け、黒板に 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ... 99, のように張り付けていく作業をしなければならない。 この作業を行なえ。

的な依頼かなんかがあると考えてみてください。(他にいいたとえがあればいいが、思いつかん…)

普通に考えれば、とりあえず0~99を "0,1,2,...,98,99," のように画用紙に書く。

そして、それを "," を区切り文字として、ハサミを入れていくとかですね。

これを実装すればいいだけです。

まず、画用紙に書く ... これは 本来の問題文であれば 「文字列 s」ですね。

単純に 文字列 s に数字等を突っ込んでいく。

規則性を見ると、

<数字>,<数字>,<数字>,...,<数字>,

となっています。なので常に <数字> の直後に "," を書けばいいだけです。

で、肝心のコード。

それなら、質問にあるコードでいいやん。って思いますか?
でもそのコード、エラーを吐きますよ。

Java

1public class HelloWorld{ 2public static void main(String args[]){ 3 4 for (int a = 0; a < 100; a++) { 5     String s = a + ","; 6     } 7} 8}

Paiza.IOで動かしてみたところ、

Main.java:5: error: illegal character: '\u3000'      String s = a + ","; ^

と出ます。

このエラーメッセージを検索キーワードとして、

「Java error: illegal character: '\u3000'」と検索してみます。
すると、ここによると、
全角スペースが含まれていることが原因」のようです。

なので、全角スペースを半角スペース(またはTabキー)に書き換えましょう。

Java

1public class HelloWorld{ 2public static void main(String args[]){ 3 for (int a = 0; a < 100; a++) { 4 String s = a + ","; 5 } 6} 7}

するとエラーが消えました。

ですが、ソースコードが汚いです。

これを同僚とかから渡されたら、「わざとやっているのでしょうか」と思いたくなるレベルです。

インデント(半角スペースやTabキーでやるアレ)がアレすぎる。

Javaとかならまだいいけど、Pythonとかになると、意味が相当変わってくるレベルです。

なので揃えちゃいましょう。

Java

1public class HelloWorld{ 2 public static void main(String args[]){ 3 for (int a = 0; a < 100; a++) { 4 String s = a + ","; 5 } 6 } 7}

これで少しはましになりましたね。

次はコードを読んでみましょう。

コードを読むコツは『一行レベルで、その行が何をしているかを考えながら読む』です。

Java

1// HelloWorldクラスを定義 2public class HelloWorld{ 3 // mainメソッドの定義 4 public static void main(String args[]){ 5 // 変数aを宣言し、初期値を0とする。そして aが100未満である間、+1しながら繰り返す 6 for (int a = 0; a < 100; a++) { 7 // 文字列 s を宣言し、s に <整数> + "," をセットする 8 String s = a + ","; 9 } 10 } 11}

これを疑似コードとして切り出す。

1. 変数a を宣言し、初期値を0とする。そして a が 100未満である間、+1しながら繰り返す 1.1. 文字列 s を用意し、sに <整数> + "," をセットする

これを現実世界で手作業でシミュレーションしてみてください。

つまり、実際に値を入れて計算したりする感じです。

まず、(1)によって、a = 0 となる。(初期値だから)

で、現在の値は 0 。それを (1.1) で さっきの例えであれば、画用紙を取り出して、そこに
"0," と書く。

次に、(1)に戻り、a = a + 1 = 0 + 1 = 1 となり、a = 1 となる。
なので a = 1。

で、(1.1)に行き、(さっきの画用紙を破り捨てて) 新たに画用紙を取り出して、その新しい画用紙に
"1," と書く。

で、また(1)に戻り、a = 1 + 1 = 2 で、a = 2 となる。
さらに(1.1)で (さっきの画用紙を破り捨てて)新たに画用紙を取り出して、その新しい画用紙に
"2," と書く。

…とやっていき、

a = 99 で 同じようにさっきの画用紙を破り捨てて、新たな画用紙に書く。

で(1)に戻りますが、a = 99 + 1 = 100 で a = 100 ですね。
それは条件式 a < 100 を満たさないため、ここで終了。

そして結果は、s = "99," となる。

でも、この画用紙、(1)のブロックから抜けると消滅しちゃいます。

なので、

Java

1// HelloWorldクラスを定義 2public class HelloWorld{ 3 // mainメソッドの定義 4 public static void main(String args[]){ 5 // 変数aを宣言し、初期値を0とする。そして aが100未満である間、+1しながら繰り返す 6 for (int a = 0; a < 100; a++) { 7 // 文字列 s を宣言し、s に <整数> + "," をセットする 8 String s = a + ","; 9 } 10 System.out.println( s ); // ここ 11 } 12}

で表示しようとしても、そもそも無いものは出せません。
なのでまたエラーに。

原因は、(1.1) で s を宣言していること

プログラミングでの変数等は、スコープと呼ばれる、使える範囲が決まっています。
(言語によってはそんなに問題ではない場合も?)

for文の{...} 内で宣言すると、その中でしか使えません。
なので(1)に行くときや、ブロック外でsを参照しようとしても、「んなもん、ねーよ」と怒られるのです。

{...} のブロック内でしか使えないのだから、宣言する場所は、(1)のとかになります。(場合に寄るが、今回はここ)

そうすれば、スコープは『mainメソッドから抜けるまで』となります。

詳しくは『Java 変数 スコープ』とかで検索してください。

そして、文字列s のスコープが「mainメソッド内」になれば、「文字列に固めた後に」出力できますから、改行の問題はありません。(あるにはあるが、今回はそんなに問題なしと思う)

また、単純に改行無しで出力するなら、他の方々が仰るように、printlnメソッドではなく、printメソッドを使えですね。
公式ドキュメントを参照してください。

つまり、基礎ができていないことが原因。

投稿2021/09/30 10:28

BeatStar

総合スコア4962

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

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

退会済みユーザー

退会済みユーザー

2021/09/30 12:05

ご指導、ありがとうございます。 プログラミングに対する認識が、自分は未熟であると痛感いたしました。 丁寧な解説で理解でき、もう一度解説を読み、向き合ってみます。 ありがとうございました。
guest

0

printlnって関数は文字列出力したあと改行します
#最後のln(line)ってのがそれ表してる?
なので、改行させたくないなら、lnついてないprintを使おう、ってはなしですな

投稿2021/09/30 06:38

y_waiwai

総合スコア88049

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

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

退会済みユーザー

退会済みユーザー

2021/09/30 07:18

申し訳ございません。 こちらの質問内容に不備がございました。ご丁寧にお応え頂き、ありがとうございます。
dodox86

2021/09/30 10:06 編集

なぜ、2つも低評価なのか分かりませんね。当初の質問への回答として考えると不当な評価なのでは?
guest

0

改行したくないならprintlnではなくprintを。

投稿2021/09/30 06:19

m.ts10806

総合スコア80875

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

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

m.ts10806

2021/09/30 06:20 編集

ただ、 99, と出てもいいんですかね。 最後に付くの。
K_3578

2021/09/30 06:27

初心者はそこを考えるのが面白いと思います。私が学びたての頃はこういう試行錯誤を楽しんでましたね。
m.ts10806

2021/09/30 06:28 編集

オブジェクトの使い方のためには良い課題ですね。
K_3578

2021/09/30 06:32 編集

試行錯誤してるだけか自分が得たい答えを得たら放置する方かわかりませんが、 できれば前者であって欲しい所です。
退会済みユーザー

退会済みユーザー

2021/09/30 07:19

ご指導ありがとうございます。 自分が発した質問内容に不備がたくさんあり、悩ませてしまい申し訳ございません。
m.ts10806

2021/09/30 07:21

謝らなくて良いです。淡々と行きましょう。 ※ただ、回答ついたあとに要件追加されるとちょっと
m.ts10806

2021/09/30 07:21

課題なのであればなおさら、自分で考える必要があると思います。出題者の意図や期待されることがあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問