|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jan 2012
Messaggi: 6
|
[Java] Confrontare stringhe di numeri
Ho 10 array di uguali dimensioni contenenti ciascuno una stringa di numeri separati solo dal carattere "\n", quindi se andassimo a stamparli sarebbero tutti in colonna. I valori contenuti sono diversi, ma tutti numeri interi.
Devo confrontare tutti questi array per trovare i 3 tra loro più simili. Con simili intendo che abbiano i valori più vicini: es. Array A= 10, 20, 30, 45 Array B= 10, 15, 50, 60 differenze: 10-10=0, 20-15=5, 50-30=20, 60-45= 15 totale differenza: 0+5+20+15= 40 E fare questo confronto con ogni array per trovare i tre che hanno il totale differenza minore. Come posso fare questa cosa? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Per convertire i numeri puoi usare
http://docs.oracle.com/javase/1.5.0/...lang.String%29 e http://docs.oracle.com/javase/1.5.0/...lang.String%29 |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Feb 2011
Città: Apulia
Messaggi: 495
|
Quote:
Per evitare di allocare troppa roba in memoria, direi che alla fine del ciclo dovresti conservare solo i 3 con differenza minore. Per farlo potresti utilizzare un oggetto ordinablie in maniera custom con struttura chiave -> valore tipo un TreeMap. Alla fine del confronto, nelle prime 3 posizioni avrai quello che ti interessa, relativamente al primo array. Es. nel TreeMap avrai : A <differenza> B , 1 A <differenza> C , 3 A <differenza> D , 5 A <differenza> E , 7 Elimini l'utlimo e hai i primi 3 con differenza minore. Ora devi confrontare tutti gli altri allo stesso modo. Più o meno dovrebbe essere questa la logica da utlizzare. Se ti serve proprio il codice da ulitizzare dovresti scrivermi come ricevi l'input.
__________________
cioè bho |
|
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Jan 2012
Messaggi: 6
|
Questa è la parte di codice interessata:
Codice:
public static void main(String[] args) throws IOException{ File f = new File("./MiaCartella"); File[] files = f.listFiles(); for(int k = 0; k < files.length; k++){ //per ogni file contenuto nella cartella (ne metto 10), questo genera un array MioArray[] di 256 valori int[] mioArray = new int[256]; for(int i=0;i<arrayP.length;i++){ mioArray[arrayP[i]]++; arrayP[i] = 0xff000000 | arrayP[i] * 0x10101; } } } Dovrei quindi salvare i 10 array all'esterno del ciclo for() e fare i confronti di cui parlavo. |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Jan 2012
Messaggi: 6
|
Nessuno?
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Qual è la domanda?
|
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Jan 2012
Messaggi: 6
|
All'interno del ciclo for mi crea un array. Ogni array compilato lo devo salvare da qualche parte sennò a ogni nuovo file in input mi sovrascrive l'array precedente. Mi era venuta un'idea del genere: creare un contatore numArray=0 e ad ogni ciclo compiuto incrementarlo di uno. La cosa che vorrei fare è però assegnare questo numero al nome dell'array... cioè in modo che lui mi crei da solo Array0, Array1, Array2 ecc...
E' possibile farlo? Oppure un modo migliore? |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
@ello:
l'utente "brodaglia" (dio, che nick ![]() Prova a scriverla in pseudo-codice: farlo ti aiuterà a comprenderla e a strutturarla, solo dopo cimentati con la stesura del sorgente. ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#9 |
Junior Member
Iscritto dal: Jan 2012
Messaggi: 6
|
Lo so, ma non ho la più pallida idea di come farlo...
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Bene, allora facciamo assieme.
Mi pare di aver capito che il tuo programma legge da un file di testo i dati in input, per piacere, copia&incolla qui il contenuto di questo file, così possiamo esaminarlo per stabilire come estrarre i dati. Una volta fatto questo analizzermo il problema tentando di spezzarlo, se è il caso, in parti più piccole per risolverlo. Nota che è esattamente quello che abbiamo appena fatto: abbiamo "spezzato" l'aquisizione dei dati in input dal resto del problema.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 27-01-2012 alle 14:49. |
![]() |
![]() |
![]() |
#11 |
Junior Member
Iscritto dal: Jan 2012
Messaggi: 6
|
No non legge da file di testo, chiedo scusa se mi sono spiegato male. Il programma in pratica legge dei file immagini in una cartella, passa tutti i pixel e prende i valori di luminosità. Alla fine per ogni immagine viene creato il relativo array di 256 valori che rappresenta l'istogramma dell'immagine.
Sono questi array di ogni immagine che devo confrontare. Codice:
public static void main(String[] args) throws IOException{ File f = new File("./MiaCartella"); File[] files = f.listFiles(); for(int k = 0; k < files.length; k++){ BufferedImage immagine = ImageIO.read(files[k]); int[] arrayPixel = immagine.getRGB(0, 0, w, h, null, 0, w); float[] arrayHSB = new float[3]; //HSB= hue, saturation, brightness for(int j=0; j<arrayPixel.length;j++){ int rgb = arrayPixel[j]; Color.RGBtoHSB((rgb >> 16) & 255, (rgb >> 8) & 255, (rgb) & 255, arrayHSB); arrayPixel[j] = (int) (arrayHSB[2] * 255); } int[] istogramma = new int[256]; //Questo crea l'array finale che mi serve da confrontare for(int i=0;i<arrayPixel.length;i++){ istogramma[arrayPixel[i]]++; arrayPixel[i] = 0xff000000 | arrayPixel[i] * 0x10101; } //Qua creo una stringa solo nel caso mi serva l'output dell'array in formato testo String out = ""; for(int i=0;i<istogramma.length;i++){ out += i + " " + istogramma[i] + "\n"; } } } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:05.