現在javaを勉強中なのですがC言語で書かれた以下のコードをjavaで書いてみようとしています.
該当のソースコード
C
1//リンクによるリスト 2//Josephus problem 3#include <stdlib.h> 4 5typedef struct node *link; 6struct node { 7 int item; 8 link next; 9}; 10 11main(int argc, char *argv[]){ 12 int i, N = atoi(argv[1]), M = atoi(argv[2]); 13 // N人の人がリーダーを選ぶのに環状に並んで適当な始点から数えてM番目の人を削除していく 14 15 link t = malloc(sizeof *t), x = t; 16 17 t -> item = 1; 18 t -> next = t; 19 20 for(i=2;i<=N;i++){ 21 x = (x->next = malloc(sizeof *x)); 22 x->item = i; 23 x->next = t; 24 } 25 26 while(x != x->next){ 27 for(i=1;i<M;i++) x = x->next; 28 29 //節点の削除 30 t = x->next; 31 x->next = t->next; 32 33 N--; 34 } 35 36 printf("Leader is %dth\n", x->item); 37}
試したこと
上記のCのコードに対して以下のようなjavaのコードを書いてみました.
###ソースコード
java
1class Node{ 2 int item; 3 Node next; 4 Node(){ 5 item = 0; 6 next = this; 7 } 8 Node(int item, Node next){ 9 this.item = item; 10 this.next = next; 11 } 12} 13 14public class Ex3{ 15 public static void main(String[] args){ 16 int i; 17 int N = Integer.parseInt(args[0]); 18 int M = Integer.parseInt(args[1]); 19 Node t = null; 20 Node x; 21 x = t; 22 t.item = 1; 23 t.next = t; 24 for(i=2;i<=N;i++){ 25 x = x.next; 26 x.item = i; 27 x.next = t; 28 } 29 while(x!=x.next){ 30 for(i=1;i<M;i++) x = x.next; 31 x.next = (x.next).next; 32 N--; 33 } 34 System.out.printf("%d/n", x.item); 35 } 36}
###試したこと
上のようにコードを書くとCのコードでいうmallocの部分が表現できていないためかException in thread "main" java.lang.NullPointerException
at Ex3.main(Ex3.java:24)
というエラーが出てしまいました.少し調べてみるとjavaにはmallocのようなものはないとありましたのでどうしようか行き詰ってしまいました.まだ勉強して間もないため基礎的な間違いや勘違いがありましたら申し訳ないのですがこの解決方法について教えてほしいです.
回答2件
あなたの回答
tips
プレビュー