• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie nieograniczonej liczby obiektów

Object Storage Arubacloud
0 głosów
190 wizyt
pytanie zadane 28 grudnia 2017 w C# przez besest Użytkownik (530 p.)

Witam, od dłuższego czasu próbuję zrobić program, który będzie robić nieograniczoną liczbę obiektów. Np. postać która strzela - po naciśnięciu przycisku, tworzy się obiekt (nie ma żadnego limitu tych obiektów). Jak zrobić, aby każdy obiekt nazywał się inaczej? Oczywiście obiekty dodawane do listy. Noestety nie można zrobić czegoś takiego:

ArrayList bullets = new ArrayList();   //lista 

int number = 0;

void shoot()
{
     Bullet "bullet" + (number.ToString) = new Bullet();//operacja, której niestety nie da się wykonać
     number++;
}

Oczywiście ten kod jest tylko po to, by rozświetlić sytuację :D (pisany tutaj, nie w kompilatorze, więc mogą być drobne błędny). Rozwiązanie najlepiej w c#, ale może też być słownie, c++ lub java. 

1 odpowiedź

+1 głos
odpowiedź 28 grudnia 2017 przez RedRevenge Obywatel (1,230 p.)
wybrane 28 grudnia 2017 przez besest
 
Najlepsza

A po co tworzysz w pierwszej linii listę, skoro jej nie używasz? Myślę, że listą można by załatwić twój problem. Jeśli bardzo byś chciał, to mógłbyś także stworzyć pole w obiekcie Bullet, który zawierałby nazwę którą chcesz przypisać do obiektu i przekazywać ją np. w konstruktorze:

List<Bullet> bullets = new List<Bullet>();

int number = 0;

void shoot(){
	bullets.Add(new Bullet("bullet" + (number.ToString)));
	number++;
}
komentarz 28 grudnia 2017 przez besest Użytkownik (530 p.)
Listy tutaj nie wykorzystywałem, bo póki co nie mam obiektów. Składnia twojego kodu i mojego "bullet" + (number.ToString)  jest niepoprawna, więc... Proszę o pomoc nie gotowcem, a żeby mi wytłumaczyć jak to zrobić
1
komentarz 28 grudnia 2017 przez RedRevenge Obywatel (1,230 p.)

Tak, składnia mojego kodu jest niepoprawna, bo to tylko taki kod "tylko po to, by rozświetlić sytuację" (tak jak Twój).

Ogólnie stworzenie obiektu typu Bullet wyglądałoby następująco:

Bullet bullet = new Bullet();

Nazwa stworzonego obiektu to "bullet". Z tym, że Ty (o ile dobrze zrozumiałem) chciałbyś, aby metoda shoot() tworzyła za każdym razem nowy obiektu typu Bullet, ale żeby nawa każdego z nich była kolejno "bullet0", "bullet1", "bullet2" itd. Dobrze rozumiem?

Jeśli tak to zastanów się czy to co chcesz osiągnąć na pewno jest Ci potrzebne. Ta powiedzmy "nazwa" obiektu, jeśli rzeczywiście jest Ci potrzebna, może siedzieć w samym obiekcie jako jego pole. Potrzebne by było np. dodanie pola typu string w klasie tego obiektu. 
 

komentarz 28 grudnia 2017 przez besest Użytkownik (530 p.)
Tzn. chodzi mi tylko o to, żeby tworzyła się nielimitowana liczba obiektów, i żeby można było sprawdzić np. który z pocisków trafił w jakiego przeciwnika, i tych dwoje usunąć. :D
1
komentarz 28 grudnia 2017 przez RedRevenge Obywatel (1,230 p.)

No to według mnie wystarczy:

  1. Stworzenie listy typu Bullet
  2. W metodzie shoot() stworzyć nowy obiekt typu bullet i dodać go od razu do listy

Nie wiem dokładnie jak to u Ciebie będzie wszystko działało, ale wydaje mi się że nazywanie tych obiektów jest niepotrzebne. Przykładowy, prosty kod mógłby wyglądać następująco:
 

List<Bullet> bullets = new List<Bullet>();
 
void Shoot(){
    bullets.Add(new Bullet());
}

//Enemy - hipotetyczna klasa reprezentujaca przeciwnika
void CheckBullets(Enemy enemy){

	foreach(Bullet bullet in bullets){
		//CheckBullet() - hipotetyczna metoda sprawdzajaca czy pocisk trafil podanego przeciwnika
		if(bullet.CheckBullet(enenmy)){
			//jesli przeciwnik trafiony zrob cos tam
		}
	}
}

 

komentarz 28 grudnia 2017 przez besest Użytkownik (530 p.)
Dzięki bardzo, już wiem jak to zrobić :D.
komentarz 28 grudnia 2017 przez besest Użytkownik (530 p.)
edycja 28 grudnia 2017 przez besest

Jeszcze jedno - napisałem coś podobnego, tyle że baza danych z imionami. Mam takie ostrzeżenie, że zmienna name "is never assigned to", i jego wartość zawsze będzie równa domyślnej czyli null. I tak jest. Ale dlaczego jest zawsze null?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
//using System.Threading;

namespace ConsoleApplication1
{
    class Person
    {
        public string name;  //<----- 

        public Person(string n)
        {
            n = name;
        }
    }
    
    
    class Program 
    {
        static List<Person> people = new List<Person>();
        
        static void Add(string n)
        {
            people.Add(new Person(n));
        }

        static void Main(string[] args)
        {
            for (int i = 0; i < 3; i++)
            {
                Console.Write("Podaj imię: ");
                string name = Console.ReadLine();
                Program.Add(name);
            }

            for (int i = 0; i < people.Count; i++)
            {
                Console.WriteLine(people[i].name);
            }
         
            Console.WriteLine("\nNaciśnij dowolny klawisz, aby zamknąć program...");
            Console.ReadKey();
        }
    }
}

Analizuję kod, i nie mam pojęcia...

1
komentarz 28 grudnia 2017 przez RedRevenge Obywatel (1,230 p.)
Odpowiedź na Twoje pytanie znajduje się najprawdopodobniej w konstruktorze klasy Person. Operator przypisania "=" do zmiennej znajdującej się po lewej stronie zapisuje wartość znajdującą się po prawej stronie znaku.
komentarz 28 grudnia 2017 przez besest Użytkownik (530 p.)
ehhhhh dzięki wielkie. Chwila nieuwagi i już nie działa... Dzięki bardzo za pomoc :)
komentarz 28 grudnia 2017 przez RedRevenge Obywatel (1,230 p.)
Takie błędy się zdarzają, co więcej - zdarza się że kompletnie nie możemy znaleźć ich przyczyny (zwłaszcza na początku nauki). Często wtedy pomaga wtedy spojrzenie na kod "świeżym okiem" przez kogoś innego. Cieszę się, że mogłem pomóc :) Odezwij się kiedyś i daj znać jak idzie programowanie ;)

Podobne pytania

0 głosów
1 odpowiedź 458 wizyt
0 głosów
1 odpowiedź 1,531 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez mIKY Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 1,343 wizyt
pytanie zadane 17 maja 2018 w C i C++ przez giedymin33 Początkujący (290 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...