import javabooklet.*;
import java.util.Random;
import java.awt.Font;

/**
  raccolta di metodi statici utili per programmare con arrays,
  usando i metodi statici della classe Input,
  che fanno già il controllo del tipo di input
*/

public class IntArrayUtil {

/**
  effettua l'input di una sequenza di int da tastiera,
  costruisce il corrispondente array e lo restituisce
  come risultato
*/

  public static int[] leggi() {
    int n = Input.readInt("Di che lunghezza vuoi l'array?");
    int[] elementi = new int[n];

    for(int i=0; i<n; i++) {
      elementi[i] = Input.readInt("immetti elemento n. " + i + " (double)");
    }
    return elementi;
  }

/**
  scrive sulla consolle gli elementi dell'array
  in sequenza
*/
  public static void scriviSuConsolle(int[] a) {
    System.out.println("l'array e': ");
    for(int i=0; i < a.length; i++) {
      System.out.println(a[i]);
    }
  }

/**
  scrive in un MessageDialog gli elementi dell'array
  in sequenza
*/
  public static void scriviSuMessageDialog(int[] a) {
    String output = "l'array è:  ";
    for(int i=0; i < a.length; i++) {
      output = output + a[i] + "  ";
    }
    OptionIO.showMessageDialog(output);
  }

/**
  scrive in un OutputBox gli elementi dell'array
  in sequenza
*/
  public static void scriviSuOutputBox(int[] a) {
    OutputBox output = new OutputBox();
    output.print("l'array è: ");
    for(int i=0; i < a.length; i++) {
      output.print(a[i] + "  ");
    }
    output.waitUntilClose();
  }


/**
  restituisce (dopo averla costruita) la stringa
  costituente la scrittura della sequenza degli
  elementi dell'array
*/
  public static String arrayToString(int[] a) {
    StringBuffer stringBuf = new StringBuffer();
    for(int i=0; i < a.length; i++) {
      stringBuf.append(a[i]+" ");
    }
    return stringBuf.toString();
  }


/**
    ricerca sequenziale in un array
*/


/**
  ricerca sequenziale in un array, con restituzione di un valore booleano
*/
  public static boolean ricerca(int x, int[] a) {
    int n = a.length;
    for(int i=0; i < n; i++) {
      if(a[i] == x) return true;
    }
    return false;
  }

/**
    ricerca sequenziale in un array, con restituzione dell'indice;
    se il valore cercato non c'è, restituisce -1
*/

  public static int ricercaIndice(int x, int[] a) {
    int n = a.length;
    for(int i=0; i < n; i++) {
      if(a[i] == x) return i;
    }
    return -1;
  }

/**
    ricerca sequenziale in un array,
    realizzata con un while;
    procedura errata: perché?
*/
  public static boolean ricercaErrata(int x, int[] a) {
    int i = 0;
    int n = a.length;
    while(i < n && a[i] != x) i++;
    return a[i] == x;
  }

/**
    ricerca sequenziale
    realizzata con un while;
    altra procedura errata: perché?
*/
  public static boolean ricercaErrata2(int x, int[] a) {
    int i = 0;
    int n = a.length;
    while(a[i] != x && i < n) i++;
    return i < n;
  }

/**
    ricerca sequenziale
    realizzata con un while;
    procedura corretta
*/
  public static boolean ricercaWh(int x, int[] a) {
    int i = 0;
    int n = a.length;
    while(i < n && a[i] != x) i++;
    return i < n;
  }

/**
    ricerca sequenziale con restituzione dell'indice,
    realizzata con un while;
*/
  public static int ricercaWhIndice(int val, int[] a) {
    int i = 0;
    int n = a.length;
    while(i < n && a[i] != val) i++;
    if(i < n) return i; else return -1;
  }

/**
    restituisce true se l'array-argomento
    è ordinato, false se non lo è
*/
  public static boolean èOrdinato(int[] a) {
    int n = a.length;
    int i = 1;
    while(i < n && a[i-1] <= a[i]) i++;
    return i==n;
  }

}


