[C#] Kolejka - Wyjęcie poza metodę

Potrzebuję wyciągnąć liczę z temp, aż za casa. Czy jest ktoś kto wie jak to zrobić ?

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace Main

{

    class Elem

    {

        private int wartosc;

        private Elem next;


        public Elem(int x)

        {

            wartosc = x;

            next = null;

        }


        public void setNext(Elem e)

        {

            next = e;

        }


        public Elem getNext()

        {

            return next;

        }


        public int getWartosc()

        {

            return wartosc;

        }

    }



    class Kolejka

    {

        Elem first, last;


        public Kolejka()

        {

            first = last = null;

        }


        public Elem getFirst()

        {

            return first;

        }


        public Elem getLast()

        {

            return last;

        }


        public void setLast(Elem e)

        {

            last = e;

        }


        public void setFirst(Elem e)

        {

            first = e;

        }



        public void add(int x)

        {


            Elem temp = new Elem(x);

            if (first == null)

            {

                first = last = temp;

            }

            else

            {

                last.setNext(temp);

                last = temp;

            }


        }



        public void delete()

        {

            Console.WriteLine("Element usunięty z kolejki: ");

            if (first != null)

            {

                Elem temp = first;


                {

                    Console.Write(temp.getWartosc() + " ");

                    temp = temp.getNext();

                }

                Console.WriteLine();

            }

            else

            {

                Console.WriteLine("kolejka jest pusta");

            }




            if (first != null)

            {

                if (first.getNext() == null)

                {

                    last = null;

                }

                first = first.getNext();




            }

            else Console.WriteLine("kolejka jest pusta");

        }


        /* wyswietla zawartosc kolejki */

        public void show()

        {

            Console.WriteLine("Kolejka: ");

            if (first != null)

            {

                Elem temp = first;

                while (temp != null)

                {

                    Console.Write(temp.getWartosc() + " ");

                    temp = temp.getNext();

                }

                Console.WriteLine();

            }

            else

            {

                Console.WriteLine("kolejka jest pusta");

            }

        }






        /* menu */

        public static void menu()

        {

            Console.WriteLine("(0) MENU\n(1) ADD\n(2) DELETE\n(3) SHOW");

            Console.WriteLine("(4) EXIT");

        }

    }




    public class Program

    {

        public static void Main(String[] args)

        {



            Kolejka kolejka = new Kolejka();



            int t;

            String s;


            while ((s = Console.ReadLine()) != null)

            {

                t = int.Parse(s);


                switch (t)

                {

                    case 0: Kolejka.menu(); break;

                    case 1: Console.Write("co chcesz dodac? ");

                        s = Console.ReadLine();

                        t = int.Parse(s);

                        kolejka.add(t);

                        break;

                    case 2: kolejka.delete(); break;

                    case 3: kolejka.show(); break;

                    case 4: return;

                }

            }


        }

    }


}

Jeżeli dobrze zrozumiałem…

Wartości zmiennych żyją tyle, ile metody, w których te się mieszczą. Za casem metoda już nie działa, więc i temp nie istnieje.

Ale możesz dorzucić do klasy pole przechowujące ostatnią wartość temp, a potem odnosić się do niego przez kolejka.pole

No tak, tylko jak, bo niestety nie potrafię tego

Dodane 25.01.2012 (Śr) 19:55

No tak, tylko jak, bo niestety nie potrafię tego

Przykład:

class Koleja

    { 

        class Elem

        {

            private int wartosc;

            private Elem next;


            public Elem(int x)

            {

                wartosc = x;

                next = null;

            }


            public void setNext(Elem e)

            {

                next = e;

            }


            public Elem getNext()

            {

                return next;

            }


            public int getWartosc()

            {

                return wartosc;

            }

        }


        Elem first, last;


        private int? wartosc=null;


        public Koleja()

        {

           first = last = null;

        }


        public void add(int x)

        {

            Elem temp = new Elem(x);

            if (first == null)

            {

                first = last = temp;

            }

            else

            {

                last.setNext(temp);

                last = temp;

            }


        }


        public void delete()

        {

            if (first != null)

            {

                wartosc = first.getWartosc();


                if (first.getNext() == null)

                {

                    first = last = null;

                }

                else

                {

                    first = first.getNext();

                }

            }

            else

            {

                wartosc = null;

                Console.WriteLine("kolejka jest pusta");

            }

        }


        public int? getWartosc()

        {

            return wartosc;

        }


        public void show()

        {

            if (first != null)

            {

                Elem temp = first;

                while (temp != null)

                {

                    Console.Write(temp.getWartosc() + " ");

                    temp = temp.getNext();

                }

                Console.WriteLine();

            }

            else

            {

                Console.WriteLine("kolejka jest pusta");

            }

        }


    }

Odpalenie:

Koleja ko = new Koleja();


            ko.add(10);

            ko.add(20);

            ko.add(30);


            for (short i = 0; i < 4; i++)

            {

                System.Console.WriteLine("Petla nr {0}",i);


                ko.show();


                if (ko.getWartosc() != null)

                    System.Console.WriteLine("wartosc {0}",ko.getWartosc());

                else

                    System.Console.WriteLine("Brak wartosci");


                ko.delete();


            }

Jak widać “ko.getWartosc()” pobiera zawartość po usunięciu jej z kolejki, jak jest pusta zwraca null.

int? wartosc;

            int wczytaj,bufor=0;

            bool powodzenie = true;

            while (true)

            {

                try

                {

                    wczytaj = int.Parse(Console.ReadLine());

                }

                catch(FormatException e)

                {

                    Console.WriteLine(e.Message);

                    break;

                }


                switch (wczytaj)

                {                    

                    case 1: Console.Write("co chcesz dodac? "); 

                            try

                            {

                                bufor = int.Parse(Console.ReadLine());

                            }

                            catch (FormatException e)

                            {

                                powodzenie = false;

                                Console.WriteLine(e.Message);

                            }

                            finally

                            {

                                if (powodzenie)

                                {

                                    ko.add(bufor);

                                }

                                else

                                {

                                    wczytaj = 4;

                                }

                            }

                            break;

                    case 2: ko.delete(); 

                            wartosc = ko.getWartosc(); 

                            break;

                    case 3: ko.show(); break;

                    default: Ko.menu(); break;

                }

                if (wczytaj == 4)

                    break;

            }


//wartosc dostepna;

A mógłbyś mi to złożyć w całość ?

pierwszy + trzeci listing @blapiter’a jest ‘całością’

szczerze to jestem ciekaw jak chcesz oddać, zaliczyć ten program skoro nie masz totalnie zielonego pojęcia o tym co jest w kodzie

Też jestem ciekaw, kazano nam zrobić, mimo że nie mamy podstaw.

Dodane 25.01.2012 (Śr) 22:03

Nawet złożyć go nie mogę :frowning:

Dodane 25.01.2012 (Śr) 22:33

a nie da się jakoś tylko tego mojego programu deliktanie przerobić ?

Dodane 26.01.2012 (Cz) 19:08

Po złożeniu mam za dużo błędów, więc gdzieś jest chyba błąd