下のプログラムでなぜString ss= " "+dt;のように数値を文字列に変換しないとだめなんでしょうか?
ちなみに桁数設定メソッドを作るプログラムです。

public class JcWidth { // JcWidth.java [java]
public static void main(String args[]) {
System.out.println(":" + toIntWidth(123, 8) + ":");
System.out.println(":" + toIntWidth(12345, 8) + ":");
System.out.println(":" + toIntWidth(-1234567890, 8) + ":");
System.out.println(":" + toHexWidth(4095, 8) + ":");
System.out.println(":" + toHexWidth(123456789, 8) + ":");
}

// int値dtを先行空白付きw桁(最大12)の表現にする
// 数値が指定幅より大きいときは必要な幅にする
public static String toIntWidth(int dt, int w) {
if (w > 12) w = 12;
String ss = "" + dt; // 数値を文字列にする
if (ss.length() > w) w = ss.length();
ss = " " + dt;
return ss.substring(ss.length()-w);
}

// int値dtを先行0付きw桁(最大8)の16進数大文字表現にする
public static String toHexWidth(int dt, int w) {
if (w > 8) w = 8;
String ss = Integer.toHexString(dt).toUpperCase();
if (ss.length() > w) w = ss.length();
ss = "0000000" + ss;
return ss.substring(ss.length()-w);
}
}

このQ&Aに関連する最新のQ&A

A 回答 (1件)

数字が何文字使うか調べるために、


一旦、文字列にした方が早いと思ったのでしょう。

このプログラムでは
"*****1000000"
"***100000000"(*は空白を表す)
のように、空白を付けて数値を表したいわけですね。
数字が「何桁の数になるか」は、計算すれば出ますが、
それより単純に、文字列の形にしてその長さを数えたわけです。

蛇足ですが、このプログラムをちょっと見たところでは
>String ss = "" + dt; // 数値を文字列にする
>if (ss.length() > w) w = ss.length();
>ss = " " + dt;
のあたり、もう少しすっきり書けるような気がします。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます!
なるほど、そういうことでしたか。
よく数値を文字列にするプログラミングを見るのですが、そういう側面があったのですね。
ありがとうございました。

お礼日時:2003/11/08 21:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q日本語、英語、語彙数は?

小学校1年生の語彙数と中学校3年生の語彙数は、どちらが多いのでしょう?日本語と英語を比べると英語のほうが語彙数は少ないのですか?

Aベストアンサー

>小学校1年生の語彙数と中学校3年生の語彙数は、どちらが多いのでしょう?

これは学習する語彙数でしょうか、それとも、習得済みの語彙数でしょうか。学習する語彙数は間違いなく中3の方が多いでしょう。小1から積み重ねていくのですから。

習得済みの語彙数も、同一人物を比べるのであれば、普通に生活をしていれば、小1のときより、中3の方が語彙数は多いでしょう。また、「自分の年齢不相応の難しい本を読みあさっている天才的な小1と、小さい頃から本も読まず人との交流もせずに引きこもっている中3とを比べる」という極端な場合を除いて、一般的には小1より中3の方が語彙は多いと考えていいのではないでしょうか。

>日本語と英語を比べると英語のほうが語彙数は少ないのですか?

そんなことはないと思います。日本語も英語も物事の数だけ語彙がありますし、常に新しい語彙が生まれたり、外国から入ってきたりしています。

ただ、一般的な日本人が習得する語彙数を考えれば、英語よりも日本語の語彙の方が圧倒的に数が多いでしょう。

QString(byte[] bytes, int offset, int length)の文字コードは?

String(byte[] bytes, int offset, int length)は、バイト配列(8bitずつのまとまり)を、文字列型に直す、というものだと思うのですが文字コードは何にしたがって直すのでしょうか?

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html

Aベストアンサー

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int%29

>プラットフォームのデフォルト文字セットを使用して、

日本語WindowsならShift_JISでしょう。他の環境では解りません。

#なので僕は

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29

で指定するほうが好きです。(コードを読む人に,誤解を与えにくく,異なる環境でも挙動を一致させやすいから移植性も高まると考えるため)

どうしてもデフォルトがほしけりゃ
http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html#defaultCharset%28%29
があるわけですし

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int%29

>プラットフォームのデフォルト文字セットを使用して、

日本語WindowsならShift_JISでしょう。他の環境では解りません。

#なので僕は

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29

