One or more of your EditText widgets are being declared as TextView in level1.xml. Probably displayanswer.
sudoku solution check in android
Pergunta
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.
Solução
Outras dicas
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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow