C#のソースコードについての質問です

このQ&Aのポイント
  • C#のソースコードについてエラーが発生し、構文の間違いがわかりません。
  • C#のソースコードを書いたら静的でないフィールド、メソッド、またはプロパティ 'kkk.d' でオブジェクト参照が必要なエラーが発生しました。
  • C#のソースコードに関して、オブジェクト参照が必要なエラーが発生していますが、どの部分が構文の間違いなのかわかりません。
回答を見る
  • ベストアンサー

C#のソースコードについての質問です

using System; public class kkk { public static void Main() { ddd d = new ddd(); int i = d.knapsack(0, 0); Console.WriteLine("" + i); } } public class ddd { int[] ws = new int[] { 3, 4, 1, 2, 3, }; int[] ps = new int[] { 2, 3, 2, 3, 6 }; int maxw = 10; public int knapsack(int n, int w) { if (w > maxw) return -1; if (n >= ws.Length) return 0; return Math.Max(knapsack(n + 1, w), knapsack(n + 1, w + ws[n]) + ps[n]); } } このコードを書いたらエラー 1 静的でないフィールド、メソッド、またはプロパティ 'kkk.d' で、オブジェクト参照が必要です というエラーがでてきました、構文が間違っているところが分かりません どなたか教えてください

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

  • ベストアンサー
noname#247307
noname#247307
回答No.2

特に問題なさそうですね。コピペしてコンパイルしてみましたが、普通にコンパイルでき、exeも問題なく実行できました。これ自体には問題はなさそうに思えます。 ここにコピペしたコードが全てですか。他にもあって、そっちでkkkを呼び出してる、とかいうことはありませんか。 あるいは、たまたま気がつかないで何か余計なタイプが残ってた、とかもないでしょうか。

kokoa118
質問者

お礼

ありがとうございます他のファイルでやったらうまくいきました。 いつの間にか他のコードファイルを作っていたようです。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8526/19383)
回答No.1

ddd d = new ddd(); ↓ ddd *d = new ddd(); int i = d.knapsack(0, 0); ↓ int i = d->knapsack(0, 0); じゃないのかな?

