Sudoku

Status
Niet open voor verdere reacties.

RomRom

Gebruiker
Lid geworden
16 okt 2007
Berichten
5
Hey Hey,

ik moet voor school een spelletje maken. Ik dacht aan Sudoku, maar ik weet niet hoe dat moet. Kan iemand mij helpen? Weet iemand hoe daat moet?:(
 
Hey,

Heel erg bedankt voor het helpen. Ik moet het spelletje op Java maken. ik heb deze code geprobeerd, maar het doet niet. :( . Het geeft bij
int i,j,k,a[10][10],o,x[100],y[100];
aan van "Can't specify array dimention in a diclaration". en bijvoid display();
int getnum();
geeft hij aan van "Method void display[] requires a method body. Othrwise declare it as abstract".
en bij
void solve(int [],int [],int);
int check(int ,int );
geeft het aan van "Identifier expected".
Bij void solvevoid solve(int p[100],int q[100],int n) geeft het ook aan van "Can't specify array dimention in a diclaration".
ik weet zelf niet hoe het moet, kun je mij hiermee helpen?

dit is de code zoals ik het op java heb gezet:


Code:
/*
	A basic extension of the java.applet.Applet class
 */

import java.awt.*;
import java.applet.*;

public class Applet1 extends Applet
{
   int i,j,k,a[10][10],o,x[100],y[100];

void display();
int getnum();
void solve(int [],int [],int);
int check(int ,int );
void main()
{
 clrscr();
 printf("\n\nEnter the elements of SUDOKU in rowwise.\n[ Enter '0' if element is absent. ]");
 for(i=1;i<=9;i++)
 for(j=1;j<=9;j++)
  scanf("%d",'&', a[i][j]);
 printf("\n\nEntered SUDOKU\n\n");
 display();
 printf("\nEnter any key for solution....\n");
 getch();
 o=getnum();
 solve(x,y,1);
 }

  int getnum()
  {
   int c=0;
   for(i=1;i<=9;i++)
   {
   for(j=1;j<=9;j++)
   {
    if(a[i][j]==0)
    {
     c++;
     x[c]=i;
     y[c]=j;
     }
    }
   }
   return(c);
  }

  void display()
  {
   for(i=1;i<=9;i++)
   {
    for(j=1;j<=9;j++)
    {
     if(a[i][j]!=0)
      printf("  %d",a[i][j]);
     else
      printf("  ");
     }
     printf("\n\n");
    }
  }


   void solve(int p[100],int q[100],int n)
   {
    for(k=1;k<=9;k++)
    for(i=p[n];i<=p[n];i++)
    for(j=q[n];j<=q[n];j++)
    {
     a[i][j]=k;
     if(n<0)
      solve(p,q,n++);
     int ch=check(1,0);
     if(ch!=0)
     {
      display();
      getch();
      exit(0);
      }
     }
    }
   

   int check(int n,int r)
   {
    int f=0,cont=0;
    if(r==1)
    {
     for(k=1;k<=9;k++)
     {
      for(i=n;i<=n;i++)
      for(j=1;j<=9;j++)
      {
       if(k==a[i][j])
	f++;
       }
       if(f!=1)
	return(0);
       else
	cont++;
       f=0;
	}
	if(cont!=9)
	 return(0);
	else if(n==9)
	 check(1,0);
	else
	 check(n++,1);
	}
	else
	{
	 for(k=1;k<=9;k++)
	 {
	  for(i=1;i<=9;i++)
	  for(j=n;j<=n;j++)
	  {
	   if(k==a[i][j])
	    f++;
	   }
	   if(f!=1)
	    return(0);
	   else
	    cont++;
                   f=0;
	   }
	   if(cont!=9)
	    return(0);
	   else if(n!=9)
	    check(n++,1);
	}}
	   

	public void init()
	{
		// Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
		symantec.itools.lang.Context.setApplet(this);
	
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		setLayout(null);
		setSize(426,266);
		//}}
	}
   }
 
Laatst bewerkt door een moderator:
Je hebt er een paar redelijk grote fouten in zitten.

de volgende functies heb je dubbel staan:
Code:
    void display();
    int getnum();
    void solve(int [],int [],int);
    int check(int a ,int  );

Je gebruikt geen private/public/protected voor variabelen/methodes
Het is geen probleem, echter dan worden ze automatisch(over het algemeen) op protected gezet. Dit is niet handig, omdat sommige methodes waaronder de contructor het beste public kunnen zijn.. (behalve in het geval van een singleton class.. maar dat mag je later nog eens bekijken.. die heb je hier niet nodig.).


Jouw variabelendeclaratie:
Code:
int i,j,k,a[10][10],o,x[100],y[100];

Manier waarop het het beste zou kunnen:

Code:
    private int i,j,k,o;
    private int[] x = new int[100];
    private int[] y = new int[100];
    private int[][] a = new int[10][10];

Je hebt een aantal methodes niet gedeclareert:
Code:
getch()
printf("\nEnter any key for solution....\n");
scanf("%d",'&', a[i][j]);

De parameters zijn niet helemaal goed gezet bij de functies
Code:
[COLOR="Red"]void solve(int p[],int q[],int n) {[/COLOR]
        for(k=1;k<=9;k++)
            for(i=p[n];i<=p[n];i++)
                for(j=q[n];j<=q[n];j++) {
            a[i][j]=k;
            if(n<0)
                solve(p,q,n++);
            int ch=check(1,0);
            if(ch!=0) {
                display();
                getch();
                exit(0);
            }
                }
    }

Moet worden:
Code:
[COLOR="Red"]void solve(int[] p,int[] q,int n) {[/COLOR]
        for(k=1;k<=9;k++)
            for(i=p[n];i<=p[n];i++)
                for(j=q[n];j<=q[n];j++) {
            a[i][j]=k;
            if(n<0)
                solve(p,q,n++);
            int ch=check(1,0);
            if(ch!=0) {
                display();
                getch();
                exit(0);
            }
                }
    }



volledige code:
Hier heb ik de door jou nog niet gemaakte functies nog niet aangemaakt.
Code:
/*
A basic extension of the java.applet.Applet class
 */

import java.awt.*;
import java.applet.*;

public class Applet1 extends Applet {
    int i,j,k,o;
    int[] x = new int[100];
    int[] y = new int[100];
    int[][] a = new int[10][10];
   
    
   public void main() {
        clrscr();
        printf("\n\nEnter the elements of SUDOKU in rowwise.\n[ Enter '0' if element is absent. ]");
        for(i=1;i<=9;i++)
            for(j=1;j<=9;j++)
                scanf("%d",'&', a[i][j]);
        printf("\n\nEntered SUDOKU\n\n");
        display();
        printf("\nEnter any key for solution....\n");
        getch();
        o=getnum();
        solve(x,y,1);
    }
    
    private int getnum() {
        int c=0;
        for(i=1;i<=9;i++) {
            for(j=1;j<=9;j++) {
                if(a[i][j]==0) {
                    c++;
                    x[c]=i;
                    y[c]=j;
                }
            }
        }
        return(c);
    }
    
    private void display() {
        for(i=1;i<=9;i++) {
            for(j=1;j<=9;j++) {
                if(a[i][j]!=0)
                    printf(" %d",a[i][j]);
                else
                    printf(" ");
            }
            printf("\n\n");
        }
    }
    
    
    public void solve(int p[],int q[],int n) {
        for(k=1;k<=9;k++)
            for(i=p[n];i<=p[n];i++)
                for(j=q[n];j<=q[n];j++) {
            a[i][j]=k;
            if(n<0)
                solve(p,q,n++);
            int ch=check(1,0);
            if(ch!=0) {
                display();
                getch();
                exit(0);
            }
                }
    }
    
    
    private int check(int n,int r) {
        int f=0,cont=0;
        if(r==1) {
            for(k=1;k<=9;k++) {
                for(i=n;i<=n;i++)
                    for(j=1;j<=9;j++) {
                    if(k==a[i][j])
                        f++;
                    }
                if(f!=1)
                    return(0);
                else
                    cont++;
                f=0;
            }
            if(cont!=9)
                return(0);
            else if(n==9)
                check(1,0);
            else
                check(n++,1);
        } else {
            for(k=1;k<=9;k++) {
                for(i=1;i<=9;i++)
                    for(j=n;j<=n;j++) {
                    if(k==a[i][j])
                        f++;
                    }
                if(f!=1)
                    return(0);
                else
                    cont++;
                f=0;
            }
            if(cont!=9)
                return(0);
            else if(n!=9)
                check(n++,1);
        }}
    
    
    public void init() {
// Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
        symantec.itools.lang.Context.setApplet(this);
        
// This code is automatically generated by Visual Cafe when you add
// components to the visual environment. It instantiates and initializes
// the components. To modify the code, only use code syntax that matches
// what Visual Cafe can generate, or Visual Cafe may be unable to back
// parse your Java file into its visual environment.
//{{INIT_CONTROLS
        setLayout(null);
        setSize(426,266);
//}}
    }
}
 
Hey... ik heb nog even geprobeerd om de fouten eruit te halen die killermenace bedoelde. maar ik weet niet hoe ik deze code moet diclareren. :eek: Weet iemand van jullie misschien? ik moet namelijk deze opdracht maandag inleveren. :( . Ik zou heel erg dankbaar zijn als jullie mij hiermee verder zouden helpen.:rolleyes:

Code:
getch()
printf("\nEnter any key for solution....\n");
scanf("%d",'&', a[j]);
 
Ik heb geprobeert die code's te diclareren. maar ik weet niet welke diclaratie moet ik ervoor kiezen, want het geeft alleen aan dat deze codes niet zijn gediclareert. weet jij hoe het moet:confused:

Code:
clrscr();
getch()
printf("\nEnter any key for solution....\n");
scanf("%d",'&', a[j]);
 
Je moet de functies maken.

Code:
private void getch(){
//hier dan de uitvoering van de methode
}

private void clscr(){
//hier dan de uitvoering van de methode
}

private void printf(String s){
//hier dan de uitvoering van de methode
}

private void scanf(String s, char c, int[][] a){
//hier dan de uitvoering van de methode
}
Je zal toch zelf nu verder moeten. We kunnen niet alles voor je maken. ;)
Huiswerk is iets voor jezelf. We willen wel helpen, maar niet alles maken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan