One or more of your EditText widgets are being declared as TextView in level1.xml. Probably displayanswer.
sudoku solution check in android
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.
Solution
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