これからの季節に親子でハイキング! >>

こんばんは。
私は、PHPをやっていたのですが、今度はjavaにチャレンジしてみたいと思っています。
それで、質問です。
PHPでは重宝していたのですが、print_r()メソッドにあたるメソッドはないでしょうか?
このメソッドは、配列やオブジェクトの中身を全て出力してくれるメソッドなのですが…。配列の構造が見たいときなどはとても重宝しました。

ex)
■プログラム
$arr = array(1, 2, 3, 4, 5);
print_r($arr);

■結果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)

ご存知の方いらっしゃいまいしたら、教えてください。

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

A 回答 (3件)

> print_r()メソッドにあたるメソッド


Javaのメソッドは、なにかのオブジェクトまたはなにかのクラスのメソッドだから、便利に使える一人歩きメソッドはないですね。また、配列の中身はオブジェクトであることが多いしオブジェクトの仕様はさまざまなので、単純で一律的なprintもあり得ないでしょうね。

有意義なtoString()メソッドが定義されているオブジェクトの配列なら:
System.out.println(Arrays.asList(myArray));
とやる手はありますね。

Javaの新しいforループ:
for (int i : arr){
System.out.println(i);
}
も便利です。
    • good
    • 0
この回答へのお礼

なるほど。
では、地道に配列を出力する他ないですね。。

自分でクラスを制作する場合などは、
toString()をオーバーライドして、
後々わかりやすくする必要があるというのもわかりました。

ありがとうございます。

お礼日時:2008/03/09 18:05

ライブラリに興味があれば、


org.apache.commons.lang.ArrayUtils
(commons-lang-2.3.jar)
が使えると思います。

次のサンプルを参考にしてみてはどうでしょうか。
---------------------------------------------------------------------
import org.apache.commons.lang.ArrayUtils;

