Generowanie tablic, wyświetlanie, sortowanie

0

Witam

Jestem początkującym programistą Javy i mam pewną listę zadań do zrobienia. 2 z 3 zadań mam zrobione (mam nadzieje, że dobrze) - ale prosiłbym o zerknięcie i w razie potrzeby skorygowanie moich błędów. Natomiast głównym moim problemem jest zadanie 3. Zaraz wytłumaczę o co chodzi. (Programuję w BlueJ - wymagania uczelnii, trochę nie czaje tych prostokątów i strzałek podczas tworzenia projektu).

Lista:

Zadania

  1. Utwórz klasę Tablica (tablica jednowymiarowa wartości Integer). Klasa powinna posiadać
    metody:
    • wypełnienie tablicy losowymi liczbami (4 pkt.),
    • sortowanie funkcja sort() z klasy arrays (4 pkt.),
    • wyświetlenie uporządkowanej tablicy (4 pkt.).
  2. Utwórz generator do inicjalizowania tablic elementami typu integer i doubel (4 pkt.).
  3. Utworz klasę Tab (tablica jednowymiarowa wartości Integer). Klasa powinna posiadać
    metody:
    • wypełnienie tablicy losowymi liczbami za pomocą generatora z punktu 2, (2 pkt.),
    • wyświetlenie zawartości tablicy(3 pkt.),
    • sortowanie metoda bąbelkową (3 pkt.),
    • sortowanie przez wstawianie (3 pkt.),
    • sortowanie przez scalanie (3 pkt.),
    • sortowanie przez zliczanie (3 pkt.),
    • sortowanie kubełkiem (4 pkt.),
    • sortowanie metoda pozycyjna (4 pkt.),
    • sortowanie metoda przez wybieranie (4 pkt.),
    • sortowanie metoda Shella (5 pkt.),
    • sortowanie metoda szybka (ang. quicksort) (5 pkt.),
    • sortowanie kopcem (ang. heapsort) (5 pkt.).

Zad. 1

import java.util.*;
import java.util.Arrays;
import java.util.Random;
class Tablica
{
int[] tab = new int[10];
    void wypelnienie()
    {
        Random r = new Random();
        for(int i=0;i<10;i++)
        {
            tab[i]=r.nextInt();
            System.out.println(tab[i]);
        }
    }
    void sortowanie()
    {
        Arrays.sort(tab);
        for(int i=0;i<10;i++)
        {
            System.out.println(tab[i]);
        }
    }
}

Zad. 2

class Generator
{
   int[] generowanie(int n)
   {
       int[] tab = new int[n];
       return tab;
   }
}

I tu zaczyna się problem: Nie wiem jak napisać aby to co utworzyła metoda generowanie() później wykorzystać w metodzie wyświetlanie(). A co do sortowania to jeszcze nie doszedłem (W razie problemów dopisze w tym temacie).

Zad. 3

import java.util.Random;
class Tab
{
   int[] generowanie(int n) // tworzenie tablicy wypełnionej losowymi liczbami
   {
       Random r = new Random();
       int[] tab = new int[n];
       for(int i=0;i<n;i++)
       {
            tab[i]=r.nextInt();    
       }
       return tab;
   }
   void wyswietlanie() // wyswietlanie tablicy
   {
       for(int i=0;i<.lenght;i++)
       {
            System.out.println(tab[i]);   
       }
    }
}
class Run
{
    public static void main(String[] args)
    {
        wyswietlanie(generowanie());
    }
}

Z góry dziękuje za pomoc :)
PS. Będę wdzięczny za każdą uwagę i opinie.

1

Tablice masz zdefiniowaną lokalnie zatem kolejna funkcja jej nie widzi. Musisz przekazać ją jako argument

void wyswietlanie ( int []tab){
//...
}
0

Doszedłem do etapu sortowanie przez scalanie i napotkałem problem. W czym tkwi błąd, że nie mogę posortowanej tablicy przypisać do tablicy wynikowej ?

import java.util.Random;
import java.util.Arrays;
class Tab
{
   int[] generowanie(int n) // tworzenie tablicy wypełnionej losowymi liczbami (int)
   {
       Random r = new Random(); // wartości losowe
       int[] tab = new int[n]; // tworzenie tablicy
       for(int i=0;i<n;i++) // wypełnienie tablicy wartościami losowymi
       {
            tab[i]=r.nextInt(10);    
       }
       return tab; // zwrócenie tablicy
   }
   int[] margeandsort(int[] tab)
   {
        int lewaStr=tab.length/2;
        int prawaStr=tab.length-lewaStr;
        int[] lewa = new int[lewaStr];
        for(int i=0;i<lewaStr;i++)
        {
            lewa[i]=tab[i];
        }
        int[] prawa = new int[prawaStr];
        for(int i=0;i<prawaStr;i++)
        {
            prawa[i]=tab[lewaStr+i];
        }
        if(lewaStr>1)
        {
            lewa = margeandsort(lewa);
        }
        if(prawaStr>1)
        {
            prawa = margeandsort(prawa);
        }
        int[] sorted = new int[tab.length];
        int i = 0;
        int j = 0;
        while(i < lewaStr || j < prawaStr) 
        {
            if(i >= lewaStr) 
            {
                for(; j < prawaStr; j++)
                    sorted[i + j] = prawa[j];
            }
            else if(j >= prawaStr) 
            {
                for(; i < lewaStr; i++)
                {
                    sorted[i + j] = lewa[i];
                }
            }
            else 
            {
    			if(lewa[i] <= prawa[j]) 
    			{
    				sorted[i + j] = lewa[i];
    				i++;
    			}
    			else 
    			{
    				sorted[i + j] = prawa[j];
    				j++;
    			}
            }
        }
        return sorted;
   }
   void mergesort(int tab[])
   {
       tab = margeandsort(tab);
   }
}

Z Góry dziękuje za pomoc :)

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