こんにちは。
いつもお世話になっております。
現在Perlを使用してプログラムを組んでいますが、無限ループになってしまうらしく、次の画面に遷移しません。
@selected2には最大10個までの要素が入ります。(要素数は都度違う)
その要素の中から$carno以外の要素を1つ選びたいのですが、このプログラムだとうまく動きません。
do-whileを取るととりあえずは動くので、条件の所が間違っているようなのですが、どう考えても正しいような気がします。
do{
if($ransuu==0){
$ransuu=int rand(11);
}
for($k=1;$k<=$a;$k++){
if($selected2[$k]==$ransuu){
$second=$ransuu;
}
}
}while($ransuu==$carno || $second!=$ransuu);
アドバイスをよろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
$a って何だろうとかいろいろあるんだが・・・
@temp = grep {$_ != $carno} @selected2 ;
$second = $temp[int rand(scalar @temp) + 1];
ってことでしょうか?
@selected2の要素のうち,$carnoと一致しないものからなる
配列をつくり,その配列の任意の要素を取り出せばいいんですよね
質問のコードだと
1から10までの乱数$ransuuをとって,
@seleted2の要素で$rasuuと一致するものを探す
となってますが?
配列の要素とインデックスが混じってませんか?
余計なおせわかもしれないけど
for($k=1;$k<=$a;$k++)
は
for $k (1..$a)
の方がPerl的で見やすいでしょう
後置のdo-whileも避けた方がたぶんメンテナンスしやすいです.
あとPerlでは$aと$bは特別な用途で使われることがあるから
避けた方がいろいろ無難です.
No.4
- 回答日時:
>$second = $temp[int rand(scalar @temp) + 1];
うわ,まちがった(^^;;
$second = $temp[int rand(scalar @temp)];
ですね.
No.1
- 回答日時:
厳密な条件じゃないけど, $ransuu が 0 でなくかつ @selected2 の中に入っていないと無限ループになる可能性があ
ります.この回答への補足
Tacosanさん
早速のご回答ありがとうございます。
以下のように書き換えましたら無限ループはなくなりました。
while($ransuu==0 && ($ransuu==$carno || $second!=$ransuu))
ですが、思うように動きません。
$ransuu==$carno でも $second!=$ransuu でもdo-while文から抜けてしまい、@selected2の要素以外や$carnoの値も$secondに入ってしまいます。
何かおかしいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
Excel VBA ユーザーフォームの...
-
複数の配列の全ての組み合わせ...
-
VB6で配列の最大値を簡単に求め...
-
二次元配列のインデックスについて
-
MATLABの関数で配列の要素を返...
-
FORTRAN90で書式に変数を使いたい
-
2次元配列がわかりやすく記述...
-
perlで配列の要素が空なのを知...
-
二次元配列における要素数のは...
-
VBScript 配列
-
エクセルVBAでTransposeの不思議
-
サブルーチンの戻り値
-
Perlで<select multiple>の複数...
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
ListBox 複数選択 で オートフ...
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
再帰関数のインライン展開
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dim flag(4) as boolean で配列...
-
VBAのautofilter、criteriaの配...
-
二次元配列のインデックスについて
-
二次元配列における要素数のは...
-
エクセルVBAでTransposeの不思議
-
クラスに配列を渡す方法
-
リストボックスに縦スクロール...
-
マクロ Publicでの配列定義
-
Excel VBA ユーザーフォームの...
-
文字の整列(printf)
-
perlで配列の要素が空なのを知...
-
perl 配列の要素数について
-
Strawberry Perl for Windows ...
-
VBA 二次元配列の1つ目を増...
-
チェックボックスのperlでの値...
-
perl 初等プログラミングについて
-
DBIを使ってSelect文 複数のカ...
-
複数のキーで配列をソートする...
-
newで個別に生成した配列にNULL...
-
Excel(VBA)で配列の要素数を...
おすすめ情報