• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#)

C#でクラスIntArrayを作成し正常な動作を検証する方法

このQ&Aのポイント
  • C#の質問です。クラスIntArrayを作成し、正常な動作を検証するためのクラスを作成する方法について教えてください。
  • 作成したクラスIntArrayが正しく動作しているかどうかを検証するためのクラスを作成する方法を教えてください。
  • クラスIntArrayとその動作を検証するためのクラスを作成したのですが、クラスIntArrayについて指摘を受けました。どの部分が問題なのか教えてください。

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

  • ベストアンサー
noname#259269
noname#259269
回答No.1

課題の放棄に見えるのですが。。。がんばって自分で考えましょう。 ぱっと見ですが、疑問に思ったことを書きます。 後続の課題に対する伏線があるかもしれないので、直接の回答は書きません。 1.配列要素を Console 出力せよ、とはどこにも書いていないが? 2.コンストラクタ2つめと3つめの仕様を言葉どおりにとりすぎでは?(コンストラクタから抜けると破棄されるような配列を確保しても意味がない。) 3.Sort が言葉どおりの仕様になっていない。 4.少なくとも GetArray はおかしい。GetElement は実装できているのに。。。 他にも気になるところがありますが、このぐらいにて。

noname#114110
質問者

お礼

ご回答ありがとうございました! ご指摘いただいた箇所を見直してみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • IntArrayクラスのプログラムを組んでいるのですが・・・

    javaプログラミングで以下の内容を満たす、IntArrayクラスを作成しています。 ・インスタンス変数  int型の配列data ・コンストラクタ  (1)int型の配列を受け取り、そのコピーを内部的に保持する  (2)第1引数で指定された要素数を持つ配列を確保し、全ての要素に初期値として第2引数で指定された値をセットする  (3)第1引数で指定された要素数を持つ配列を確保し、全ての要素に初期値としてゼロをセットする ・メソッド  (1)sort   内部的に保持している配列を、引数の値がtrueであれば昇順、falseであれば降順にソートする  (2)length   IntArrayが保持している配列の要素数を取得する  (3)getElement   引数に指定された要素番号の値を取得する  (4)setElement   第1引数に指定された要素番号に第2引数で指定された値を格納する   (5)getArray   IntArrayが保持している配列のコピーを取得する 実際にプログラムを組んでみたのですが、※の部分が冗長だと指摘を受けました。 しかしどのように修正したらよいかわかりません。 どうかアドバイスなどをよろしくお願いいたします。 package java_Lesson; import java.util.Arrays; /** * int型の配列dataの要素を取得、あるいは操作するクラス */ class IntArray { private int[] data; /** * int型の配列を受け取り、そのコピーを内部的に保持する * * @param args コピー元となる配列 */ IntArray(int[] args) { data = (int[])args.clone(); } /** * 第1引数で指定された要素数を持つ配列を確保し、 * 全ての要素に初期値として第2引数で指定された値をセットする * * @param arg1 配列の要素数 * @param arg2 配列の初期値 */ IntArray(int arg1, int arg2) { this(arg1); /* ※ */ for (int index = 0; arg1 > index; index ++) { data[index] = arg2; } } /** * 第1引数で指定された要素数を持つ配列を確保し、 * 全ての要素に初期値としてゼロをセットする * * @param arg 配列の要素数 */ IntArray(int arg) { data = new int[arg]; } /** * 内部的に保持している配列を昇順、あるいは降順にソートする * * @param arg trueであれば昇順、falseであれば降順にソート */ void sort(boolean arg) { Arrays.sort(data); if (arg) { return; } int array = data.length - 1; for (int index = 0; array > index; index ++, array --) { int temp = data[index]; data[index] = data[array]; data[array] = temp; } } /** * IntArrayが保持している配列の要素数を取得する * * @return 配列の要素数 */ int length() { return data.length; } /** * 引数に指定された要素番号の値を取得する * * @param arg 返す要素の要素番号 * * @return 配列dataの要素番号argの値 */ int getElement(int arg) { return data[arg]; } /** * 第1引数に指定された要素番号に第2引数で指定された値を格納する * * @param arg1 値を格納する要素番号 * @param arg2 配列に格納する値 */ void setElement(int arg1, int arg2) { data[arg1] = arg2; } /** * IntArrayが保持している配列のコピーを取得する * * @return 配列dataのコピー */ int[] getArray() { return data.clone(); } }

    • ベストアンサー
    • Java
  • c# コマンドラインから引数の指定の仕方

    c#を勉強している初心者です。 入門書やネットで検索してもコマンドラインから引数の指定の仕方が わかりません。 次のように書いた後 class CommandLine {    static void Main(string[] args)     {        Console.WriteLine("parameter count = {0}", args.Length);        for (int i = 0; i < args.Length; i++)        {           Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);        }     } } デバックなしで開始 → 続行するには何かキーを押してください で終わってしまいます。 いつ、どのようにしてコマンドラインから指定(書き込む?)のですか? よろしくお願いします。

  • C#について

    using System; class AddressBook: PhoneBook { private string address; public AddressBook() : base() { address=""; } public void Input() { base.Input(); Console.Write("住所?"); string address=Console.ReadLine(); } public void Writes() { base.Write(); Console.WriteLine("住所:{0}",address); } } class kadai62 { public static void Main() { Console.Write("電話帳に入力する人数を入れてください:"); int n = int.Parse(Console.ReadLine()); AddressBook[] pb = new AddressBook[n]; int i; for (i = 0; i < pb.Length; i++) { pb[i] = new AddressBook(); Console.WriteLine("{0}番目を入力してください.", i+1); pb[i].Input(); } Console.WriteLine(); while(true) { Console.Write("どこから探しますか?[1:氏名,2:自宅電話,3:携帯電話,0:終了] "); int t = int.Parse(Console.ReadLine()); if (t == 0) break; Console.Write("探す文字列は?"); string s = Console.ReadLine(); for (i = 0; i < pb.Length; i++) { if (pb[i].Search(t, s)) pb[i].Writes(); } } } } このプログラムで public void Writes() { base.Write(); Console.WriteLine("住所:{0}",address); } のaddressが出力されません・・どうすれば 出力されますか?

  • C++ ファイル列挙について

    以下のコードで指定のファイルを検索し、フルパスで配列に格納しています。 このとき、ファイル名のみ(パスと拡張子無し)で格納する方法はありますでしょうか。 どうかよろしくお願いします。 // enum_files.cpp // compile with: /clr using namespace System; using namespace System::IO; int main() { String^ folder = "C:\\"; array<String^>^ dir = Directory::GetDirectories( folder ); Console::WriteLine("--== Directories inside '{0}' ==--", folder); for (int i=0; i<dir->Length; i++) Console::WriteLine(dir[i]); array<String^>^ file = Directory::GetFiles( folder ); Console::WriteLine("--== Files inside '{0}' ==--", folder); for (int i=0; i<file->Length; i++) Console::WriteLine(file[i]); return 0; }

  • Visual C++ 2008 Express Editionの”hello worldのプログラム”

    CUIのプロジェクト作成で自動的に // cui_test.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); return 0; } このようなプログラミングができて一つ疑問ができたのですが、 ”Console::WriteLine(L"Hello World");” System::Console:: のメソッドの中にある ”WriteLine(L"Hello World");” なぜ”(L"Hello World")”という引数の書き方をしているのですか? ”L”と”"Hello World"”というのは別々の引数として登録しているのでしょうか? オブジェクトブラウザでSystem::Console:: WriteLineを検索したのですが、18種類あってどれを使っているのかわかりません。 教えてくださいよろしくお願いいたします。

  • 多次元配列のソートがうまくいかない

    多次元配列のソートがうまくいかない 質問失礼します. 以下のような,String型,int型,double型の混在した多次元配列([3][3]の配列)をソートするプログラムを作成しました. このプログラムでは3番目の項目でソートを行っています. 問題点なのですが, 3番目の項目がdouble型の一桁(例えばarray[1][2]が2.0)ならばうまくソートできるのですが, 一つを2桁(例えばarray[1][2]を10.0)にすると何故か先頭の数(10.0の場合1)を基準にソートされてしまっているようです・・・ 配列へのデータの入れ方が間違っているのでしょうか? 原因がはっきりわからず困っているのですが, わかる方いましたらよろしくお願いします. public class Sort_test { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String[][] array = new String[3][3]; array[ 0 ][ 0 ] = "A"; array[ 0 ][ 1 ] = 2001+""; array[ 0 ][ 2 ] = 9.0+""; array[ 1 ][ 0 ] = "B"; array[ 1 ][ 1 ] = 1001+""; array[ 1 ][ 2 ] = 2.0+""; array[ 2 ][ 0 ] = "C"; array[ 2 ][ 1 ] = 3001+""; array[ 2 ][ 2 ] = 6.0+""; TheComparator comparator = new TheComparator(); // 3番目の項目でソートするように設定 comparator.setIndex( 2 ); // ソート実施 Arrays.sort( array, comparator ); dump(array); } public static void dump( String[][] array ) { for ( int i = 0;i < array.length;i++ ) { for ( int j = 0; j < array[ i ].length;j++ ) { System.out.print( "\t" + array[ i ][ j ] ); } System.out.println(); } } } //多次元配列ソート用クラス class TheComparator implements Comparator { /** ソート対象のカラムの位置 */ private int index = 0; /** ソートするためのカラム位置をセット */ public void setIndex( int index ) { this.index = index; } public int compare( Object a, Object b ) { String[] strA = ( String[] ) a; String[] strB = ( String[] ) b; return ( strA[ index ].compareTo( strB[ index ] ) ); } }

    • ベストアンサー
    • Java
  • C#の配列について

    string[] hoge = { "0-9", "a-z", "あ-ん" }; for (int i = 0; i < hoge.Length; i++) Console.WriteLine(hoge[i]); 出力 0123456789abcde...xyzあいうえお...わおん このように配列を宣言することはできませんか? 1文字ずつ string[] hoge = { "0", "1", ..."a", "b" ..."あ", "い", ... }}; と書くのはソースが汚くなってしまう気がして…

  • C# 「配列のコピー」と「配列の参照のコピー」の違い。

    C#についての質問です。 今クラスについての勉強をしており、その中で「配列dataのコピーを取得する」メソッドを作成することになり、以下のように記述いたしました。 /// 配列dataのコピーを取得する /// </summary> /// <returns>クラスIntArrayが保持している配列のコピー</returns> public int[] GetArray() { return this.data; } ところが、『「配列のコピー」が行なえていません。これでは、「配列の参照のコピー」です。』という指摘をいただきました。 そこで質問なのですが、「配列のコピー」と「配列の参照のコピー」の違いはどのようなものでしょうか? 独自に調べてもみたのですが、やはりこの2つの違いがいまいちわからず、困っています。 お分かりになる方がいらっしゃいましたら、ご助言をお願いいたします。

  • C#でカレンダーを作っているのですがここから先がわかりません。どなたかおしえてもらえませんか?

    using System; using System.Collections.Generic; using System.Text; namespace 万年カレンダー { class MyEventCiass { static void Main(string[] args) { int nen, tuki,tukinohi,youbi;    //西暦の入力 System.Console.Out.WriteLine("西暦を入力してください。"); nen = int.Parse(Console.ReadLine()); //月の入力 System.Console.Out.WriteLine("月を入力してください。"); tuki = int.Parse(Console.ReadLine()); //西暦と月の出力 Console.WriteLine(nen + "年" + tuki + "月"); switch (tuki) { case 2: if (nen % 4 == 0 && (nen % 100 != 0 || nen % 400 == 0)) tukinohi = 29; else tukinohi = 28; break; case 4: case 6: case 9: case 11: tukinohi = 30; break; default: tukinohi = 31; break; } if (tuki == 1 || tuki == 2) { nen = nen -1 ; tuki = tuki + 12; } //曜日の出力 Console.WriteLine("日 月 火 水 木 金 土"); youbi = (nen + nen / 4 - nen / 100 + nen / 400 + (13 * tuki + 8) / 5 + 1) % 7; if (youbi == 0) youbi = 7; for (int i = 1; i <= youbi ;i += 1 ) { Console.Write(i.ToString()); } for (int i = 4; i <= tukinohi; i += 1) { Console.Write(i.ToString()); } Console.ReadLine(); } } }

  • Java クラスを使ったソート

    Javaで隣接交換法を用いて配列dataを昇順に並び替え、出力するプログラムを作成する。 ただし、ループ処理には、int型の変数は使わず、以下のCounterクラスを使用する。 という課題が出て、とり組んでみたのですが所々よく分からないので、お力添えしていただければと思います。 課題には下記のような条件が書いてありました。 配列data={54,76,32,89,45,11,8,54,29,67}; [クラス] Counter [インスタンス変数] int型の値を保持するcount [コンストラクタ] 引数で渡された値を初期値としてインスタンス変数に設定する。 引数を省略された場合、ゼロを設定する。 [メソッド] increment 値に1加算する decrement 値に1減算する compareTo 以下の処理を行う Counterの保持している値が引数に指定された値と 等しい場合、値0を返す。 Counterの保持している値が引数に指定された値より 小さい場合、0より小さい値を返す。 Counterの保持している値が引数に指定された値より 大きい場合、0より大きい値を返す。 get Counterの保持している値を添え字として、 引数で渡された配列の要素を取得します。 set Counterの保持している値を添え字として、 第1引数で渡された配列に第2引数で渡された値を設定します。 以下組んだものです。 ---- class Counter { int count = 0; Counter(int count) { this.count = count; } Counter() { this.count = 0; } public int get(int[] data) { return this.count; } public void set(int[] data, int count) { this.count = count; } public void increment() { this.count = count + 1; } public void decrement() { this.count = count - 1; } public int compareTo() { return count; } } public class Lesson09 { public static void main(String args[]) { Counter counter = new Counter(0); int[] data = {54, 76, 32, 89, 45, 11, 8, 54, 67}; counter.get(data); counter.set(data, 0); } } ---- とりあえず、compareToとsetとgetの部分をどう記述していいのかがよく分かりません。 よろしくお願いします。

    • ベストアンサー
    • Java
このQ&Aのポイント
  • 契約もしていないのに請求書が届いたというトラブルについて相談したいです。
  • ひかりTVという製品・サービスに関係なく、契約もしていないのに請求書が送られてきました。
  • 請求書の支払期日をすぎてしまったり、契約変更の手続きが分からず困っています。ひかりTVに関連する問題です。
回答を見る

専門家に質問してみよう