[java] problem z dokończeniem prostego programu

0

Potrzebuje do programiku dołożyć następujące możliwości

isOrder() - zwraca true jeśli tablica uporządkowana
getMax() - zwraca wartość elementu maksymalnego
delMax() - usuwa element maksymalny w tablicy
delDups() - usuwa duplikaty
getMin() - zwraca wartość elementu minimalnego
delMin() - usuwa element minimalny w tablicy

kod mam następujący:


// Plik.  Array_1.java
// -----------------------------------------------------------
 
import java.io.*;

class Array
   {
   private int size;
   private long[] a;                 // referencja do tablicy 
   private int nElems;               // liczba elementów tablicy 
   //-----------------------------------------------------------
   public Array(int max)         // konstruktor 
      {
      size = max;
      a = new long[max];                 // tworzymy tablicę 
      nElems = 0;                        // na razie brak elementów 
      }
   //-----------------------------------------------------------
   public boolean find(long searchKey)
      {                              // szukanie określonej wartości
      int j;
      for(j=0; j<nElems; j++)            // dla każdego elementu...
         if(a[j] == searchKey)           // czy znaleziono?
            break;                       // tak, wyjście z pętli
      
      if(j == nElems)                    // doszliśmy do końca?
         return false;                   // tak, elementu nie znaleziono 
      else
         return true;                    // nie, element znaleziony 
      }  // end find()
   //-----------------------------------------------------------
   public void insert(long value)    // wstawienie elementu do tablicy 
      {
      if(nElems < size){ 
            a[nElems] = value;             // wstawiamy
            nElems++;  }                    // zwiększamy licznik elementów 
      else System.out.println("Brak miejsca");     
      }
   //-----------------------------------------------------------
   public boolean delete(long value) // usunięcie elementu z tablicy
      {
      int j;
      for(j=0; j<nElems; j++)        // szukamy elementu 
         if( value == a[j] )
            break;
      
      if(j==nElems)                  // nie znaleźliśmy
         return false;
      else                           // znaleźliśmy
         {
         nElems--;
         for(int k=j; k<nElems; k++) // przesuwamy pozostałe elementy 
            a[k] = a[k+1];
                            // zmniejszamy licznik elementów 
         return true;
         }
      }  // koniec delete()
   //-----------------------------------------------------------
   public void display()             // wypisuje zawartość tablicy 
      {
      for(int j=0; j<nElems; j++)       // dla każdego elementu...
         System.out.print(a[j] + " ");  // ...wypisujemy jego wartość
      
      System.out.println("");
      }
   //-----------------------------------------------------------
   
   }  // koniec klasy HighArray
////////////////////////////////////////////////////////////////

class ArrayApp
{
   //--------------------------------------------------------
   public static String getString() 
   	
   {
   	String s;
   	InputStreamReader isr = new InputStreamReader(System.in);
   	BufferedReader br = new BufferedReader(isr);
   	try{
      	  s = br.readLine(); 
      	  return s ;	
     	  }
    catch(IOException e) {
        System.out.println("Blad podczas odczytu danych");
       	}
   return "0" ;
   
   }
   //--------------------------------------------------------
   public static long getLong()
   {
   	long lnum;
   
    String s =getString();
    try{
              lnum =Long.parseLong(s); 
              return lnum;
       }
    catch(NumberFormatException e){
   	       System.out.println("Blad podczas konwersji liczby");  }
   
   return 0;
   }
   
   //--------------------------------------------------------
   public static void menu()
   {	System.out.println("--------------------" );
   	    System.out.println("Operacje na tablicy " );
      	System.out.println("--------------------" );
      	System.out.println("1. Dodaj element " );
      	System.out.println("2. Wyszukaj element " );
      	System.out.println("3. Usun  element " );
      	System.out.println("4. Wypisz tablice " );
      	System.out.println("0. Koniec programu " );
      	System.out.println("--------------------" );
      	System.out.print("Wybierz operacje: " );
   }
   //--------------------------------------------------------   
   