で指定するほうが好きです。(コードを読む人に,誤解を与えにくく,異なる環境でも挙動を一致させやすいか...続きを読む

Qなぜ英語では、数や冠詞の概念が重要なのでしょうか?

マークピーターセンさんの「日本人の英語」などを読むと

英語では、数や冠詞の概念が重要であるとわかります。

では、なぜ英語では、数や冠詞の概念が重要なのでしょうか?

Aベストアンサー

● 日本人の英語

実は今回のブログ記事のタイトルはマーク・ピーターセン著「日本人の英語」という本から引用したものです。この本は、英語と日本語の構成と論理の違いからくる日本人の冒しやすい間違いを例として吟味し、どうしたら英語の「頭脳環境」に入っていけるかを説明した本です。

ちなみに、この本は初版が1988年と古いのですが、私が英語を勉強してきた中で最も素晴らしいと思った本です。個人的には、世の中に英語の教材は数あれど、日本人の英語習得においてこれほど優れた本は他には存在しないのではないかと思います。

この本では、著者が見てきた日本人の英語のミスの中で、意思伝達上大きな障害をきたすと思われるものを大別し、重要な順に取り上げています。そしてこの本で最初に取り上げている問題、つまり、著者が最も重大な障壁と考えるのは次の問題です。

冠詞と数。a、the、複数、単数などの意識の問題。ここに英語の論理の心があり・・・

まだまだ英語を勉強しているという人も、あるいはもう英語が結構話せるようになった人も、重大な障壁としてこれが頭に浮かぶ人はどれくらいいるでしょうか?もしこれが頭に浮かばなかったとしたら、その人は殆どネイティブスピーカー並みの英語能力を身につけたか、そもそもこれを重要な問題だと十分認識することができていないかのどちらかです。もし後者に当てはまってしまったら、自分では英語を話せると思っていても酷く不自然な英語を話している可能性が高いです。後者の場合は冠詞の問題を重要なものだと認識するところから始めなければいけません。このように問題を認識するのすら難しいことがまさに最大の障壁である理由なのです。

● 間違いの例 - その3

前回に続いてもうひとつ例を挙げます。以下はこの本からの引用です。

先日、アメリカに留学している日本人の友だちから手紙がきたが、その中に次の文章がいきなり出てきた。

Last night, I ate a chicken in the backyard.

これをみたときの気持は非常に複雑で、なかなか日本語では説明できないが、ちょうどあてはまる英語の決まり文句でいえば、I didn't know whether to laugh or cry (笑ったらいいのか泣いたらいいのか) という気持であった。

これは日本語の感覚でいうと「昨夜、裏庭でバーベキューをしてチキンを食べたんでしょう?どこがおかしいの?」と、何がおかしいのか想像しづらいと思います。実は、この例文は英語では次の意味になります。

昨夜、鶏を1羽(捕まえて、そのまま)裏庭で食べ(てしまっ)た。


夜がふけて暗くなってきた裏庭で、友だちが血と羽だらけの口元に微笑を浮かべながら、ふくらんだ腹を満足そうに撫でている -- このような生き生きとした情景が浮かんでくるのである

これは著者が意地悪して曲解しているのではありません。当たり前ですが英語のネイティブスピーカーは英語をぱっと見たときに「ああ、日本語には冠詞がないからこの a は英語としての意味を持たないのだな」などとは考えません。この例文を英語としてそのまま受け取れば、自然とこのような情景を思い浮かべてしまうのです。

それでも「バーベキューでチキンを食べたと言いたいのは明らかではないか。なぜそのように意味を捻じ曲げてしまうのか、どうにも腑に落ちない」という人もいると思うので、もう少し詳しく説明します。

● ネイティブスピーカーにとって、「名詞に a をつける」という表現は無意味である

これもこの本からの引用になります。これがどういうことを意味するか分かりますでしょうか。これを説明する前に、私たち日本人がどのように冠詞 a の使い分けを学ぶかをおさらいします。

<日本人の冠詞と名詞の覚え方>
chicken はニワトリという意味を持つ名詞である。ニワトリは数えられるので、a chicken、two chickens というふうに言う。でもトリ肉を指してこの言葉を使う場合は数えられない名詞になり、a はつけずにただ chicken と言う。

私たち日本人は、このようにまず名詞に意味を与え、それに a をつけるかつけないか考えます。しかし、英語のネイティブスピーカーはそのようには考えません。

ところが、これは非現実的で、とても誤解を招く言い方である。ネイティブスピーカーにとって、「名詞」に a をつける」という表現は無意味である。


英語で話すとき、先行して意味的カテゴリーを決めるのは名詞でなく、a の有無である。もし「つける」で表現すれば、「a に名詞をつける」としかいいようがない。「名詞に a をつける」という考え方は、実際には英語の世界には存在しないからである。

そして、英文法の参考書に書かれてある典型的な冠詞の説明を引き合いにだして、次のように説明します。

この類の説明では、すでにあった、ちゃんとした意味をもった名詞に、a は、まるでアクセサリーのように「正しく」つけられるものであるかのように思われる。
しかし、本当は逆である。すでにあった、ちゃんとした意味をもっていたのは、a である。そして、名詞の意味は不定冠詞の a に「つけられた」ことによって決まってくる。


つまり、a というのは、その有無が一つの論理的プロセスの根幹となるものであって、名詞につくアクセサリーのようなものではないのである。


「この類の名詞には冠詞をつけない」または「つける」というふうに解説されている「冠詞用法」をみると、実に不思議な感じがする。

これは日本語にはない感覚であるうえに、このことをはっきり教わったことがある人もあまりいないのではないかと思います。この思考プロセスに気付けないでいると、いつまでたってもどこかおかしな英語をしゃべることになってしまいます。

英語の品詞の中で、名詞は意味をとりやすく最も抵抗なく受け入れやすいのではないかと一見は感じられます。他の品詞に目を向けると、例えば動詞は目的語をとるかとらないかも一緒に覚えなくてはなりません。さらに学習の初期段階で覚える簡単な動詞は、実際は副詞(up、down、out、off など)と組み合わされて無数の慣用表現を生み出すとんでもない化け物であることを後々知ることになります。ちなみに著者はこのように言っています。

私は、run と put と get くらいあれば、他の動詞をほとんど使わずに聖書の現代訳でもできるような気がする。

しかし、「冠詞と数の問題」があるために、日本人にとって本当の意味での理解が難しいのは、実は名詞なのです。

英語の名詞と日本語の名詞が概念的にきわめて不均衡な関係にあり、

著者はこのように英語の名詞と日本語の名詞を「概念的にきわめて不均衡な関係にある」と表現していますが、英語を勉強していると、私もこのことを強く感じます。

● ネイティブスピーカーの話し方からみる思考プロセス

英語でものを考えるときは、まず冠詞の有無で意味的カテゴリーを整えて、それから名詞を探すという思考プロセスを辿ります。対して、日本語頭脳のままで英語を話すと、このような2段階の思考プロセスを辿らずにいきなり名詞に飛びついてしまいます。

でも、それって本当なの?と疑わしく思えるかもしれません。実は、英語のネイティブスピーカーは、この思考プロセスがはっきりとみえる形で英語を話すことがあります。例えば chicken という単語が出てこなくて言葉に詰まったとしましょう。

まず、日本語頭脳の思考プロセスで話すとこうなります。

(えーと、トリ肉、それは英語だと a をつけずに言うから)chicken!

(えーと、ニワトリ、それが一匹だから)a chicken!

対して、英語のネイティブスピーカーの思考プロセスではこのように発声されます。

(数えられないモノ)uh...(数えられないモノ)uh...(そのモノの名前はトリ肉だ)chicken!

(一つのモノ)a...(一つのモノ)a...(そのモノの名前はニワトリだ)a chicken!

(あの)the, uh...(あの)the, uh...(いま the で限定されるモノの名前はニワトリだ)the chicken!

uh というのは、言葉に詰まったときに発する音で、口を半開きにして「アー」というような音になります。ちょっとかしこまった場で話すときに出る日本語の「えー」のように、意味を持たずに言葉に詰まったときに無意識に出る音です。umm みたいに m で口を閉じることもあります。また、この場合の a は「ア」とは発音せずに「エーィ・・・エーィ・・・」と伸びた音になります。the, uh は「ザ」ではなくて「ズィーアー・・・」みたいな感じです。

http://oneh.blog.jp/archives/8787597.html

● 日本人の英語

実は今回のブログ記事のタイトルはマーク・ピーターセン著「日本人の英語」という本から引用したものです。この本は、英語と日本語の構成と論理の違いからくる日本人の冒しやすい間違いを例として吟味し、どうしたら英語の「頭脳環境」に入っていけるかを説明した本です。

ちなみに、この本は初版が1988年と古いのですが、私が英語を勉強してきた中で最も素晴らしいと思った本です。個人的には、世の中に英語の教材は数あれど、日本人の英語習得においてこれほど優れた本は他には存在しないので...続きを読む

QInteger.parseInt()について public static void main(String[] args) { int a =

初歩的な質問だと思うのですが、、、

public class TestTree {

public static void main(String[] args) {

int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

GreatTree myTree = new GreatTree(a, b);
myTree.makeTree();
myTree.makeGround();
}

}

というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

Aベストアンサー

> argsで入力されたものは例え数字でも文字列として扱われているから、それをintにしている。ということですよね?

引数として (String[] args) と設定されていますので、
おっしゃるとおり 引数 args[]配列に入っているものは、文字列です。

ポイントは、 「String[]」でしょうか。。

Q「数を把握する」って英語でなんと言うのでしょうか?

「数を把握する」を英語で表現したいのですが、適切な表現が見つかりません。
日本人英語でなんとか意味の通じる表現はできるのですが、
自分でも不自然な英語だと感じています。

自然な英語表現をご存じの方がいらっしゃいましたら、教えてください。

Aベストアンサー

ddeanaです。補足を拝見いたしました。
ご質問の「商品の在庫数を把握する」でしたら、状況によって下記のように使い分けます。
1.「在庫」を表す単語
ふたつあります。
・stock:店舗のバックヤードや倉庫などにあり、必要に応じて販売可能な商品の数を意味する場合
・inventory: いわゆる棚卸などで書類に記入する在庫の数。店舗の場合はstockと同意語。店舗以外のいわゆる出荷前の品物の在庫も含む、広い意味での在庫。

ですから、状況によって使い分けるようにしています。

2.「把握する」を表す単語
これもすごくバリエーションがありますが、いくつか例文をあげるとすると下記のようになるかと。
・seize stock quantities : 「しっかりつかむ、理解する」という意味のseizeは、特にフォーマルな文章や、会社としての指針などを示す時などに使われます。
・understand the quantities in stock/understand inventories:自分が在庫数をきちんと覚えている時など、一番日常的に使われるのがunderstandです。
・manage the number of items(products) in stock/manage the inventory of our products:
「管理する」という意味のmanageは、「把握する」も含みます。

参考になれば幸いです。

ddeanaです。補足を拝見いたしました。
ご質問の「商品の在庫数を把握する」でしたら、状況によって下記のように使い分けます。
1.「在庫」を表す単語
ふたつあります。
・stock:店舗のバックヤードや倉庫などにあり、必要に応じて販売可能な商品の数を意味する場合
・inventory: いわゆる棚卸などで書類に記入する在庫の数。店舗の場合はstockと同意語。店舗以外のいわゆる出荷前の品物の在庫も含む、広い意味での在庫。

ですから、状況によって使い分けるようにしています。

2.「把握する」を表...続きを読む

Qpublic static void main(String args

public static void main(String args[]) {

public static void main(String[] args) {
は何が違います?

Aベストアンサー

何も違いません。

javaでは配列を宣言する時に、型の後ろに[]をつけても
変数名の後ろに[]を付けてもどちらでもいいことになっています。

Q英語の"双数"の歴史

英語(英語に必ずしも限りませんが)で,同じような形のもので作られているもの,例えば,パンツ,メガネなどは,一つでも複数と見なされて扱われますが,このような扱い方を仮に"双数"と呼ぶことにして,このような言語上の習慣がいつどのようにして英語に取り入れられたか,その歴史についての資料,文献などについてどなたかご存じでしたら教えて下さい.

Aベストアンサー

資料を挙げることはしませんが、ざっとだけ説明いたします。

双数(Dual; れっきとした専門用語)は、英語のご先祖様である印欧祖語(Proto Indo-European)から派生した古典語には確認されます。例えば、サンスクリットや古典ギリシャ語なんかでは、ほぼ独立した曲用が認められます。

英語は、印欧祖語同様理論的に再構築されたゲルマン祖語(Proto Germanic)の子孫なのですが、古英語(700頃-1200頃)では人称代名詞に双数独特の曲用が見られることから、ゲルマン祖語でも一部に双数が保持されていたと考えるのが妥当であると思われます。

スラヴ系言語(やはり印欧語族)では、一応双数は消滅したことになっているのですが、チェコ語のoko(目)やruka(手)など一部の名詞については、単数変化・複数変化のいずれとも異なるので古代の双数形の名残であると見られています。

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

Qヨーロッパの人は英語や隣国の言語等、普通の人でも数ヶ国語話せる人は多い

ヨーロッパの人は英語や隣国の言語等、普通の人でも数ヶ国語話せる人は多いんですか。

Aベストアンサー

オランダ在住のものです。

ヨーロッパ内でもその国によりますが、
はい、数ヶ国語話す人は多いです。


オランダは特に小国かつ多国籍の国ですので、ほとんどの人が流暢な英語を話します。
オランダ内ではドイツ語の通用度も高いです。ドイツ語はあまりうまく話せないが、理解はできる、という人が多いです。
つまり、どの程度流暢かを除けば、大抵のオランダ人は3ヶ国語を理解することができます。
さらに人によってはフランス語も分かる、話せるという人もいます。


ただ、ヨーロッパどこの国でも3ヶ国語を話す人ばかりかというとそうではありません。
ある程度国土の大きいフランスやドイツに行くと、英語すら通じないことが多いです。
(それでも日本よりは通じるかと思います)
イタリアもあまり英語が通じないですね。
でもイタリア人の一部はスペイン語が分かったり、フランス語が分かる人もいます。
こんな風に英語が分からなくても、2ヶ国語が分かるといった人もいます。
(ベルギーはオランダ語とフランス語とドイツ語が混ざっているので、
その付近ではこれらの言語で2~3ヶ国語話す人が多いでしょう。)


ただヨーロッパのどこの国でも、しっかり教育を受けている人のレベルになれば、
大抵の人が2~3は流暢に話すのが普通です。
そしてどこの国の人でも、他の言語の習得にかかる時間が日本人に比べて極端に短いですね。
やはり言語と発音の類似性という点が大きいと思います。

オランダ在住のものです。

ヨーロッパ内でもその国によりますが、
はい、数ヶ国語話す人は多いです。


オランダは特に小国かつ多国籍の国ですので、ほとんどの人が流暢な英語を話します。
オランダ内ではドイツ語の通用度も高いです。ドイツ語はあまりうまく話せないが、理解はできる、という人が多いです。
つまり、どの程度流暢かを除けば、大抵のオランダ人は3ヶ国語を理解することができます。
さらに人によってはフランス語も分かる、話せるという人もいます。


ただ、ヨーロッパどこの国でも3ヶ国語を...続きを読む

QStringクラスのlengthメソッドについて

こんにちは、Stringクラスのlengthメソッドについて質問させてください。

今まで配列のlengthは、宣言時に長さが決定するからメソッドではなく、finalフィールドで十分。
ArrayListだとかは長さが変わるからメソッドという意識を持っていました。
(カプセル化の概念とも関わりますが)

先日その話しをしていたら、「でも文字列(Stringオブジェクト)の長さも不変だよね。」と言われました。
確かに文字列の長さは不変なのに、長さの取得にはメソッドを使っています。

言語仕様として一貫性を持たせるなら、配列もlengthメソッドにするか、文字列をlengthフィールドにしたほうが綺麗だと思うんです。

Stringクラスのソースコードを見ていたら、文字列の長さは内部的に
private int count; と宣言されていました。
そして、lengthメソッドは return count; しているだけでした。

ただ、このcountフィールドに値を代入しているのはコンストラクタ内だけだったので、
public final int length; とすれば、良かったのでは?と思いました。

この考えについて、
それは間違っている、とか歴史的な背景などご存知でしたらご教授ください。

よろしくお願致します。

こんにちは、Stringクラスのlengthメソッドについて質問させてください。

今まで配列のlengthは、宣言時に長さが決定するからメソッドではなく、finalフィールドで十分。
ArrayListだとかは長さが変わるからメソッドという意識を持っていました。
(カプセル化の概念とも関わりますが)

先日その話しをしていたら、「でも文字列(Stringオブジェクト)の長さも不変だよね。」と言われました。
確かに文字列の長さは不変なのに、長さの取得にはメソッドを使っています。

言語仕様として一貫性を持たせるな...続きを読む

Aベストアンサー

あくまで想像ですが・・・

長さを問い合せる場合、括弧付きの「length()」である方がオブジェクト指向
らしい方法と思います。

配列のlenghthは、あくまでフィールドです。
つまり、いくつ配列に格納したか、ではなく、配列として準備した個数を格納
しているにすぎません。

Stringの長さが「不変である」というのは、Stringの性質ではなく、たんに
そういうクラスを作っただけのことなので、結果論からfinalにするのは
設計上正しいとは思えません。
可変のStringクラスだってあってもいいのでは?


人気Q&Aランキング

おすすめ情報