関連するQ&A

  • C++のソースコードについて

    このコードを書いてビルドまでノーエラーで通ったのですがいざ起動してみると起動した瞬間に動作を停止しました。と表示されて何もできません。 #include<iostream> #include<algorithm> using namespace std; int main(){ long long d[2000], e[2000]; int w[2000], h[2000], a[1501 * 1024], b[1502 * 1024], n, m; while (cin >> n >> m, n){ long k = 1, l = 1, count = 0, f = 0; for (int i = 0; i < n; i++) { d[i] = 0; cin >> w[i]; if (!i)d[0] = w[i]; else d[i] += w[i] + d[i - 1]; } for (int i = 0; i < m; i++) { e[i] = 0; cin >> h[i]; if (!i)e[0] = h[i]; else e[i] += h[i] + e[i - 1]; } a[0] = d[0]; b[0] = e[0]; for (int i = 1; i < n; i++) for (int j = 0; j < i; j++){ a[k] = d[i] - d[j]; k++; } for (int i = 1; i < m; i++) for (int j = 0; j < i; j++){ b[l] = e[i] - e[j]; l++; } sort(a, a + n); sort(b, b + m); for (int i = 0; i < n; i++){ for (; f < m; f++){ if (a[i] == b[f]){ count++; f++; break; } if (a[i] < b[f])break; } } cout << count << endl; } } ちなみにこの問題はhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2015 です

  • Cのソースコードについて

    以下のソースコードをかきました。 #include<stdio.h> #include<string.h> #define MAX 100005 typedef struct PP { int t; char name[100]; }P; P Q[MAX]; int head, tail, n; void enqueue(P u) { Q[tail] = u; tail = (tail + 1) % MAX; } P dequeue() { P x = Q[head]; head = (head + 1) % MAX; return x; } int min(int a, int b) { return a > b ? a : b; } int main() { int q, sum = 0 , w; scanf("%d %d", &n,&q); for (int i = 1; i <= n; i++){ scanf("%s", Q[i].name); scanf("%d", &Q[i].t); } head = 1; tail = n + 1; P u; while (head != tail) { u = dequeue(); w = min(q, u.t); sum += w; u.t -= w; if (u.t > 0)enqueue(u); else { printf("%s %d", u.name, sum); } } return 0; } これでVisual C++ でコンパイルしたところ特にエラーも起きず問題なく動作しました しかしAOJに提出してみたところコンパイルエラーになってしまい詰んでしまいました どこかダメそうなところがあれば教えてください

  • C言語ソースコードに関する質問です。

    以下の数列について,初項から第15項までを求めるプログラムと実行結果を示せ。 0 1 1 2 3 5 8 13 21(ただし,初項=0,第1項=1とする。) ソースコードを書くと、エラーがでた。 #include <stdio.h> int fib(int n) { if(n==1 || n==2) return 1; else return fib(n-1)+fib(n-2); } int main(void) { int n; for(n=0;n<17;n++) printf("%d,",fib(n)); } 正しソースコードを教えてください! よろしくお願いします。

  • C言語のソースコードについて教えてください。

    以下のソースコードを学習用C言語開発環境で行ったのですが、 『ファイル「C:/Users/ユーザー名/AppData/Local/EasyIDEC/project/タイトル/main.c」の 「41行目」で記述エラーを発見しました。 「,」を付け忘れています。』 という、コンパイルエラーが表示されました。 何度も見直したのですが、よくわかりません。 #include <stdio.h> int main(int argc, char *argv[]) { char answer ; answer = 'n' ; while(answer =='n') { int input ; input = 0 ; int add ; add = 1 ; int sum ; sum = 0 ; printf("数値を入力して下さい。:") ; scanf("%d", &input ) ; int i ; i = 0 ; while(i < input) { sum =sum + add ; printf("\n%d",sum) ; i++ ; add++ ; } printf("\n1から%dまでの総和は、%dです。" , input , sum) ; while(1) { printf("\n終了しますか? y/n:") ; scanf(" %c , &answer) ; if( (answer != 'y') && (answer != 'n') ) { printf( "y or nを入れてください。") ; } else { break ; } } } return 0 ; }

  • Cのソースコードについて

    #include<stdio.h> int main(void) { long a[6000],sum[6000],max=0; int i,j=0,n,m; for (m = 0; m <= 6000; m++) sum[m] = 0; for (i = 0;; i++) { scanf_s("%ld", &a[i]); if (a[i] > 0) sum[j] += a[i]; else if (a[i] < 0) { j++; sum[j] = -1; j++; } else break; } for (n = 0; sum[n] == 0; n++) { if (max < sum[n]) max = sum[n]; } printf("%ld",max); while(1){} return 0; } こんなコードを書いたのですが 答えが常に0になってしまいます。 原因がはっきりしないので教えてください 使用言語はCです

  • C言語<素数を求めるプログラム>

    #include<stdio.h> int j; int prime(int n) { int i; if(n < 2) return 0; if(n == 2) return 1; if(n%2 == 0) return 0; for(i = 3; i*i<= n; i += 2){ if(n%i == 0) return 0; } return 1; } int main(void) { int n; for(n=1; n <= 1000; n++) { if(prime(n)){ printf("%d\n",n); j++; } } printf("素数の個数は全部で %d 件見つかりました。\n",j); return 0; } このプログラムは1から1000までの素数のみを表示させるプログラムでありますが、このアルゴリズムが全くわかりません。 int prime(int n)の中身のアルゴリズムがどういう仕組みになっているのかお分かりになりますでしょうか?

  • このソースコードについて

    AOJにてこのコードを提出したところTime Limit Exceededでドロップされました。 Visual studio 2013 で動かしたところ特に怪しい挙動や間違いを出力することはなかったのですが。。。 ちなみに言語はC++です。 問題のURL http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0056 #include<iostream> #include<math.h> using namespace std; int p[20000],d; void primefinder(int a){ p[0] = 2; int k, l = 0; for (int i = 3; i <= a; i++){ k = (int)sqrt(i); for (int j = 2; j <= k + 1; j++){ if (j == k + 1){ p[++l] = i;} else if (i%j == 0)break; } } d = l + 1; } int main(){ int n,m,q,count; while ((cin >> n), n){ count = 0; m = n / 2; primefinder(m); for (int i = 0; i < d; i++){ q = n - p[i]; if (q <= 1)continue; for (int j = 2; j <= (int)sqrt(q)+1; j++){ if (j == (int)sqrt(q) + 1)count++; else if (q%j == 0)break; } } cout << count << endl; } }

  • C# 猫でもわかる・・・ のプログラムで質問です。

    猫でもわかる・・・のページでC#の勉強させてもらってるのですが、 解らないところが出たので教えてください。 using System; class dowhle01 { public static void Main() { Console.Write("数字を入力してください(1-9) --- "); string strInput = Console.ReadLine(); if (strInput.Length >= 2) return; if (!char.IsDigit(strInput[0]) || strInput[0] == '0') return; int n = strInput[0] - '0'; string mystr = ""; int i = 1, sum = 0; do { sum += i; mystr += string.Format("{0} + ", i); i++; } while (i <= n); char[] trimchar = new char[] { '+', ' ' }; mystr = mystr.TrimEnd(trimchar); mystr += " = "; mystr += sum; Console.WriteLine(mystr); } } このプログラムの中の int n = strInput[0] - '0'; この部分なんですけど、 これはint型に直してるってことでしょうか? でも、普通int型にするなら、 int n = int.Parse(strInput);ですよね? こういうやり方もあるって意味なんですかね? それとも、何か特別な意味があるのでしょうか? 教えて下さい。よろしくお願いします。

  • 困ってます…nCrを求めるC言語プログラミング

    nCr、つまりn個のうちr個を取り出すときの場合の数を求めるプログラミングを作りたいのですが、どうもうまくいきません。 関数combinationを作って求めるという指定もあり、自分で出来るとこまで作ってみたのですが訳がわからなくなってしまい、かなり困っています…; コンパイルは出来るのですが実行してもセグメントエラーが出るばかりで… すみませんがご指摘していただけないでしょうか…? #include<stdio.h> //階乗を計算する関数 int fact(int num){ int i; if(num < 0){ return -1; } else if(num == 0){ return 1; } else if(num == 1){ return 1; } else { i = num * fact(num - 1); return i; } } //コンビネーションを計算 int combination(int n, int r) { int fact(int num); int i; i=fact(n)/fact(r)/fact(n-r); return combination(n-1, r-1)-combination(n,r-1); } int main(void) { int n, r; while ( printf("n r を入力して下さい。"), scanf("%d%d", &n, &r) == 2 ) { printf("nCr(%d,%d)=%d\n", n, r, combination(n, r)); } return 0; }

  • Javaのコードのことで質問があります

    中置表記法を後置表記法に変換するプログラムをJavaで作成し、コンパイルには成功したのですが、実行時に Exception in thread "main" java.lang.ArrayIndexOutOfBour at gotPriority.gotPriority(toPostfix.java:31) at toPostfix.main(toPostfix.java:150) というエラーが出てしまい、正常な実行が出来なくて非常に困っています どういうエラーなのかよくわからず、コードの31行目と150行目をよく見てみたのですが、エラーがある理由もよくわかりませんでした。 ご助言くださると助かります ソースコードの内容は import java.io.*; //gotPriorityは、数式の各要素に優先度を与えるメソッドである。 //数式の要素の優先度は、それぞれ下記のようになる。 // 数式の要素 優先度 // ( 4 // 0~9 3 // *,/ 2 // +,- 1 // ) 0 class gotPriority { private char lse[] = {'0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')','E'}; private int priority[] = {3,3,3,3,3,3,3,3,3,3,1,1,2,2,4,0,-1},i; public int gotPriority(char e) { for(i=0; i<lse.length ; i++ ) { if(e == lse[i]) break; } return priority[i]; } } class stac { char stac[] = new char[100]; char ret; int top = 0; void initStack() { stac[0] = 'E'; } void push(char c) { top++; stac[top] = c; } char pop() { ret = stac[top]; top--; return ret; } char Top() { return stac[top]; } } class toPostfix { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("数式を入力してください"); String str = br.readLine(); System.out.println("数式を後置表記法に変換します"); int a = 0; int i = 0; gotPriority got1 = new gotPriority(); stac stac1 = new stac(); String Ex = new String(str); int Exp = Ex.length(); char Exptext[] = new char[Exp]; char toPostfix[] = new char[Exp]; for(int d=0; d < Exp; d++) { Exptext[d] = Ex.charAt(d); } for(i = 0 ; i < Exp ; i++ ) { while(got1.gotPriority(Exptext[i]) <= got1.gotPriority(stac1.Top()) && stac1.Top() != '(') { toPostfix[a] = stac1.pop(); a++; } if(Exptext[i] != ')') { stac1.push(Exptext[i]); } else { stac1.pop(); } } boolean sflag = true; for( ; sflag == true ; ) { char ret = stac1.pop(); if(ret != 'E') { toPostfix[a] = ret; a++; } else { sflag = false; } } for(a = 0 ; a < Exp ; a++ ) { System.out.print(toPostfix[a]); } } } です