   public static void main(String[] args)
      {
      int maxSize = 100;        // rozmiar tablicy 
      Array arr;                // referencja do tablicy
      arr = new Array(maxSize); // tworzymy tablicę
      
      int op;
      long el, searchKey;
     
      do{
      	menu();
       
      	op	= (int) getLong();
      	switch (op)
      	{
      	   case 1: {//Dodaj element 
      			  System.out.print("Podaj element: ") ;
      	          el= getLong();
      	          arr.insert(el);
                  arr.display();                // wypisujemy elementy 
                  break;
      	        }
      	   case 2:{//Wyszukaj element
      		 	System.out.print("Podaj szukany element: " );
                searchKey =getLong();
         
                // szukamy zadanego elementu 
                if( arr.find(searchKey) )
                   System.out.println("Znaleziono " + searchKey);
                else
                   System.out.println("Nie znaleziono " + searchKey);
                break;   
      		    }
      	   case 3:{//Usun  element
      		 	System.out.print("Podaj element do usunięcia: " );
                el=getLong();
                arr.delete(el);
     
                arr.display(); 
                break;   
      		 }
      	   case 4: {//Wypisz tablice
      	   	    arr.display(); 
                break;  
      	   }
      	   case 0:{
      		 	System.out.println("Bye" );
      		 	break;
      		 }		
      	   default:
      		 	System.out.println("Nie ma takiej opcji! " ); 
      		}
      }while (op!=0);
      }  // koniec main()
   }  // koniec klasy ArrayApp
///////////////////////////////////////////////////////////////////////
// Array_0.java
// uruchomienie programu: C>java ArrayApp

class Array
   {
   private int size;
   private long[] a;                 // referencja do tablicy 
   private int nElems;               // liczba elementów tablicy 
   //-----------------------------------------------------------
   public Array(int max)         // konstruktor 
      {
      size = max;
      a = new long[max];                 // tworzymy tablicę 
      nElems = 0;                        // na razie brak elementów 
      }
   //-----------------------------------------------------------
   public boolean find(long searchKey)
      {                              // szukanie określonej wartości
      int j;
      for(j=0; j<nElems; j++)            // dla każdego elementu...
         if(a[j] == searchKey)           // czy znaleziono?
            break;                       // tak, wyjście z pętli
      
      if(j == nElems)                    // doszliśmy do końca?
         return false;                   // tak, elementu nie znaleziono 
      else
         return true;                    // nie, element znaleziony 
      }  // end find()
   //-----------------------------------------------------------
   public void insert(long value)    // wstawienie elementu do tablicy 
      {
      if(nElems < size){ 
            a[nElems] = value;             // wstawiamy
            nElems++;  }                    // zwiększamy licznik elementów 
      else System.out.println("Brak miejsca");     
      }
   //-----------------------------------------------------------
   public boolean delete(long value) // usunięcie elementu z tablicy
      {
      int j;
      for(j=0; j<nElems; j++)        // szukamy elementu 
         if( value == a[j] )
            break;
      
      if(j==nElems)                  // nie znaleźliśmy
         return false;
      else                           // znaleźliśmy
         {
         nElems--;
         for(int k=j; k<nElems; k++) // przesuwamy pozostałe elementy 
            a[k] = a[k+1];
                            // zmniejszamy licznik elementów 
         return true;
         }
      }  // koniec delete()
   //-----------------------------------------------------------
   public void display()             // wypisuje zawartość tablicy 
      {
      for(int j=0; j<nElems; j++)       // dla każdego elementu...
         System.out.print(a[j] + " ");  // ...wypisujemy jego wartość
      
      System.out.println("");
      }
   //-----------------------------------------------------------
   }  // koniec klasy HighArray
 
 class ArrayApp
   {
   public static void main(String[] args)
      {
      int maxSize = 100;        // rozmiar tablicy 
      Array arr;                // referencja do tablicy
      arr = new Array(maxSize); // tworzymy tablicę

      arr.insert(77);               // wstawiamy 10 elementów 
      arr.insert(99);
      arr.insert(44);
      arr.insert(55);
      arr.insert(22);
      arr.insert(88);
      arr.insert(11);
      arr.insert(00);
      arr.insert(66);
      arr.insert(33);

      arr.display();                // wypisujemy elementy 

      int searchKey = 35;           // szukamy elementu 35
      
      if( arr.find(searchKey) )
         System.out.println("Znaleziono " + searchKey);
      else
         System.out.println("Nie znaleziono " + searchKey);

      arr.delete(00);               // usuwamy 3 elementy 
      arr.delete(55);
      arr.delete(99);

      arr.display();                // wypisujemy elementy ponownie
      }  // koniec main()
   }  // koniec klasy ArrayApp

