• 締切済み

javaのプログラミングについての質問です

javaのプログラミングについての質問です 任意の複数の数値を入れたファイルを読み取りその数値の場所から次の数値まで線を描画するプログラミングを作成しました ここから発展問題としてタートルグラフィックスを 描画するプログラムを50歩進み右に90度曲がることを4度繰り返すという条件で作ってみようと思ったのですが上手くコンパイルが通りません 取りあえず分かっているのは (100.cos45,100.sin45)で90°曲がる repeat 4,forward 50right 90 end 0 だけです もし分かる方がいらっしゃいましたらご返答宜しくお願いします import java.awt.*; import java.awt.event.*; import java.io.*; public class mondai{ int x[] = new int[100]; int y[] = new int[100]; int len = 0; public static void main(String[] args){ new mondai(args[0]); } public mondai(String mondai2){ ReadFile rf = new ReadFile(mondai2); String line; while( (line = rf.gets()) != null) { String[] date = line.split(","); if(date.length == 2){ x[len] = Integer.parseInt(date[0]); System.out.println(date[0]); y[len]= Integer.parseInt(date[1]); System.out.println(date[1]); len++; } } Frame f = new Frame(); f.setTitle("Line"); f.setSize(640,480); f.setLayout(null); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); }}); DrawArea da = new DrawArea(); da.setBounds(0,0,640,480); f.add(da); f.setVisible(true); } private class DrawArea extends Canvas{ public void paint(Graphics g){ for(int i=0;i<len-1;i++) g.drawLine(x[i],y[i],x[i+1],y[i+1]); } } private class ReadFile{ FileInputStream fis; InputStreamReader isr; BufferedReader br; public ReadFile(String filename){ try{ fis = new FileInputStream(filename); isr = new InputStreamReader(fis); br = new BufferedReader(isr); }catch(Exception e){ e.printStackTrace(); } } public String gets(){ String line = ""; try{ line = br.readLine(); }catch(Exception e){ e.printStackTrace(); } return line; } } }

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

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

分からないことは何ですか? > 50歩進み右に90度曲がることを4度繰り返す 開始地点と今どちらを向いているかの情報があれば、50歩進んだときの終了地点を計算することができますから、その2点間に直線を引けばいいです。 90度曲がるためにも、今向いている方向が必要です。 > 取りあえず分かっているのは > (100.cos45,100.sin45)で90°曲がる この部分は、きっと何かを勘違いしています。 > repeat 4,forward 50right 90 end 0 このように書かれているファイルを読み込んで「50歩進み右に90度曲がることを4度繰り返す」と解釈できるようにするのは意外と面倒です。プログラムを書く前に、どんな命令列があり得るのか、きっちりと文法を定義する必要があります。 > 上手くコンパイルが通りません 質問文中に提示されているプログラムはコンパイルできるようです。コンパイルに失敗するプログラムと、そのエラーメッセージを示してください。

