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

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

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

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

Q&A

解決済

2回答

839閲覧

Stringクラスについて

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2021/09/13 11:18

編集2021/09/13 13:12

javaで
String a="あいうえお";
System.out.println(a);

みたいに記述するとStringクラス型の変数aに格納されている参照値を読み込んで
参照番地のメモリ?から文字列を参照していると解釈しているのですが、
上のコードの'a'は参照型の変数ですよね?

BufferedReader br = new BufferedReader();

でいう所の'br'と区分的には同じだと思っているのですが、
なぜ、参照型の変数である'a'だけをSystem.out.printlnに入れるだけで
文字を出力できているのでしょうか。(メソッド名が必要ない?)
Stringクラスの中の何を呼び出しているのでしょうか?
BufferedReaderクラスでは同じようなことはできませんよね。

Stringクラスは、他のクラスとは根本的になにかが違うのでしょうか

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

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

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

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

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

m.ts10806

2021/09/13 11:22

引数そのままprintすればそれは当然そのまま出力されるわけで
kaina

2021/09/13 11:27

これくらいの初歩の問題だったら自分でデバッグしながら何が悪いのか一つ一つ確認していけば必ず分かるはずです。 こんなところで質問して答えを聞くよりよっぽどそのほうが為になりますよ。
退会済みユーザー

退会済みユーザー

2021/09/13 11:28

そうですよね 間に何か入れるのはわかってるのですが知らべても少し難しいです。
Zuishin

2021/09/13 11:30

6 から順に 100 になるまで 6 を足していけばいいでしょう。
BeatStar

2021/09/13 11:30

まず、「なぜそのコードになっているか」を説明できますか? もしかしたら、考え方そのものが出来ていない可能性もありますし、 単に引数とかの使い方とかが分かっていないだけかもしれません。 それぞれ教え方とかが違うはずです。 なので、とりあえず、「なぜそのロジックになっているのか」を本文に書いてください。 修正できるので修正してください。
kaina

2021/09/13 11:39

まだJavaを始めたばかりと思われますが、Eclipse等の統合開発環境かVS Code等のテキストエディタのいずれかを使用することをお勧めします。 これらを使用することでデバッグというプログラミングを行う上で必須の作業を楽に行うことが出来ます。
guest

回答2

0

ベストアンサー

何となく、「プログラミング全体像自体が理解できていない」と思うので、そこから説明します。

プログラミングは「こう書けばいい」ではありません。
プログラムは魔法でもなんでもなく、人間が現実世界でやっている手順を、逐一指示されながら処理利しているだけの代物である」です。

簡単に言えば『現実世界のシミュレーション』です。

とりま、プログラミングとかそういうのを置いといて、現実世界でならどうするか考えてみてください。

今回は、

[現実の課題] 1から100までの数字を一つ一つ見ていきながら、nの倍数をホワイトボードに書いていく。 ただし、nは変更できるようにしておく。(場合によっては n = 2, 場合によっては n = 6 となる)

という感じでしょうか。
これを算数かなんかの問題として出されたと考えてみてください。

私なら、

1. 数字を挙げていく( 1, 2, 3, ... 100 ) 1.1. 数字が nの倍数なら 1.1.1. ホワイトボードに書く

的なロジックになりますね。

(1.1) はそのままだと計算できないので、言い換えてみましょう。

まず、n = 2 だとします。
では、2の倍数とそうでないものを列挙してください。

2の倍数 = { 2, 4, 6, 8, 10 ... }
それ以外 = { 3, 5, 7, 9, 11 ... }

(※ 1 は除外して考えています)

では、ここから規則性を見付けてみてください。

計算してみると 2の倍数の場合は「2で割り切れる」、それ以外は「2で割ると必ず余りが出てくる」ですね。

ということで、数字を n で割ったときの余りが0かどうかで判断できますね。

で、ここまではできているという前提で書きます。


次は『デバッグ方法』です。

デバッグ方法には何種類かありますが、まずは『コードを読む方法』を提示します。

コードを読むコツは、「一行レベルで、何をしているかを考えながら読む」です。
たとえばコメントにするとかです。

// 引数n を受ける baisuメソッド public void baisu(int n){      // 変数 iの初期値: 1, i が 100以下の間, ループしながらインクリメント for(int i = 1; i <= 100; i++) { // i が 6 で割り切れるなら if(i % 6 == 0){ // n を表示 System.out.println(n); } } }

ですね。

では、これを疑似コードとして抜き出してみましょう。

0. ( n は引数とする ) 1. 変数 iの初期値: 1, i が 100以下の間, ループしながらインクリメント 1.1. i が 6で割り切れるなら 1.1.1. n を表示

この疑似コードをもとに、実際に手を動かしてやってみましょう。

引数として渡すのが 6 だとします。そのため、 n = 6 となりますね。

(1) によって、 i = 1 からスタート。

i = 1 n = 6

