for文を使用した文字列表示プログラムについて

このQ&Aのポイント
  • Javaの初心者の方から、for文を使用した文字列表示プログラムについての疑問です。
  • プログラムの実行結果が予想通りにならず、なぜそのような表示になるのか疑問に思っています。
  • 具体的には、プログラム内でxPositionとyPositionの値が変化する様子が見受けられず、なぜx位置だけで星が増えていくのか理解できないとのことです。
回答を見る
  • ベストアンサー

forを使用した文字列表示プログラムについて

お世話になります。 Javaの超初心者です。 以下のプログラムがあるのですが、どうしてもわからないのでご教授願います。 import java.applet.*; import java.awt.*; public class DrawStarRow extends Applet { public void paint(Graphics g){ String star = ""; int xPosition = 10, yPosition = 60; //★を文字列変数に1個ずつ追加するループ文 for(int i=0; i<10; i++){ star = star + "★"; } //10個の★マークをアプレット上に描画する g.drawString(star, xPosition, yPosition); } } これを実行すると、(10, 60)の位置から右側に10個星が表示されるのですが、 なぜ「右側」に続けて表示されるのかがわかりません。 今までは、例えばg.drawOval(10+i*10、10+i*10, 20, 20)とかで、 i=i+1であればxもyも変化するのでわかるんですが、 この式は全くそういうことも書いておらず、それなのにx位置だけ 自動的に変わった位置で星がどんどん増えていくんですよね。 この式の中のxPositionもyPositionも、iに関連付けされていないようですが、 そのため、iが0でも3でもx位置とy位置は同じように見えてしまうのです。 説明がへたくそで申し訳ありませんが、どなたか理由を説明していただけないでしょうか。 どうぞよろしくお願いいたします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

for ループで文字を描画しているのではなくて、"★★★★★★★★★★" という文字列をつくってから、 まとめて (xPosition, yPosition)の位置に描画しているということですね。

w_dragon
質問者

お礼

回答ありがとうございます! なるほど! for(int i=0; i<10; i++){   star = star + "★"; } の部分ですでに★が10個できているというわけですね! ありがとうございます!!

関連するQ&A

  • 10列10行の文字列表示について

    お世話になります。 Java超初心者です。 現在、10列10行の文字列を作成しようとしているのですが、 全然うまくいきません。 import java.applet.*; import java.awt.*; public class kadai3 extends Applet{ public void paint(Graphics g){ int xPosition=10, yPosition=20; String Star = ""; for (int i=0;i<5;i++){ Star = Star +"★"; for(int j=0;j<5;j++){ g.drawString(Star,xPosition, yPosition); yPosition = yPosition+10; } } } } こうすると、1列目は25個の星、2列目は上から5行開いて20個の星、 3列目は上から10行開いて15個の星、4列目は上から15行開いて 10個の星、5列目は上から20行開いて5個の星、という形になってしまいます。 それ以外にも、この式の中身の順番をいろいろ変えてみたのですが、 さっぱり綺麗な「10列X10行」になりません・・・ 1日ずっと格闘してて、どうしてもできないので、 何がいけないのかどなたかご教授いただけないでしょうか。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • sin曲線とcos曲線を描くプログラムについて

    お世話になります。 Javaのプログラミングを習い始めたものです。 標記の件ですが、プログラムを見てもどうしてそうなるかが さっぱりわからない部分があります。 import java.awt.*; import java.applet.*; public class Example2 extends Applet{ public void paint(Graphics g){ // 座標軸を描く g.drawLine(20, 10, 20, 130); g.drawLine(20, 70, 230, 70); // sinカーブを描く(20->220) g.setColor( Color.blue); int x0, y0, x1, y1; x1 = 20; y1 = 70; for (int i = 1; i <= 20; i++){ x0 = x1; y0 = y1; x1 = 20+(int)(i/20.0*200); y1 = 70-(int)(50.0*Math.sin(i/20.0*2*Math.PI)); g.drawLine(x0, y0, x1, y1); } // cosカーブを描く(20->220) g.setColor( Color.red); x1 = 20; y1 = 20; for (int i = 1; i <= 20; i++){ x0 = x1; y0 = y1; x1 = 20+(int)(i/20.0*200); y1 = 70-(int)(50.0*Math.cos(i/20.0*2*Math.PI)); g.drawLine(x0, y0, x1, y1); } } これで、赤と青の曲線が描かれるわけですが、 x1 = 20+(int)(i/20.0*200); y1 = 70-(int)(50.0*Math.sin(i/20.0*2*Math.PI)); の部分がさっぱりわかりません。 今まで、"int"は変数宣言でしか用いられなかったのに、 今回突然この式の中に組み込まれており困惑しています。 また、iが回数を表すのはわかりますが、それを全回数で割ったり、 x1の式の中でなぜ200を掛けるのか、 y1の式の中でなぜ2を掛け、さらに円周率まで掛けるのかが どうしても理解できません。 どなたか、ご教授願えませんでしょうか。 あるいは、参考になるサイトを教えていただければ助かります。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaアプレットでのy=x^2のグラフ

    javaアプレットでy=x^2のグラフを描写したいのですが、現在の状態ではグラフの右側しか画面に現れません。軸の移動をすればよいと思うのですが、どのように修正すればよいのでしょうか? import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class test1 extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); int x,yp=100,xp=0; for(x=0;x<200;x++){ int y=(int)(x*x)*(-1)+100; g.drawLine(xp,yp,x,y); xp = x; yp = y; } } }

  • 指摘してください!!!

    JAVA APPLETの初歩的な質問ですが… クリックするとマウスの座標を表示するプログラムなのですが、以下のプログラムでは正しく実行しないのだそうです。 正しく実行するにはいくつかのコードを削除しなければならないのですが…。 それはどのコードなのでしょうか? プログラムは以下の通りです。 import java.applet.*; import vava.awt.*; public class Test extends Applet{   int iX,iY;   public void paint(Graphics g){    int iX,iY;    string c = new String();    g.drawString("X座標 = "+c.valueOf(iX)+"Y座標 = "+ c.valueOf(iY),10,20); } public boolean mouseDown(Event e,int x,int Y){  int iX,iY;  iX = x;  iY = y;  repaint();  return true; } } 宜しくお願いします。

    • ベストアンサー
    • Java
  • Javaのアプレットについて質問です。

    星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Polygon; public class Enshu1_5 extends Applet implements MouseListener { int px []={100,80,10,70,40,100,160,130,190,120}; int py []={10,75,75,113,190,140,190,113,75,75}; private Polygon poly = new Polygon(px,py,10 ); public void init() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.setColor(Color.red); g.fillPolygon(poly); g.setFont(new Font("serif",Font.BOLD,24)); g.drawString("Star",100,200); } } こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで if(e.getX()>x&&e.getY()>y) { int dx=e.getX()-x; int dy=e.getY()-y; x=dx; y=dy; poly.translate(dx,dy); repaint(); }の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか? 教えて下さい><

    • ベストアンサー
    • Java
  • 文字列の表示

    Graph2クラスで作った文字と直線をMainFrameクラスで作ったフレームに表示させたいのですが、フレームが作成されるだけで文字と直線が表示されません。どうすれば表示されるのか是非教えてください。お願いします。 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Graph1 { public static void main(String argv[]) { MainFrame MF = new MainFrame(); MF.setVisible(true); } } class MainFrame extends Frame { public MainFrame() { setLocation(500 , 200); setTitle("MainFrame"); setSize(500 , 300); setLayout(null); //Graph2 aGraph2 = new Graph2(); //aGraph2.show(); addWindowListener(new MyWinL()); } private class MyWinL extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("終了しました。\n"); System.exit(0); } } } class Graph2 extends JApplet { public void paint(Graphics g) { g.setColor(Color.GRAY); for (int i=0; i < 5; i++) { g.drawLine(0, 50*i, 400, 50*i); } for (int i=0; i < 9; i++) { g.drawLine(50*i, 0, 50*i, 200); } Font font1 = new Font("Serif" , Font.PLAIN,30); Font font2 = new Font("SansSerif" , Font.PLAIN,30); Font font3 = new Font("MS P明朝" , Font.PLAIN,30); Font font4 = new Font("MS Pゴシック" , Font.PLAIN,30); g.setColor(Color.RED); g.setFont(font1); g.drawString("Hello! Java world!", 50, 50); g.setFont(font2); g.drawString("Hello! Java world!", 50, 100); g.setColor(Color.BLUE); g.setFont(font3); g.drawString("Hello! Java world!", 50, 150); g.setFont(font4); g.drawString("Hello! Java world!", 50, 200); }; }

    • ベストアンサー
    • Java
  • Java Applet での虫食い算での質問

    初めて利用させていただきます。 今、課題で虫食い算のプログラムを作成しているのですが、うまく動作してくれません。 もしよろしければご指摘をしてもらえればと思い書き込みのほうをさせていただきます。 import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Event; import java.awt.Font; import java.awt.Graphics; import java.awt.Panel; import java.applet.Applet; public class musikuizan_1 extends Applet { int A, B; int cnt; int sub(int n,int m) { int i; for (i=1; i<m; i++) n /= 10; return n % 10; } void puzzle() { int a; int b; int c; int d; int e; for (a=1; a<=99; a++) { for (b=1; b<=99; b++) { c = a * (b % 10); d = a * (b / 10); e = a * b; if (c>=100 && c<=999 && d>=10 && d<=99 && e>=100 && e<=999) /*桁数調整*/ { if (sub(b,1)==3 && sub(c,2)==1 && sub(d,2)==8) /*穴埋めされてある部分の数*/ { A = a; B = b; cnt++; } } } } } public void init() { setBackground(new Color(150,180,200)); setLayout(new BorderLayout()); Panel psouth = new Panel(); psouth.add(new Button("実行")); add("South", psouth); } public void paint(Graphics g) { int i, c, d, e; for (i=1; i<=2; i++) { g.drawRect(97-i*20, 5,16,16); g.drawRect(97-i*20,25,16,16); g.drawRect(77-i*20,65,16,16); } for (i=1; i<=3; i++) { g.drawRect(97-i*20,45,16,16); g.drawRect(97-i*20,85,16,16); } for (i=1; i<=4; i++) g.drawLine(30,43,100,43); g.drawLine(30,83,100,83); g.setFont(new Font("Helvetica",Font.BOLD,18)); g.drawString("x",40, 40); if (A == 0) { g.drawString("3",60, 40); g.drawString("1",60, 60); g.drawString("8",60, 80); g.setFont(new Font("Helvetica",Font.PLAIN,12)); g.drawString("cnt = ",30,115); } else { c = A * (B % 10); d = A * (B / 10); e = A * B; g.setFont(new Font("Helvetica",Font.BOLD,18)); for (i=1; i<=2; i++) { g.drawString(Integer.toString(sub(A,i)),100-i*20, 20); g.drawString(Integer.toString(sub(B,i)),100-i*20, 40); } for (i=1; i<=3; i++) { g.drawString(Integer.toString(sub(c,i)),100-i*20, 60); g.drawString(Integer.toString(sub(d,i)), 80-i*20, 80); } for (i=1; i<=4; i++) g.drawString(Integer.toString(sub(e,i)),100-i*20,100); g.setFont(new Font("Helvetica",Font.PLAIN,12)); g.drawString("cnt = "+Integer.toString(cnt),30,115); } } public boolean action(Event e, Object arg) { if ("実行".equals(arg)) { if (A == 0) puzzle(); else A = cnt = 0; repaint(); } return true; } }

    • ベストアンサー
    • Java
  • シンボルが解決できません

    import java.applet.*; import java.awt.*; public class keiin extends Applet implements Runnable { int narabi[]=new int[10]; public void init(){ } public void start() { } public void paint(Graphics g) { for (int i=0; i==kun+1; i++) { g.drawString(narabi[i],i*30,30); } } public void run() { repaint(); num++; } } public void update(Graphics g) { paint(g); } } というプログラムを作っていて、javacでコンパイルすると、 「C:\Documents and Settings\Administrator\My Documents\ycworks\java\keirin\0.01\keiin.java:49:シンボルを解決できません。 シンボル:メソッド drawstring(int,int,int) 場所:java.awt.Graphicsのクラス g.drawString(narabi[i],i*30,30); ^ と出て、コンパイルされません。 Javacのある場所を環境変数に登録してコンパイルしてみたり、配列変数がおかしいのかと思い、narabi[i]を文字列(g.drawstring("hoge",50,30);)にしたり、試してみたのですが、効果なしです。 解決方法を教えてください

  • 画像がうまく表示されません

    下のプログラムを実行すると、 最初の読みこみはうまくいくのですが、(一部出なくなる画像がありますが…) Internet Explorerの更新ボタンを押した時、 (1)の部分で止まってしまうようで、画像が表示されなくなります。 (ローカルドライブで実行した場合はうまく表示できるのですが、ネットワークで実行した場合にこのようになってしまいます) import java.applet.Applet; import java.awt.*; public class met extends Applet{ Image img[] = new Image[6]; MediaTracker mt; public void init(){ mt = new MediaTracker(this); for(int i = 0;i < 6;i++){ img[i] = getImage(getCodeBase(),i+".gif"); mt.addImage(img[i],0); } try{ mt.waitForID(0); }catch(InterruptedException e){} } public void paint(Graphics g){ // (1) if(!mt.checkID(0)){ g.clearRect(0,0,500,500); g.drawString("読み込み中",200,240); return; } g.setColor(Color.white); g.fillRect(0,0,500,500); for(int i = 0;i < 6;i++){ g.drawImage(img[i],i*50,0,this); } } }

    • ベストアンサー
    • Java
  • アプレットについて

    appletviewerで実行したところ アプレットの枠しか出てきません。中身が現れないのです。どうしたらよろしいでしょうか? import java.applet.Applet; import java.awt.*; /* <APPLET CODE="JFont2.class"WIDTH=500 HEIGHT=100> </APPLET> */ public class JFont2 extends Applet{  public void pait(Graphics g){   String ss="Djia@go",s1;   int baseline1=60,baseline2;   int x1=30,y1;    Font ft=new Font("Serif",Font.PLAIN,48);  g.setFont(ft);  g.drawString(ss,x1,baseline1);     FontMetrics fm=getFontMetrics(ft);   //アクセント上部に線を引く         y1=baseline1-fm.getAscent();     g.drawLine(10,y1,220,y1); } }

    • ベストアンサー
    • Java

専門家に質問してみよう