プログラミングやってるんだけど整数の1を整数変数のnumberに代入したらnumberの値が0になっててわけわからん
■ このスレッドは過去ログ倉庫に格納されています
using System.Diagnostics.CodeAnalysis;
class Program
{
static void Main()
{
int[] inputtedNumbers;
while (true)
{
try
{
Console.WriteLine("半角カンマ区切りで整数を入力してください。");
var line = Console.ReadLine();
if (line == null)
throw new Exception();
inputtedNumbers = line.Split(',').Select(x=>int.Parse(x)).ToArray();
break;
}
catch
{
Console.WriteLine("入力値が不正です。");
}
}
var matrixSize = inputtedNumbers.Length;
var matrix=new Matrix(matrixSize,matrixSize);
for(int i = 0; i < matrixSize; i++)
{
for(int j=0; j < matrixSize; j++)
{
matrix.Factors[i, j] =Pow(i,j);
}
}
int[] functionCoefficients = matrix.Inversed()*inputtedNumbers;
for(int i = matrixSize-1; i >0 ; i--)
{
Console.WriteLine($"({functionCoefficients[i]})x^{i + 1} + ");
}
Console.WriteLine($"({functionCoefficients[0]})");
Console.ReadKey();
}
static int Pow(int powered,int powering)
{
int product=1;
for(int i = 1; i <= powering; i++)
{
product *= powered;
}
return product;
}
} >>12
あー
これは確かに整数の1を整数変数のnumberに代入したらnumberの値が0になってしまうわ こういうスレ立てるやつってまず言語書かないのなんなの varなんてつかうな
Object型で扱ってるようなもんだぞ >>20
実際はnumberっていう変数は無い
スレタイでわかりやすく便宜的にそう詠んだだけ
25行目が問題の場所
13行目のReadLine()でコンソールに「1」と入力したら、25行目のmatrixSizeが0になって困惑してる >>25
25行目の右辺は1なのに左辺は0になるのがおかしい >>25
なんだぁ?お前解決する気ないだろ
上司に相談するってなってもこのスレみたいに相談するのかよおん? >>28
さあ
わからん
プログラマーじゃないので 25行目どこだよ
お前の環境だと横に行数書いてるんだろうけどこっちはコードだからダルいわ ごめんなぁ…俺らはコード見て瞬時に解決方法がわかるエリートじゃないから
コメント入れろよなぁとかどうでもいいことに意識が向いてお前を叩きたくなっちまうんだ for(int i = matrixSize-1; i >0 ; i--)
この行おかしくない?
for(int i = matrixSize-1; i >=0 ; i--)
こうじゃない? >>34
そこは敢えてそうしてる
むしろ間違えたのはそこのfor文内でWriteLineメソッドを使ってたところかもしれない
Writeメソッドを使ってたつもりだった C#数年やってないから忘れちゃったなー
ぱっと見良さそうに見える
while(true)ですぐbreakしてたり意味わかんないけど >>36
try内で例外が発生したらwhileから抜け出せないようにしてる >>25
Lengthが0なら間違ってるのは inputtedNumbers = line.Split(',').Select(x=>int.Parse(x)).ToArray(); の部分だろ
何の言語か知らんけど そもそもこういう時に例外投げるのも意味わからんけど inputtedNumbersに想定した値入ってるかみた? c#わからんけどinputtedNumbersの要素数がおかしいんじゃないの 入力した文字列取ってきてそのままintに突っ込んでるからじゃね? LINQとか構造体使うレベルなら自分でわかってるんじゃないの? >>39
いろんな例外を想定して分岐とかがめんどくさいから例外が発生したらとりあえずもっかい入力させてる
横着だと思う ほんとにこれ0になってんの?
右辺1なら左辺0になるはずないと思うよ matrixSizeの値を確認したタイミングはいつ?
代入直後?
領域外アクセスとかでmatrixSizeの値が壊れてないか気にしてる >>49
inputtedNumbersの要素数は1
inputtedNumbers[0]は1
inputtedNumbers.Lenghは1 inputtedNumbers.lengthが1なのにmatrixSizeが0になるのか? var matrixSize = inputedNumbers.Length;
の行にブレークポイント貼ってmatrixSizeの値確認してるとかない? その値はどうやって確認したの?
ブレークポイント打ったりしたの? >>58
ブレークポイント設定してます
それが原因でしょうか? >>55
うーんとなると後思いつくのはコンパイラの最適化オプションあたりか
最適化つけてコンパイルしてたりしない?
最適化つけてデバックやるとステップ実行してもその行のプログラム実行前だったりする
もしそうならprintで変数ダンプするか最適化切ってコンパイルしてみるといいかも 仮に25行目でブレークポイント止めてたら代入前だから0だぞ >>61
ブレークポイントの位置が問題
25行目じゃなくて26行目にブレークポイント張ってもう一回同じ確認してみ >>61
!?
それなら0出る…
いっこしたの行でブレークして確認しなきゃ >>61
もしそれならmatrixSizeの値が変わるのは1行後です
その行を実行することでmatrixSizeの値が変わるので
ブレークポイントで止まったときはその行の処理が実行される前です ブレークポイントってその行の実行直前で止まるの?直後で止まるの?
直前だった気が 勉強してて偉い
これからみんなに酷いこと言われるけど続けろよ >>62
なるほど!
当たってそうです!
調べてみます!
ありがとうございます! >>70
有効なレスの読み飛ばしのプロ>>1
だがその腕前は日本じゃぁ2番目だ >>64,66,67
なるほど……
しょうもないことでお騒がせしてすみませんでした…… >>72
みんな経験してきてる事だから気にせず行こう
成長のコツは失敗の積み重ねよ これくらいで恥ずかしいとか言ってたらキリ無いぞ
もっと堂々と間違えていけ こういうことがあるからプリントデバッグも馬鹿にできないのかもね >>77
ありがとうございます!
そのとおりですね! >>78
もっと多角的な視点が要ると学ばされましたね
コードとにらめっこばかりじゃ駄目ですね >>79
これよこれ
積極的に人に見せて間違い指摘してもらのが一番成長早いし
そういう積極性があるって意味では向いていると思うけどね俺は >>80
理解が深まりそうですよね
>>83
ありがとうございます というかバグってたからデバッガ使ったんじゃないのか?
原因がそこでないことがわかっただけで元のバグはまだ治ってなかったりして >>88
実はそうです……
でもなんとなく難所は乗り切った感あります きたら解決してた
想像以上にしょうもない理由だった
ちなみにわからないときは変数じゃなくて直接数字入力するとどこで死んでるのか分かるよ あとはオブジェクト指向的にプログラミングして怪しい挙動するところはコメントアウトで飛ばしてみて想定される出力と比較してみるとかね
想像以上にコメントアウトは便利よ まぁこういう上手くいかない原因って大抵しょーもない見落としなんだよね >>90
直接というのはいわゆるリテラルということですかね?
ありがとうございます! >>91
そうなんですね
コメントアウトにそんな利便性が
デバッグとしてのコメントアウトについてそういえば全然知らないことに気づきました
色々調べてみます >>92
そういうものなんですね!
特別自分が間抜けなわけではないのならありがたいです なんでもcatchさせるならReadLineの戻り値がnullの時の例外スローわざわざ書く意味無くない?どうせsplitでスローされるし。 >>98
言われてみればそうですね……
気づきませんでした!
ありがとうございます! ブレークの位置、昔教えてた新卒も同じことやってたわ懐かしい
頑張ってね応援してるよ >>1
C#は全自動文字列数値変換言語じゃないから
はい、論破 ■ このスレッドは過去ログ倉庫に格納されています