主人公が入力方向に応じて一歩づつ長方形の部屋を進んで行くソース(の欠片)
というわけですが入力やらウィンドウ表示やらはまだ出来ないので
入力する各方向を数字1〜4で対応させて入力変数に入れて動作するような感じでとりあえず。。。
Hero.java
public class Hero{ int H_x = 5; int H_y = 5; int H_h = 1; int H_w = 1; byte Wall_x,Wall_y; public void heroNow(){ System.out.println("現在地は["+ H_x + ":" + H_y + "]です。"); } public void Move(byte moveIn_m){ if(moveIn_m != 0){ if((moveIn_m == 1) & (Wall_y != 1)){H_y++;} else if((moveIn_m == 2) & (Wall_x != 1)){H_x++;} else if((moveIn_m == 3) & (Wall_y != -1)){H_y--;} else if((moveIn_m == 4) & (Wall_x != -1)){H_x--;} else{System.out.println("そちらの方向には移動できません。");} } } public void checkWall(){ Wall wall = new Wall(); if(H_x - 1 == 0){Wall_x = -1;} else if(H_x + H_w + 1 == wall.Wall_w + 1){Wall_x = 1;} else if(H_y - 1 == 0){Wall_y = -1;} else if(H_y + H_h + 1 == wall.Wall_h + 1){Wall_y = 1;} } }
Wall.java
public class Wall{ int Wall_w = 10; int Wall_h = 10; }
MAIN.java
public class MAIN{ public static void main(String[] args){ Hero hero = new Hero(); hero.heroNow(); for(byte i=1; i<=5; i++){ hero.checkWall(); byte moveIn = 3; hero.Move(moveIn); hero.heroNow(); hero.checkWall(); moveIn = 2; hero.Move(moveIn); hero.heroNow(); } } }
まぁとりあえず
"MAIN.java"は入力の見立てとして動かしてるので妙な感じになってますが気にせずにw
"Wall.java"は今のところは有用でないんですがとりあえず分けるだけ分けておいたという。
なんでまぁ今回のポイントは"Hero.java"ということでどうか一つ…;
↓↓↓ 因みに出力 ↓↓↓
現在地は[5:5]です。 現在地は[5:4]です。 現在地は[6:4]です。 現在地は[6:3]です。 現在地は[7:3]です。 現在地は[7:2]です。 現在地は[8:2]です。 現在地は[8:1]です。 現在地は[9:1]です。 そちらの方向には移動できません。 現在地は[9:1]です。 そちらの方向には移動できません。 現在地は[9:1]です。
おつりの金額からお札・硬貨の枚数を返すメソッド
自動販売機的なプログラムを書くつもりで思いっきりつまりました^q^
とりあえずできた所だけ…
outMoney.java
class outMoney{ int[] Out = new int[5]; public outMoney(int restChange_m){ int[] Out_m; Out_m = new int[5]; short[] Coin = {1000,500,100,50,10}; for(int i = 0; i <= 4; i++) { Out_m[i] = restChange_m / Coin[i]; restChange_m = restChange_m % Coin[i]; } Out = Out_m; } }
"Out[]"に千円〜十円の順で枚数が格納されます。
〜〜〜〜〜追記〜〜〜〜〜
入れた金額から商品一個買ったときのお釣りを割り出すまでもやるように追加
outMoney.java
class outMoney{ int[] Out = new int[5]; public outMoney(int inMoney_m,int Price_m){ int[] Out_m; Out_m = new int[5]; int restChange = inMoney_m - Price_m; short[] Coin = {1000,500,100,50,10}; for(int i = 0; i <= 4; i++) { Out_m[i] = restChange / Coin[i]; restChange = restChange % Coin[i]; } Out = Out_m; } }
で一応確認の為配列の書き出し。
Main.java
import java.io.*; class Main{ public static void main(String[] args){ outMoney outCoin = new outMoney(1000,120); for(int i = 0; i <= 4; i++) { System.out.println(outCoin.Out[i]); } } }
1000円で120円のリアルゴー○ドを購入した時と過程して代入計算…
3/27の日記コメより
昨日ソースの改変を試みたのですが…
エラー続きで完成する前にオワタw
またちょっと時間おいてから考え直しますが…
上手くメソッドが使えてない感がばりばりします^q^
長方形二つを定義して、それらが接触してるか判定するソース
Rectangle.java
class Rectangle{ double x; double y; double w; double h; public Rectangle(double m_x, double m_y, double m_w, double m_h ){ x = m_x; y = m_y; w = m_w; h = m_h; } public double calcArea(){ return w * h; } }
Check.java
class Check{ byte hit; public Check(double a1, double b1,double a2, double b2){ if(a1 <= a2){ if(a2 <= a1 + b1){ hit = 1; } } else{ if(a1 <= a2 + b2){ hit = 1; } } } }
Test.java
import java.io.*; class Test{ public static void main(String[] args){ Rectangle my_rec = new Rectangle(30,20,40,10); Rectangle my_rec2 = new Rectangle(30,40,30,30); System.out.println("物体A"); System.out.println("x: " + my_rec.x + " y: " + my_rec.y); System.out.println("底辺: " + my_rec.w + " 高さ: " + my_rec.h + " 面積: " + my_rec.calcArea()); System.out.println(""); System.out.println("物体B"); System.out.println("x: " + my_rec2.x + " y: " + my_rec2.y); System.out.println("底辺: " + my_rec2.w + " 高さ: " + my_rec2.h + " 面積: " + my_rec2.calcArea()); System.out.println(""); Check hit_x = new Check(my_rec.x, my_rec.w, my_rec2.x, my_rec2.w); Check hit_y = new Check(my_rec.y, my_rec.h, my_rec2.y, my_rec2.h); if(hit_x.hit + hit_y.hit == 2){ System.out.println("物体A・Bは接触しています。"); } else{ System.out.println("物体A・Bは離れています。"); } }
クラスとかメソッドとかがまだ身についてなくて苦労した…
" hit_x.hit "使う所を" hit_x "だけでやろうとしてコンパイル失敗しまくりor2
飛田先生の挑戦状「カンマ(,)区切りの文字列を文字列長の短い順に並びなおすソース」
[問題]
以下のカンマ(,)区切りの文字列を文字列長の短い順に並びなおすプログラムを書け。
SYAMEIMARU,YAKUMO,KOMEIJI,HAKUREI,SCARLET,HONG,HOURAISAN,KAZAMI,AKI
gerocchoの答え -Perlにて-
use strict; use warnings; open(IN,"que2.txt"); my $a = <IN>; close(IN); my $findA = 0; my @list; #---------テキストの配列化---------- until ( index ( $a, ",", $findA ) == -1 ) { my $findB = index ( $a, ",", $findA ); my $word = substr($a, $findA, $findB - $findA); push(@list, $word); $findA = $findB + 1; } my $word = substr($a, $findA); push(@list, $word); #------配列から文字長でソート------ my $A = 0; $a = 1; my @answer; while ( $a > 0 ){ while ($list[0] =~ /(.)/g){ $A++; } $word = $list[0]; my $b = -1; my $C = 0; foreach $a (@list){ $b++; my $B = 0; while ($a =~ /(.)/g){ $B++; } if ( $B < $A ){ $C = $b; $A = $B; $word = $a; } } splice ( @list, $C, 1 ); push (@answer, $word); $a = @list; } #ソート後の配列を,で区切って表示 foreach $a (@answer){ print "$a," }
"que2.txt"に問題の文字列があるという想定で。
とりあえずできるようにツギハギでがんばった結果がこれだよ!
という印象…
飛田先生の挑戦状「1 から100まで順に数を数えていき、特定条件の数字の時に追記するソース」
[問題]
1 から100まで順に数を数えていく。ただし、その数が 3 で割り切れるならば数字の次にアリス と、5 で割り切れるなら数字の次にパチュリーと出力する。3 でも 5 でも割り切れる場合は、数字の次にマリサ と出力する。
gerocchoの答え -Perlにて-
use strict; use warnings; for ($a=1; $a<=100; $a++){ if ( $a % 15 == 0 ){ print "$aマリサ\n"; } elsif ( $a % 3 == 0 ){ print "$aアリス\n"; } elsif ( $a % 5 == 0 ){ print "$aパチュリー\n"; } else { print "$a\n"; } }
恩師 飛田先生からのプログラムのアルゴリズムの理解度テストの第一問をお受けしました。
ただ今第二問をがんばってます…
飛田先生からの挑戦状「特定条件の文字列を抜き取ってカンマ(,)と改行で区切ったテキストファイルを出力するソース」
[問題]
以下の文字列を「リンク先のURL」と「タグ内の文字列」だけ抜き取って、 カンマ(,)と改行で区切ったテキストファイルを出力するプログラムを書け。
<ul> <li href="http://www.fezero.jp/">FEZ公式</li> <li href="http://fewiki.jp/">FEZwiki</li> <li href="http://www38.atwiki.jp/hisouten/">東方緋想天wiki</li> <li href="http://www.kent-web.com/perl/">Perl入門</li> <li href="http://www.hatena.ne.jp/">はてな</li> <li href="http://www.google.co.jp/">google</li> </ul>
gerocchoの答え -Perlにて-
問題の文字列が"que3.txt"にあるとして。"que3a.txt"を作成(or上書き)し処理後の文字列を書き込む。
use strict; use warnings; open(IN,"que3.txt"); my @array = <IN>; close(IN); my @list; foreach ( @array ) { my $a = index ( $_ , "http:/" ); if ( $a > -1 ) { my $b = index ( $_ , "<" , $a ); my $word = substr ( $_ , $a , $b - $a ); push ( @list , $word ); } } my %http; foreach ( @list ) { my @array = split ( '">' , $_ ); $http { $array[0] } = $array[1]; } my $key; my $val; open (OUT, "> que3a.txt"); while ( ( $key , $val ) = each ( %http ) ) { print OUT "$key , $val\n"; } close (OUT );
これだとハッシュ変数のeachのおかげで順番が不定になりますね…