Java servlet + js + ajax creare codice random e confrontarlo

di il
1 risposte

Java servlet + js + ajax creare codice random e confrontarlo

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.

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte