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

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

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

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

Q&A

解決済

4回答

362閲覧

System.out.printlnとSystem.out.printfのちがいについて

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/03/21 23:20

編集2018/03/21 23:28

前提・実現したいこと

System.out.printlnとSystem.out.printfのちがいについて、
Webで調べてみたのですが、99の表を書くプログラムにおける動作のちがいにおいて
わからないことがあります。
以下参考にした説明では、printfの場合にスペースが表示されるようなことは
言及されていなかったのですが、以下のコードを実行したところ、printfの場合はスペースが表示されました。なぜこのようにprintInとprintfではちがいができるのか教えていただきたいです。

参考

該当のソースコード

System.out.printlnを用いた場合

java

1public class 99Table { 2 3 public static void main(String[] args) { 4 System.out.println("---99の表---"); 5 for(int i = 1; i<=9; i++){ 6 for(int j = 1; j<=9; j++){ 7 System.out.println(i*j); 8 9 } 10 System.out.println(); 11 } 12 13 } 14 15} 16

結果

---99の表--- 123456789 24681012141618 369121518212427 4812162024283236 51015202530354045 61218243036424854 71421283542495663 81624324048566472 91827364554637281

System.out.printを用いた場合

java

1public class 99Table { 2 3 public static void main(String[] args) { 4 System.out.println("---99の表---"); 5 for(int i = 1; i<9; i++){ 6 for(int j = 1; j<9; j++){ 7 System.out.printf("%3d", i*j); 8 9 } 10 System.out.println(); 11 } 12 13 } 14 15}

結果

---99の表--- 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/21 23:28

ヒント:書式
guest

回答4

0

ジョージ・ジョースターという人がこんなことをいっていました。

「逆に考えるんだ」

printlnとprintfが動作にちがいが無いとしたら、なんのために存在するのだ?と。

printfに限らないですが、webや参考書などで知らないオブジェクト、メソッドがでたらAPIを確認するクセをつけたほうがよいです。
よくわからないけど、なんとなく自分の希望のものがでた。
という場合、大抵以下のように問題にぶつかります。

やりたいことと書いてることが違うので想定通りにならない

ところが、質問しても

「だって、そう書いているから。何をやりたいの?」

というやり取りになりがちです。

話を戻すと。pfintlnで、printfと同様の出力をしようとすると少し面倒だと感じるはずです。
そのとき、書式付き文字列便利だなぁと実感すると思います。

投稿2018/03/22 01:21

momon-ga

総合スコア4820

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

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

0

ベストアンサー

まずは仕様を把握してください。

PrintStream#printf
https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#printf-java.lang.String-java.lang.Object...-

「書式文字列の構文」
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Formatter.html#syntax


追記:かなりあっさりした回答をしました。書式文字列の構文はプログラミング学び始めの方にとって難解だとは思います。ただ「仕様を仕様書で把握するのは大切」というのがコメントの趣旨です。

実際には仕様をみつつ、同時にprintf("%3d%n", intValue)でintValueが1、10、100、1000のときそれぞれどんなふうに出力されるかご自分でプログラムを書いて結果を確認するというあたりから始めるとよいと思います。

投稿2018/03/21 23:24

編集2018/03/21 23:39
KSwordOfHaste

総合スコア18392

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

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

KSwordOfHaste

2018/03/21 23:40 編集

(ここのコメントに書いたことを追記として本文へ移動しました)
退会済みユーザー

退会済みユーザー

2018/03/22 05:57

ご回答いただきましてありがとうございました。JavaのAPI仕様は以前にも読もうと試みたことがあったのですが、初心者には難解すぎて諦めてしまいました。アドバイスいただいたように、プログラムで結果を確認しながら理解しようと思います。
KSwordOfHaste

2018/03/22 08:15 編集

色んなクラスやメソッドがありますが、誰もが最初から全てを完全には把握できないと思います。 色んなクラスの仕様をだんだんに理解するうちに、少しずつリファレンスも読めるようになっていきますよ。 それゆえリファレンスを読む努力を止めないことをお奨めします。
guest

0

API の説明を読んでもよからない場合は、実際に動作を確認するコードをかいてみるのがよいと思います。
java には jshell という機能があり、ちょとした実験ができるようになっています。

参考情報

  • JShellで読み進める「Java本格入門」

http://kikutaro777.hatenablog.com/entry/2017/04/20/230343

println と printf を比べてみました。

イメージ説明

%での指定を変えたときの動作をいろいろ試しながら, API の説明を読んでみては如何でしょう?

投稿2018/03/22 15:07

katoy

総合スコア22324

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

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

0

ダイコンとニンジンもってきてなぜ違うのでしょう、といわれても、そーゆーもんだから、としかいいようがありません。
双方、違う動作をするもんですんで、なぜ違うかを考えたところで無駄でしかありません。

それぞれの命令の規格、説明をよく読んでください。
そのうえで、わからないところがあるなら、それを聞いていただければ答えます。

投稿2018/03/21 23:43

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問