umiałby ktoś pomóc ?

wyszukiwanie, dodawanie usuwanie rozumiem, jednak ta część zadania jest dla mnie za trudna

0

isOrder: sprawdzasz w pętli czy kolejne dwa elementy są takie, że ten późniejszy jest nie mniejszy od tego wcześniejszego. Zwiększasz indeks o 1 i powtarzasz aż do końca tablicy. Jeżeli każda para spełnia ten warunek, to tablica jest uporządkowana.

getMax i getMin:
Jeżeli tablica jest uporządkowana (rosnąco) - co sprawdzasz za pomocą poprzedniej metody - najmniejszy element ma pierwszy indeks w tej tablicy, a największy ma indeks ostatni.
W przeciwnym wypadku nie jest uporządkowana. Pobierasz indeks pierwszego elementu do tymczasowej zmiennej do porównań, a następnie każdy kolejny porównujesz z komórką tablicy zapisaną pod tym indeksem. Jeżeli napotkany element jest większy (mniejszy) od wartości zapisanego indeksu, to indeks tego elementu zapisujesz do tej tymczasowej zmiennej. Kiedy dojdziesz do końca tablicy w zmiennej tej będziesz miał indeks największego lub najmniejszego elementu.

delMax i delMin: Za pomocą poprzednich metod znajdujesz indeks największego lub najmniejszego elementu i usuwasz go przez przekopiowanie elementu z następnego indeksu w jego miejsce, a potem kolejno aż do końca tablicy każdego następnego elementu w miejsce poprzedniego. To niezbyt efektywne, ale spełnia podane przez Ciebie warunki. Samo usuwanie elementu pod dowolnym indeksem powinno być osobną metodą (podobnie jak dodawanie elementu).

delDups: Tu problem jest bardziej skomplikowany. Jednym ze sposobów jest posortowanie tablicy tak aby była uporządkowana, a następnie przechodzenie przez kolejne indeksy porównując sąsiednie pary i usuwając nadmiarowe sztuki. Gdy tablica nie jest uporządkowana trzeba ją uporządkować (posortować). Co samo w sobie jest jakimś zadaniem.
Innym sposobem gdy ilość wartości elementów tablicy jest ograniczona (np. maksymalnie 256 wartości, np. element wyliczenia, kod znaku) jest stworzenie dodatkowej tablicy wartości boolean przechowującej pod swoimi indeksami informację czy taka wartość została już w tablicy spotkana. Jeżeli nie została, to należy takiemu indeksowi nadać true, w przeciwnym wypadku usunąć element ze spotkaną ponownie wartością.
To też nie jest efektywne, ale spełnia warunki.

0

coś takiego ??

public  static int GetMax (int[] arr) {
09.   
10.  
11.  int max = arr[0];  
12.   
13.  // sprawdzamy pozostałe elementy tablicy
14.  for (int i = 1; i < arr.length; i++) {

16.   if (arr[i] > max)
17.    max = arr[i];  
18.  }
19.   
20.
21.  return max;
22. }

analogicznie byłoby do GetMin</ort>

1 użytkowników online, w tym zalogowanych: 0, gości: 1