関連するQ&A

  • javaプログラミングの質問です。

    http://questionbox.jp.msn.com/qa1030602.html?StatusCheck=ON に載っている、プログラムを以下のようにQuestionというクラスで実行してみたところ、 import java.io.*; class Question{ public static void main(String Args[]){ BufferedReader reader = null; String strArray[][] = new String[4][4]; String fileName = "foo.txt"; int i = 0; int j = 0; try{ reader = new BufferedReader ( new FileReader(fileName) ); String line; while ( (line = reader.readLine() ) != null ){ StringTokenizer st = new StringTokenizer ( line ); while ( st.hasMoreTokens() ){ strArray[i][j] = st.nextToken(); System.out.print ( strArray[i][j] + " " ); j ++; } j = 0; i ++; System.out.println (""); } } catch ( Exception e ){ System.out.println ( e.toString() ); } } } Exception in thread "main" java.lang.Error: コンパイル問題が未解決です。 StringTokenizer を型に解決できません。 StringTokenizer を型に解決できません。 というエラーが出ます。 このサイトの質問者はうまくいっているようなのですが、私のコンパイラがうまく動いていないのでしょうか? java version "1.6.0_07" を使っていて、Eclipseを用いてコンパイルをしたりしています。 どなたかご指摘をどうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaプログラミング

    javaとYahooのWebサービスを利用して、検索結果のxmlを取り出し、 ○○.xmlという引数を与えて、結果を書き出そうとしていますが、 以下のプログラムだと文字(日本語)が化けてしまいます。 どうにかして文字化けせず取り出すことはできないでしょうか。 よろしくおねがいします。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.InputStream; import java.net.URL; public class YahooWebServiceExample { public static void main(String[] args) { String request = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch? appid=web_research&query=%e6%b2%96%e7%b8%84&results=2"; try { // ファイル出力ストリームを取得(第二引数) BufferedWriter bw = new BufferedWriter(new FileWriter(args[0])); URL url = new URL(request); InputStream in = url.openStream(); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { for (int i = 0; i < len; i++) { System.out.print((char) buf[i]); bw.write(buf[i]); } } in.close(); bw.close(); } catch (Exception e) { System.out.println("Web services request failed"); } } }

    • ベストアンサー
    • Java
  • Javaでよくわからないエラーが出てしまいます。

    こんにちは。 Javaでプログラムを作っている途中で ArrayIndexOutOfBoundsException というエラーが出てきました。 調べてみると"配列として確保された領域を 超えた場所アクセスした場合に発生"と書かれていました。 しかし、エラーの部分を見つけることができません。 以下に問題のプログラムを掲載します,問題点を指摘してもらいたいのです。 よろしくお願いします。 ちなみに開発環境はJava7です。 -------------以下プログラム------------- import java.io.*; public class Datain{ public static String[][] datain(){ String inputFileName; String indata_1; String[] indata_2 = new String[12]; String[][] mondata = new String[100][12]; int i = 0; //読み込むファイル名 inputFileName = "H:\\問題データ.txt"; //ファイルオブジェクトの生成 File inputFile = new File(inputFileName); try{ //入力ストリームの生成 FileInputStream fis = new FileInputStream(inputFile); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); //テキストファイルからの読み込み while((indata_1 = br.readLine()) != null){ indata_2 = indata_1.split(","); for(int z = 0;z < indata_2.length;z++){ mondata[i][z] = indata_2[z]; } i++; } br.close(); }catch(Exception e){ e.printStackTrace(); } return mondata; } public static void main(String[] args){ String[][] a; a = datain(); System.out.println(a[0][0]); } } -------------テキストファイル------------- あいう,えおか,きくけ こさし,すせそ,たちつ てとな,にぬね,のはひ ※カンマ区切りの「.txt」ファイル

    • ベストアンサー
    • Java
  • プログラミングを始めたばかりの初心者です

    プログラミングを始めたばかりの初心者で、行き詰っていることがあります。 Windows環境でjavaのプログラミングをしています。(JDK1.7.0_03) InputFileというファイルを、指定したバイト単位で文字を切り出し、新たなOutputFileという ファイルに書き出したいのですが、以下の例のように、全角マイナスだけが?と表示されて しまい、うまくいきません。 InputFile 田中太郎 tanaka tarou  タナカタロウ 田中町1-1-1 06011112222・・・ 吉田花子 yoshida hanako ヨシダハナコ 吉田町2-2-2 01011113333・・・ 山田良子 yamada yoshiko ヤマダヨシコ 山田町3-3-3 02011115555・・・ OutputFile 田中太郎 tanaka tarou  タナカタロウ 田中町1?1?1 06011112222・・・ 吉田花子 yoshida hanako ヨシダハナコ 吉田町2?2?2 01011113333・・・ 山田良子 yamada yoshiko ヤマダヨシコ 山田町3?3?3 02011115555・・・ お見せするのも恥ずかしい滅茶苦茶なソースかもしれませんが現状は以下の通りです。 どなたか教えていただけないでしょうか。よろしくお願い致します。 (読み込むInputFileというファイルの文字コードはEUCです。) ソース import java.io.*; class ReadTest{ static LineNumberReader inr; static InputStreamReader isr; static String FN = "InputFile"; static OutputStreamWriter osw; public static void main(String[] args) { String line; try { FileInputStream fis = new FileInputStream(FN); isr = new InputStreamReader(fis,"EUC_JP"); inr = new LineNumberReader(new BufferedReader(isr)); FileOutputStream fos = new FileOutputStream("OutputFile"); osw = new OutputStreamWriter(fos,"EUC_JP"); BufferedWriter bw = new BufferedWriter(osw); while ((line = inr.readLine()) != null) { bw.write(new String(line.getBytes(),0,120)); bw.newLine(); } System.out.println(inr.getLineNumber() + "件読み込み完了"); fis.close(); isr.close(); bw.close(); fos.close(); } catch (IOException e) { System.out.println(e); } } }

  • Javaでのカンマで配列を分ける方法

    こんにちは。 カンマ区切りで入力されているデータを2次元配列に格納したいのですがよくわかりません。 それとデータをtxtファイルから入力する方法で配列を入力した分だけ作ることはできますでしょうか? 現在のプログラムは最初に配列を1000個用意する形になっているので効率的とは言えないと思うのですが・・・。 以下プログラムを載せます。 public String[] datain(){ String[] data = new String[1000]; String inputFileName; int i = 0; // 読み込むファイルの名前 inputFileName = "D:\\a.txt"; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); try { // 入力ストリームの生成 FileInputStream fis = new FileInputStream(inputFile); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); // テキストファイルからの読み込み String d; while ( ( d = br.readLine()) != null ) { data[i] = d; i += 1; } br.close(); } catch(Exception e) { e.printStackTrace(); } return data; } というメソッドです。 戻り値を返した後でも前でもいいので、 --データ-- (a.txt) あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ ↓このように取り込みたいのです。 --配列-- [0,0] = あ  [0,1] = い  [0,2] = う  [0,3] = え  [0,4] = お [1,0] = か  [1,1] = き  [1,2] = く  [1,3] = け  [1,4] = こ [2,0] = さ  [2,1] = し  [2,2] = す  [2,3] = せ  [2,4] = そ よろしくお願いします。

    • ベストアンサー
    • Java
  • javaについて

    キーボードから入力をして、その後str[0][0]とstr[1][0]の文字を繋げたいのですがエラーとなってしまいます。どう変えたらよいでしょうか。 以下がプログラムです。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu3 { public static void main(String[] args) throws IOException { int KEYWORDMAX=10; int CNTMAX=100; String [][]str = new String[KEYWORDMAX][CNTMAX]; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line=null; for (int i=0;i<KEYWORDMAX;i++){ System.out.println("第"+(i+1)+"番目のキーワードを設定しますか?(y/n)"); line=br.readLine(); if(line.equals("n")) break; for (int s=0;s<CNTMAX;s++){ System.out.println("キーワードを入力してください(終了=0)"); line=br.readLine(); if(line.equals("0"))break; str[s][i]=line; } } String keyword = new String(str[0][0]" "str[1][0]); System.out.println("キーワードは "+keyword); } } 以下はエラー表示です。 gugu3.java:24: ')' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: 文ではありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: ';' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ エラー 3 個

    • ベストアンサー
    • Java
  • javaのプログラミングについての質問です。

    Javaのプログラムについての質問です。長くなってしまいますがご容赦下さい。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。以下が現在までに作成したコードになります。 注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中にコメントを振ってあります。 import java.util.List; import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; class Mylist implements List{   private int Count;   private String Data[];   // コンストラクタ   public Mylist(){    Data = new String[10];    Count = 0;   } /** 実装するaddメソッド @return boolean APIの設定に従う @param e エレメント(要素) **/   public boolean add(E e){    Data[Count] = (String)e;   Count++;   return true;   }   public void add(int i,Object str){   }   public boolean addAll(Collection c){     return false;   }   public boolean addAll(int i,Collection c){     return false;   } /** 実装するclearメソッド **/   public void clear(){     Count = 0;   }   public boolean contains(Object str){     return false;   }   public boolean containsAll(Collection c){     return false;   }   public boolean equals(Object str){     return false;   } /** 実装するgetメソッド @return E エレメント(要素) @param i 指定されたインデックス番号 **/   public E get(int i){      /*     エレメントeに、String型Data[i]を     キャストして格納*/     E e = (E)Data[i];     return e;   }   public int hashCode(){     return -1;   }   public int indexOf(Object str){     return -1;   }   public boolean isEmpty(){     return false;   }   public Iterator iterator(){     return null;   }   public int lastIndexOf(Object str){     return -1;   }   public ListIterator listIterator(){     return null;   }   public ListIterator listIterator(int i){     return null;   }    /**   * 実装するremoveメソッド   * @return E エレメント(要素)   * @param index 指定されたインデックス番号   **/   public E remove(int index){ /* Dataを最大まで回し、iをインクリメントしたData[i++]を String型Dataに格納する*/ for(int i = index; i < Data.length; i++){ Data[i] = Data[index++]; } Count--; E e = (E)Data; return e; } public boolean remove(Object str){ return false; } public boolean removeAll(Collection c){ return false; } public boolean retainAll(Collection c){ return false; } /** * 実装するsetメソッド * @return E エレメント(要素) * @param i 指定されたインデックス番号 * @param element 置き換える要素 **/ public E set(int i,E element){ // String型Dataにelementをキャストして格納 Data[i] = (String)element; // エレメントeにData[i]をキャストして格納 E e = (E)Data[i]; // 値を返す return e; } /** * 実装するsizeメソッド * @return int 指定されたインデックス番号 **/ public int size(){ return Count; } public List subList(int i,int j){ return this; } public Object[] toArray(){ return Data; } public Object[] toArray(Object[] a){ return Data; } } class Main { /** メインメソッド **/ public static void main(String args[]) { Mylist sub = new Mylist(); /* addメソッドを実装し、機体名を要素とする。 addを最大まで回し、getメソッドで要素を取り出して表示する*/ sub.add("ビルドバーニングガンダム"); sub.add("ライトニングガンダム"); sub.add("ウイニングガンダム"); sub.add("ガンダムフェニーチェリナーシタ"); sub.add("R・ギャギャ"); sub.add("ユニコーンガンダム"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // sizeメソッド System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n"); // setメソッド sub.set(0,"ガンダムエピオン"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // removeメソッド sub.remove(1); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // clearメソッド sub.clear(); System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです"); } } コンパイルして実行すると、removeメソッドで指定した箇所ではなく、要素の1番最後が削除されています。思うに、removeメソッドを実装する所のfor(int i = index; i < Data.length; i++){の中の条件が違うと思うのですが。。。。 また、現在addには10個箱を作成するようにしていますが、11個目をメインクラス内で用意した場合、例外ではなく新たに箱を作らなければならない、という後だしジャンケン的な事を言われて、思わず「じゃあArrayListでいいじゃないか」と思ってしまいました。 気を取り直してこの3連休で終わらせたいと思っています。ここまでで現状コードの完成は50%かそれ以下だとは思いますが、どなたか上記2点について御教授頂けないでしょうか。よろしくお願い致します。

  • javaのプログラミング(連続する整数の和)

    javaのプログラミング(連続する整数の和) 大学で出た課題です。 「ある自然数nを入力し、n=○+○+…+○と連続する整数の和で表すプログラミングをつくれ。」というものです。 以下に、私が考えたものを載せます。これだと連続する2つの整数の和では表すことができるのですが、3つ以上の整数の和を表すことができません。どうすればよいでしょうか? import java.io.*; public class  n { public static void main(String[] args) { int n; BufferedReader rd = new BufferedReader(new InputStreamReader(System.in)); try{ String line; System.out.print("整数:"); line = rd.readLine(); n = Integer.parseInt(line); } catch(IOException e){ System.out.println("入力エラーが発生しました。"); return; } catch(NumberFormatException e){ System.out.println("整数を入力してください。"); return; } for(int i=1;i<=n;i++){ int k=i+1; if(i+k==n) System.out.println(i+"+"+k); } } }

  • プログラムの作り方

    Object Day() { Date tm = new Date(); SimpleDateFormat formatter1 = new SimpleDateFormat("E",Locale.getDefault()); String weekX = formatter1.format(tm); SimpleDateFormat formatter2 = new SimpleDateFormat("F",Locale.getDefault()); int weekY = Integer.parseInt(formatter2.format(tm)); String week[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; for(int i=0; i<week.length; i++) { if(week[i] == weekX) { int x = pos_x + (i * pos_len); break; } } int y = pos_y + (weekY * pos_len); return new Point(x,y); } このようなプログラムをしたときに、Point(x,y)のxが未定義ですとエラーが出ます。なぜ未定義なのですか?またどうすれば回避できますか?

  • 「プログラミング」JAVAのエラーが解決できません。

    ホームページを見たり、メールチェックをしたり、数分間このプログラムを走らせると、 Address already in use: connect java や Connection refused: connect といったエラーメッセージが出ます。 どうすれば、解決するでしょうか? やさしいJAVAやインターネットで調べたのですが良い方法が分かりません。ぜひ、ご教示宜しくお願い致します。 import java.net.*; import java.io.*; import java.util.*; import java.text.*; class Test { public static void main(String[] args) throws Exception { String helloURL; for(int a=1; a<3000; a++) { helloURL = "http://shopping.yahoo.co.jp/"; Th th1 = new Th(helloURL); th1.start(); Thread.sleep(100); } } } class Th extends Thread { String helloURL = null; String line; Th(String str) { this.helloURL = str; } public void run() { try { URL url = new URL(helloURL); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"JISAutoDetect")); while ((line = in.readLine()) != null) { try { OutputStream os = new FileOutputStream("log.txt",true); BufferedWriter fr = new BufferedWriter(new OutputStreamWriter(os)); if(line.indexOf("ヤフー") != -1) { fr.write(line); } if(line.indexOf("あ") != -1) { fr.write(line); } fr.close(); os.close(); } catch(Exception e){System.out.println("エラー1 : "+e.getMessage());} } in.close(); } catch(Exception ex){System.out.println("エラー2 : "+ex.getMessage());} } }

    • ベストアンサー
    • Java

専門家に質問してみよう