public class Array1 {
public static void main(String[] args) {
String str[] = { "abc", "xyz", "012345" };
System.out.println(ArrayUtils.toString(str, "null"));
System.out.println(str);
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
試してみますね!

お礼日時:2008/03/10 22:23

念のためですがJavaでは配列もオブジェクトですね。

    • good
    • 0
この回答へのお礼

そうでした。
new で作るということはオブジェクトですね!
ていう解釈は間違いでしょうか。。

お礼日時:2008/03/09 18:07

このQ&Aに関連する人気のQ&A

Java 配列」に関するQ&A: 定数配列の書き方

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

QJavaで改行などが出来ないのです。

 Java の事で質問です。 
 

 System.out.println("このようにしても\n");

 改行できません。
 
 このようにしても\n   

 と表示されてしまいます。どうしてでしょう。ちなみにOSはMacOS9.1です。なにか関係があるのでしょうか?

Aベストアンサー

> class amigo{
> public static void main(String args[]) {
> System.out.print("aaaaaaaa");
> System.getProperty("line.separator");
> System.out.print("bbbbbbbb");
> }
> }
> のような使い方でしょうか?

String line_sep = System.getProperty("line.separator");
System.out.println("あいうえお" + line_sep + "かきくけこ");

こうです。

Qクラス間でのデータ参照

あるクラスでArrayListにデータを格納し、そのデータを別のクラスで使いたいと思っています。

Javaでそれをするために、どのようにすればよいのでしょうか?

何か知識がある方教えてください。

Aベストアンサー

> つまり、教えてもらった方法は、
> *リストを作るクラス
> *そのリストを使って処理をするクラス
> *命令を出すクラス
> の三つに分かれているということですか?

はい、
Aru: リストを作るクラス
Betsu~3: そのリストを使って処理をするクラス
です。

別のクラスがあるクラスのインスタンスの生成から管理していれば,
命令を出すクラスを作らずともかまいません。
class Betsu4 {
public void shori() {
Aru aru = new Aru();
aru.createList();
ArrayList list = aru.getList();
}
}

Q文字列から数字を取り出す方法

質問があります。
例えば、テキストファイルから文章を一行ずつ読み込み、それをString型の変数に格納していきます。
その文から数字(整数で、何桁かはわからない。)を取り出し(ちなみにその数字の前後には特定の文字がついています)、変数に格納するというプログラムを作りたいのですが、具体的な方法がわかりません。
よろしければ是非教えてください!

Aベストアンサー

こんな感じですか?
数値以外を除きそのまま代入させます

String str = "ABCDABCD1234512345abcd";
int ret = Integer.parseInt(str.replaceAll("[^0-9]",""));
System.out.println(ret); //結果表示

Q一定のスペースを空けて端を揃えて表示

一定のスペースを空けて端を揃えて表示

お世話になります。
一定のスペースを空けて文字を表示したとき、縦に綺麗に揃えて表示したいのですがやり方がわかりません。
例えば、

apple ここに15個分のスペース (2,8) (3,6)
orange ここに15個分のスペース (3,7) (9,8) (2,10)
dog ここに15個分のスペース (3,0)
fortunately ここに15個分のスペース (6,6)

このように、各行の左側には英単語1つ、そして15個分のスペースを空けて、右側にその単語の座標を表示します。
この時に、座標を縦にきれいに揃えて表示したいのですが、英単語の長さによってバラバラになってしまいます。
どのようにスペースをあけて表示すればよいのでしょうか?宜しくお願いします。

Aベストアンサー

5分遅れで同じ回答をしてしまった(^^;
ついでなので、もう少し文字種の範囲を広げても大丈夫なものを作成してみた。

public static void main(String[] args) {
String[] word = {"りんご", "おranじ", "犬", "fortunately"};
String[] coord = {"(2,8) (3,6)", "(3,7) (9,8) (2,10)", "(3,0)", "(6,6)"};
java.nio.charset.Charset charset = java.nio.charset.Charset.forName("Shift_JIS");
int width = word[0].getBytes(charset).length + 15;
for (int i = 0; i < word.length; i++) {
String format = "%-" + (width - word[i].getBytes(charset).length + word[i].length()) + "s%s%n";
System.out.printf(format, word[i], coord[i]);
}
}

前提として、
与えられた文字がシフトJISで表せるようなもので、
シフトJISで1バイトコードになるものがいわゆる半角(1桁幅)、
2バイトコードになるものがいわゆる全角(2桁幅)となるのなら、
上のようにすることで対処できる。

要点は文字数でなく文字を構成するコードが何バイトかを数えて、
2バイトなら2桁分のスペースを用意する。
これには、getBytesでStringからバイト配列を得てlengthでバイト数を得る。

今度は書式文字列は各行ごとに変わる可能性がある。
widthはword[0]の文字列幅に15スペース分を加えたもの。
"apple"でなく"りんご"なので21になる。
つまり座標の表示は22桁目からということになる。

各行の書式文字列での、
(width - word[i].getBytes(charset).length + word[i].length())
で、バイト数と文字数との差を求めて表示幅から引くことで、
1文字が2桁になる場合に対処している。

書式は使いどころによって便利なもので、
printfで書式出力するところを、
StringクラスのformatメソッドでStringインスタンスにすることもできたりする。

5分遅れで同じ回答をしてしまった(^^;
ついでなので、もう少し文字種の範囲を広げても大丈夫なものを作成してみた。

public static void main(String[] args) {
String[] word = {"りんご", "おranじ", "犬", "fortunately"};
String[] coord = {"(2,8) (3,6)", "(3,7) (9,8) (2,10)", "(3,0)", "(6,6)"};
java.nio.charset.Charset charset = java.nio.charset.Charset.forName("Shift_JIS");
int width = word[0].getBytes(charset).length + 15;
for (int i = 0; i < word.length; i++) {
String format = "%-...続きを読む

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

Qservletからjspへオブジェクトの配列情報を送る方法

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、各情報をsetする。
HttpServletRequestにsetAttributeでFileInfomation情報を付加し、
disp.jspへforwardする。

※以下の方法を考えています。
request.setAttribute("fileinfo1", fileinfo[0]);
request.setAttribute("fileinfo2", fileinfo[1]);
request.setAttribute("fileinfo3", fileinfo[2]);
・・・
(配列でsetAttributeできるのかわからなかったので、
 とにかくファイルの数分setAttributeしてみました)

getServletContext().getRequestDispatcher("/disp.jsp").forward(req, res)

わからないこと:
disp.jspでどのようにFileInfomationの情報を取得し、
内容を参照できるのかがよくわからないのです。
jspの暗黙オブジェクトrequestを使用して、request.getParameterをすると、
返ってくる値がStringのようなので、FileInfomationクラスにならないんですよね?

突っ込みどころ満載の質問かと思いますが、何かアドバイス頂ければと思います。
オブジェクトの配列をsetAttributeしてjspで読み出せる方法があれば、
それもご教授いただけますでしょうか。
よろしくお願いいたします。jsp難しいです・・・。

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、...続きを読む

Aベストアンサー

setなんちゃらメソッドで値を設定したら、getなんちゃらメソッドを呼べば良かったのです。つまり、set/get以下が同名のメソッド同士をセットで使えば良いのです。
今回の場合は、getAttributeメソッドですね。
戻り値はObjectですがこれはキャストすれば良いのです。
FileInfomation 変数 = (FileInfomation)request.getAttribute("fileinfo1");
てな具合です。

なお、getParameterメソッドは、クライアント(ブラウザ)から送信されたパラメータを取得するメソッドです。

さて、話を次の段階に進めて、配列を受け渡しできるか?となりますが、、できます。
サーブレット側で、
request.setAttribute("キー文字列", fileinfo);
として、JSP側で、
FileInfomation[] 変数 = (FileInfomation[])request.getAttribute("キー文字列");
とすれば、良いのです。

QStringの文字列をString[]配列に変換したい

お世話になります♪

たとえばこういうStringの文字列があるとします。
String s = "私は Javaを 勉強 しています。";
これを下記のようなイメージでString[]配列に変換したいのですが、
{"私は","Javaを","勉強","しています。"};

何かいい方法はないでしょうか?
ヒントをください!

よろしくお願いします。

Aベストアンサー

java.util.StringTokenizerで区切り文字を半角スペースで使用して、
hasMoreTokens()をwhileで回しながらそのループ中で配列に投入してはどうですか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング