Question

I'm very new to Android and Java development. I'm trying to create a very basic 4x4 sudoku app. However, the UI crashes when I run the code. I'm not sure which part of the code is incorrect.

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.level1);
    findviewbyidfunc();

    checksol.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) 
        {
        setmatrix();    
        ans=check(mat);
        dispsol();      
        }
    });
}

public void findviewbyidfunc()
{
            checksol=(Button)findViewById(R.id.checksol1);
    r11=(EditText)findViewById(R.id.r1c1);
    r21=(EditText)findViewById(R.id.r2c1);
    r31=(EditText)findViewById(R.id.r3c1);
    r41=(EditText)findViewById(R.id.r4c1);

    r12=(EditText)findViewById(R.id.r1c2);
    r22=(EditText)findViewById(R.id.r2c2);
    r32=(EditText)findViewById(R.id.r3c2);
    r42=(EditText)findViewById(R.id.r4c2);

    r13=(EditText)findViewById(R.id.r1c3);
    r23=(EditText)findViewById(R.id.r2c3);
    r33=(EditText)findViewById(R.id.r3c3);
    r43=(EditText)findViewById(R.id.r4c3);

    r14=(EditText)findViewById(R.id.r1c4);
    r24=(EditText)findViewById(R.id.r2c4);
    r34=(EditText)findViewById(R.id.r3c4);
    r44=(EditText)findViewById(R.id.r4c4);

    displayanswer=(EditText)findViewById(R.id.answer);
}

Code to set the matrix.

public void setmatrix()
{
    //Column one
    mat[1][1]=Integer.parseInt(r11.getText().toString());
    mat[2][1]=Integer.parseInt(r21.getText().toString());
    mat[3][1]=Integer.parseInt(r31.getText().toString());
    mat[4][1]=Integer.parseInt(r41.getText().toString());
    //Column two
    mat[1][2]=Integer.parseInt(r12.getText().toString());
    mat[2][2]=Integer.parseInt(r22.getText().toString());
    mat[3][2]=Integer.parseInt(r32.getText().toString());
    mat[4][2]=Integer.parseInt(r42.getText().toString());
    //Column three
    mat[1][3]=Integer.parseInt(r13.getText().toString());
    mat[2][3]=Integer.parseInt(r23.getText().toString());
    mat[3][3]=Integer.parseInt(r33.getText().toString());
    mat[4][3]=Integer.parseInt(r43.getText().toString());
    //Column four
    mat[1][4]=Integer.parseInt(r14.getText().toString());
    mat[2][4]=Integer.parseInt(r24.getText().toString());
    mat[3][4]=Integer.parseInt(r34.getText().toString());
    mat[4][4]=Integer.parseInt(r44.getText().toString());

}

Code to validate the matrix.

public boolean check(Integer arr[][])
{
    Integer[] count={0,0,0,0,0};
    Integer[] count1={0,0,0,0,0};
    Boolean b=true;
    for(int i=1;i<4;i++)
    {
        for(int j=1;j<4;j++)
        {
            if(count[arr[j][i]]>i)
            {
                b=false;
                return b;
            }
            if(count1[arr[i][j]]>i)
            {
                b=false;
                return b;
            }
            count1[arr[i][j]]++;
            count[arr[j][i]]++;     
        }
    }
    return b;
}

If I remove the listener code and its associated function, the interface works fine. Not sure what's wrong.

Was it helpful?

Solution

One or more of your EditText widgets are being declared as TextView in level1.xml. Probably displayanswer.

OTHER TIPS

in my opinion use "try-catch" in "setmatrix" method, for example:

try
{
mat[1][1]=Integer.parseInt(r11.getText().toString());
}
catch(Exception ex)
{
mat[1][1]=0;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top