-2

コードに問題があります。私の目標は、擬似コードをJavaコードに変換することです。はい、私のコーディングは割り当てです。問題がどこにあるかを示すためだけに答えは必要ありません。

私がしなければならないのは、重複を含まない2つのソートされていない学生のリスト間の交差のサイズを計算することです。

この擬似コードに対応する擬似コードとJavaコードを表示します。

擬似コード:

inter <-- 0

Array C[m+n]

for i <-- 0 to m-1  do  C[i] <-- A[i]

for i <-- 0 to n-1  do  C[i+m] <-- B[i]

C <-- sort(C, m+n);

pointer <-- 0

while (pointer < m+n-1) do{

if(C[pointer]=C[pointer+1]){

inter <-- inter+1

pointer <-- pointer+2

}

else pointer <-- pointer+1

}

return inter

Javaコード:

public static int intersectionSizeMergeAndSort(studentList L1, studentList L2) {
/* Write your code for question 4 here */
  int intersectionSize = 0;
  int[] C = new int[L1.studentID.length+L2.studentID.length];
  for(int i = 0; i<L1.studentID.length; i++){
  C[i] = L1.studentID[i];
  }
  for(int i = 0; i<L2.studentID.length; i++){
  C[i+L1.studentID.length] = L2.studentID[i];
  }
  Arrays.sort(C);
  int pointer = 0;
  while(pointer<((C.length-1))){
    if(C[pointer] == C[pointer+1]){
    intersectionSize = intersectionSize + 1;
    pointer = pointer + 2;
    }
    else {
      pointer = pointer + 1;
  }
 return intersectionSize;

}
return 0;
}

私の主な方法:

public static void main(String args[]) throws Exception {

studentList firstList;
studentList secondList;

// This is how to read lists from files. Useful for debugging.

// firstList=new studentList("COMP250.txt", "COMP250 - Introduction to Computer Science");
// secondList=new studentList("MATH240.txt", "MATH240 - Discrete Mathematics");

// get the time before starting the intersections
long startTime = System.currentTimeMillis();

// repeat the process a certain number of times, to make more accurate average     measurements.
 for (int rep=0;rep<1000;rep++) {

 // This is how to generate lists of random IDs. 
 // For firstList, we generate 16000 IDs
 // For secondList, we generate 16000 IDs

 firstList=new studentList(2 , "COMP250 - Introduction to Computer Science");
 secondList=new studentList(2 , "MATH240 - Discrete Mathematics");


 // run the intersection method
 int intersection=studentList.intersectionSizeMergeAndSort(firstList,secondList);
 System.out.println("The intersection size is: "+intersection);
 }

// get the time after the intersection
long endTime = System.currentTimeMillis();


System.out.println("Running time: "+ (endTime-startTime) + " milliseconds");
 }

}

注:L1とL2は以前に宣言されていますが、目的の結果が得られません。誰かが何が悪いのか指摘できますか?

ありがとうございました

4

2 に答える 2

1

頭のてっぺんから、あなたのreturn intersectionSize;ステートメントはwhileループ内で発生しているように見えます。そのため、ループは最初の反復を超えることはなく、intersectionSizeを適切に計算しません。return 0;私はそのステートメントを削除し、あなたをreturn intersectionSize;そのように置き換えます...

public static int intersectionSizeMergeAndSort(studentList L1, studentList L2) {
   /* Write your code for question 4 here */
   int intersectionSize = 0;
   int[] C = new int[L1.studentID.length + L2.studentID.length];
   for (int i = 0; i < L1.studentID.length; i++) {
      C[i] = L1.studentID[i];
   }
   for (int i = 0; i < L2.studentID.length; i++) {
      C[i + L1.studentID.length] = L2.studentID[i];
   }
   Arrays.sort(C);
   int pointer = 0;
   while (pointer < (C.length - 1)) {
       if (C[pointer] == C[pointer + 1]) {
          intersectionSize = intersectionSize + 1;
          pointer = pointer + 2;
       } else {
          pointer = pointer + 1;
       }
    }
    return intersectionSize;
}
于 2013-01-22T18:05:10.903 に答える
0

studentList.StudentIDの長さの代わりにの長さを使用しているようですstudentList

アルゴリズムを見ると、L1.length代わりに書く必要がL1.StudentID.lengthあり、同じことが。にも当てはまりL2ます。

編集:

あなたの編集を見たところです。メインの外で次の行を取り出す必要がありますfor loop

// run the intersection method
   int intersection=studentList.intersectionSizeMergeAndSort(firstList,secondList);
   System.out.println("The intersection size is: "+intersection);

そして、あなたの時間を正しく記録するために、あなたはlong startTime = System.currentTimeMillis();ループの後、そして私が言及した前の行の前に行を置く必要があるでしょう。

于 2013-01-22T17:58:46.530 に答える