Salve amici
allora ho un problema, ho questa form in HTML
<form method ='get' id='coding'>
<input id = "code" type = 'text' name = "code">
<input value = 'try' type = "submit" onclick ='return send_code()'>
</form>
che serve x mandare un codice in formato JSON.
ho la mia funzione ajax che mi permette di fare cio:
function send_code(){
$.ajax({
url: '/coding',
method: 'post',
success: send_code_success,
error: send_code_failed,
data: {
code : $('#code').val(),
}
});
return false;
}
function send_code_success(data){
$('#message').text(JSON.stringify(data)),
window.alert("codice inviato!");
}
function send_code_failed(data){
$('#message').text("codice non inviato!");
}
e nella mia servlet ho il metodo service che mi richiama questo:
}else if(request.getRequestURI().equals("/coding")){
receiveCode(request,response);
}
e ho suddetto metodo che non fa altro che ricevere il JSON, trasformarlo in stringa e salvare la stringa in un array di char.
public void receiveCode(HttpServletRequest request, HttpServletResponse response)throws ClassNotFoundException, IOException{
int tentativi = 0;
int numpiu=0;
m = new MasterMind();
try {
codeAsString = request.getParameter("code");
String json;
if (codeAsString == null){
json = "{}";
} else {
String code = codeAsString.replaceAll(" ", "");
char [] caratteri = new char[code.length()];
for (int i=0; i<caratteri.length; i++) {
caratteri[i] = code.charAt(i);//guess=caratteri
//System.err.println(caratteri[i]);
}
tentativi++;
System.out.println("Tentativo n°" + tentativi);
numpiu = m.checkGuess(caratteri); //confronta col codice
Map<String, Object> codes = new HashMap<String, Object>();
codes.put("code",codeAsString);
json = mapToJson(codes);
json = format("{ \"code\": %s }",
codeAsString);
}response.setContentType("application/json");
response.getWriter().write(json);
System.out.println(json);
}catch (NumberFormatException e) {
response.setContentType("application/json");
response.getWriter().write(
format("{ \"error\": \"invalid value\" }"));
}
}
questo metodo attualmente restituisce nel message della pagina html il json io invece vorrei restituire cio che deve calcolarmi il gioco che sarebbe mastermind,
qui ho la mia implelmentazione di mastermind che funziona:
public class MasterMind{
private char code [];
public static String ris;
public MasterMind(){
code = new char [4];
//il codice da indovinare
//createCode();
}
public void createCode(){ //crea il codice
int cur; //numero random
String str=""; //per il codice
String s;//per il numero random
for (int i=0; i<4; i++){ //crea i random
cur = (int)(Math.random() * 6) + 1;
s=cur+"";
str=str+s; //li concatena
}
for(int i=0; i<4; i++){
code[i]=str.charAt(i);//li mette nell'array
}
for(char x : code) //da levare, prova: stampa il codice generato
System.out.print(x);
System.out.println();
}
public int checkGuess(char[] guess){ //confronta inserimento e code
int piu=0, meno=0; //contatori
String strpiu=""; //per la stampa
String strmeno=""; //per la stampa
ris=""; //strpiu+strmeno
int m; //la posizione del numero nel guess nel code, ritorna -1 se non c'è o è già stato considerato
boolean[] controlloCode={false, false, false, false};
boolean[] controlloGuess={false, false, false, false}; //i controlli sulle posizioni
for(int i=0;i<4;i++){
if(guess[i]==code[i]){//se sono nella stessa posizione
piu++;
controlloCode[i]=true;
controlloGuess[i]=true;//dico che quelle posizioni sono state considerate
}
}
for (int i=0; i<4; i++){
if(controlloGuess[i]==false){ //se quella posizione nel guess non è stata ancora verificata
m = search(guess[i], controlloCode);
if(m != -1 && controlloCode[m]==false){ //se è stato trovato qualcosa
meno++;
controlloCode[m]=true;
controlloGuess[i]=true; //si occupano le rispettive posizioni
continue;
}
else continue;
}
}
for(int i=0; i<piu; i++)
strpiu=strpiu+"+";
for(int i=0; i<meno; i++)
strmeno=strmeno+"-";
ris=strpiu+strmeno;
System.out.print("Inserimento: ");
for(char x : guess)
System.out.print(x + " ");
System.out.println();
System.out.println(ris);
return piu;
}
private int search(char num, boolean[]controllo){ //numero del guess, controllo del code
int x=-1; //default
for (int i=0; i<4; i++)
if (controllo[i]==false && code[i]==num){ //se il numero è nel codice e quella posizione del codice è ancora libera
x=i; //ritorno la posizione del code
break;
}
return x; //la posizione del numero nel code
}
}
particamente il mio problema è che creo il codice random, eseguo il metodo checkguess per confrontare i due array, solo che ogni volta che premo sul bottone per inviare il mio codice mi crea un nuovo codice random....come posso evitare che mi rigeneri il codice random...cioè
mi genera 5234
io scrivo 1234
indovino 3 su 4 numeri mi stampa +++
reinserisco 1234
solo che invece di mantenere 5234 mi genera un nuovo numero...io vorrei che questo numero rimanga sempre quello finche non indovino.