(1.1) で i % 6 == 0 を条件に見てみる。
i = 1 なので、1 % 6 == 0 ですね。満たしますか? 電卓で計算すると 0.16... と言う風に割り切れませんね。
なのでスルー。
(1)に戻って i++ により、 i + 1 = 1 + 1 = 2 よって、i = 2。

i = 2 n = 6

そして、(1.1) ですが、 2 % 6 == 0 は満たしますか? 割り切れませんね。
なのでスルー。

(1)に戻って i++ = i + 1 = 2 + 1 = 3。

... とやっていき、

i = 6 のときに (1.1) で 6 % 6 == 0 は満たすので、(1.1.1) に行く。

i = 6 n = 6

なので、 nである6をホワイトボードに書く。

... と、またi = 12 のときを見ます。

i = 12 n = 6

ですね。(1.1)で 12 % 6 == 0 は満たすので (1.1.1) に行く。

つまり、nの値を書く

n = 6 なので 6 と書く。

...と言う風になっています。

あれ????? なんで n の値を出力しているのでしょうか。普通、刻々と変換している i の値を出力するのでは?

私達は何をしようとしていましたっけ? 確か、「6の倍数の数字を書く」とかだったのでは?

そういう風にロジックを追っていくと、なぜ失敗したのかがわかりますよ。

デバッガを使う方法とかもありますが、これも発想自体は同じです。


[追記1]

ちなみに、これが「3の倍数」とかになったらどうなるでしょうか。
if( i % 6 == 0 ) の部分の条件式を書き直さないといけないはずです。

そこで、引数 n として与えられたものを使います。( n の意味が「個数」とか別のものだと話が変わってくるが、今回は「nの倍数」の意味で言っているので )

では、単純に計算してみてください。

2の倍数 => i % 2 == 0
3の倍数 => i % 3 == 0
4の倍数 => i % 4 == 0
...

なにかに気づきませんか?

そう、i % <N> == 0 となっていますね。(抽象度を上げると)

<N> は使える範囲で考えると 引数 n ですね。

後はわかりますね?

投稿2021/09/13 12:04

編集2021/09/13 12:11
BeatStar

総合スコア4962

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

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

退会済みユーザー

退会済みユーザー

2021/09/13 12:22

先ほどの通り丸投げにしてしまい申し訳ございません。最近始めたばかりで難しく理解力がなく大変申し訳ございません。それなのに1から教えてくださり本当にありがとうございます。 はい、無事に解くことができました。 本当にありがとうございます。
BeatStar

2021/09/13 13:22

退会しなくてもいいのに…… (別に退会するなとは言わんが)
guest

0

System.out.println(n);

なんでnを表示してるんでしょうか。

投稿2021/09/13 11:28

y_waiwai

総合スコア88042

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

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

退会済みユーザー

退会済みユーザー

2021/09/13 11:38

本当の問題が1~100までの数でnの倍数で表示できるメソッドを作成してください。(nの倍数は引数)というのとnの数字は自分で決めるからnを使って表示したいです。
y_waiwai

2021/09/13 11:41

nは6の倍数とは全く関係ないですけど
退会済みユーザー

退会済みユーザー

2021/09/13 11:43

そうなんですね。nの倍数は自分の好きな数字をいれるのではないのですか?
y_waiwai

2021/09/13 11:45

5をいれれば、5が表示されますが、それがあなたのやりたいことなんでしょうか。
退会済みユーザー

退会済みユーザー

2021/09/13 11:47

5を入れれば5の倍数、6を入れれば6の倍数を表示させたいです。
y_waiwai

2021/09/13 11:52 編集

そうなっていない、と言ってます(最初に戻る
退会済みユーザー

退会済みユーザー

2021/09/13 11:58 編集

そうですね。では、どのようにしたらよろしいでしょうか
y_waiwai

2021/09/13 11:57

6の倍数というのはどうやって出すんでしょうか
y_waiwai

2021/09/13 11:58

ってか、6の倍数というのはどういう数?
退会済みユーザー

退会済みユーザー

2021/09/13 11:59

System.out.println(n); nのところをiに変えます。
退会済みユーザー

退会済みユーザー

2021/09/13 12:00

6の倍数は6個ずつ数字が増えます。
y_waiwai

2021/09/13 12:01

それでどういう出力が出るのか確かめてみよう。 で、それでいいんでしょうか。
退会済みユーザー

退会済みユーザー

2021/09/13 12:03 編集

System.out.println(i); 6の倍数がでましたがこれで終わりで大丈夫でしょうか?
y_waiwai

2021/09/13 12:07

あなたがそれでいいと思うならそれでいいです。 だけど、 > 5を入れれば5の倍数、6を入れれば6の倍数を表示させたいです。 こうはなってませんよね
退会済みユーザー

退会済みユーザー

2021/09/13 12:10

そうですね。 すみません、ありがとうございます。
y_waiwai

2021/09/13 12:14

どういう数字を出したいのか書いてみて、それを出すにはどうすればいいのか考えよう
退会済みユーザー

退会済みユーザー

2021/09/13 12:22

はい、ありがとうございます。無事解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問