Salve, mi sto cimentando nella scrittura del classico algoritmo per determinare i fattori primi di un intero, sfruttando un programmino scritto una vita fa su una calcolatrice Sharp che aveva un linguaggio tutto suo (ma che padroneggiavo) e cercando di tradurlo in Java, inserendo il necessario per acquisire dati di input e gestire le eventuali eccezioni...
Sono approdato a questo...
Dopo essere andato abbastanza spedito nella scrittura del codice, mi sono bloccato notando alcune imperfezioni dato che vorrei visualizzasse (a differenza della versione per calcolatrice) ogni fattore primo soltanto una volta, e che li visualizzasse tutti, invece se gli passo 26 mi visualizza soltanto [2] (senza il 13), così come se gli passo 65 visualizza soltanto [5]. Se però gli passo 100, visualizza [2, 5] correttamente.codice:import java.io.InputStreamReader; import java.io.BufferedReader ; import java.io.IOException; import java.util.ArrayList; public class FattoriPrimi { public static void main(String args[]) { InputStreamReader numero = new InputStreamReader(System.in); BufferedReader myInput = new BufferedReader (numero); String stringa = new String(); int intero = 0; ArrayList<Integer> fattori = new ArrayList<Integer>(); int i; try { System.out.print("Inserisci un numero di cui determinare i fattori primi: "); stringa = myInput.readLine(); intero = Integer.parseInt(stringa); i = intero; for (int d = 2; d < intero; d++) { if (intero%d == 0) { fattori.add(d); intero = intero/d; } } System.out.println("Il numero " + i + " e' divisibile per " + fattori); } catch (IOException ioe) { System.out.println("Si e' verificato un errore: " + ioe); System.exit(-1); } catch (Exception e) { System.out.println("Il numero immesso non e' un intero!"); } } }
Fuori dal for potrei inserire un add(intero), e così facendo visualizzerei [2, 13] per il 26 ma anche [2, 5, 10] per il 100.
Se poi gli passo 2016, mostra come fattore primo anche il 4!
Devo usare un altro for annidato?