C# - Problemi i rješenja izdvojena tema

poruka: 2.151
|
čitano: 704.645
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
11 godina
neaktivan
offline
C# - Problemi i rješenja

Kada pokrenem aplikaciju ne dobijem nikoju poruku osim one da windows traži rješenje problema.

Najvjerojatnije je problem u dll-u. Naime, pri pokretanju forme trebam aktivirati licencu za XtremeDocumentStudio.NET koji mi omogućava da prikažem dokument u svojoj formi. Kada izbrišem tu liniju, aplikacija radi. Što mogu učiniti u vezi toga? Već sam posla mail supportu ali moram čekati do ponedjeljka.

 

Ovo je ta linija koda:

Framework.ActivateLicense(LicenseKey);

PeMaCN
Poruka je uređivana zadnji put sub 5.12.2015 13:13 (PeMaCN).
Moj PC  
0 0 hvala 0
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

Pa jel imaš licencu?

And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him...
11 godina
neaktivan
offline
C# - Problemi i rješenja

Da. Licenca je free i key je u redu

PeMaCN
Moj PC  
0 0 hvala 0
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

Očito nešto ne štima sa licenciranjem... Ili je možda .dll x86 a tebi je projek AnyCPU. Ili obratno. Ako je x86 dll, onda ti i projekt mora biti x86.

And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him...
11 godina
neaktivan
offline
C# - Problemi i rješenja

Pozdrav.

Imam jedan problem pa ako mi tko može pomoći.

 

Imam listu lista stringova gdje u svakoj listi trebam na početak stringa dodati brojeve 1,2,3,....Ovaj dio koda je u redu:

 

List<List<string>> Abc;

for (int i = 0; i < N; i++)
{
   Abc[i] = Abc[i].Select((item, index) => (index + 1).ToString() + ". " + item).ToList();
}

 

Problem je u tome da želim provjeriti ako je neka lista već numerirana kako na kraju ne bi dobio ovo: "1.1.abc","2.2.def","3.3.ghi",...

Hvala unaprijed

PeMaCN
Moj PC  
0 0 hvala 0
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

Bedast pristup (i jednostavniji) - prije dodavanja, uzmi prvi znak i probaj ga sa Int32.TryParse pretvoriti u int. Ako nije int, onda valjda nije numerirano.

Pametan pristup (i kompliciraniji) - prije dodavanja, provjeri regexom da li počinje sa brojem - Regex.Match a regex ti je (\d+)(\w+). Možeš isprobati ovdje. Ako ima broj, prva grupa mora sadržavati int.

And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him...
11 godina
neaktivan
offline
C# - Problemi i rješenja

Za koristiti regex trebao bi uključiti i dll za njega. Što misliš o funkciji StartsWith?

PeMaCN
Moj PC  
0 0 hvala 0
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

Pa nije da regex zauzima nešto puno mjesta i memorije...

 

Čemu startsWith, moraš ga lupati 10 puta (od 0 do 9) - lakše ti je onda sa Int32.TryParse vidjeti dal se prvi znak može pretvoriti u broj. Ako da, linija je numerirana i odmah dobiješ koji je broj, a ako TryParse faila, onda prvi znak nije broj.

And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him...
11 godina
neaktivan
offline
C# - Problemi i rješenja

A kako ću za TryParse izvući string iz liste stringova (jer je Abc[i] lista stringova) a da ne produžujem previše kod

PeMaCN
Poruka je uređivana zadnji put ned 6.12.2015 19:10 (PeMaCN).
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
C# - Problemi i rješenja

A da se jednostavno baziraš na točku:

 

if (Abc[i].Contains("."))
{
   //Numerisano
}
else
{
   //Nije numerisano
}

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Abc[i] nije string nego lista stringova jer je List<List<string>> Abc

 

Ja sam to riješio na ovaj način ali ako netko ima bolji, brži i kraći način neka slobodno javi(bio bih zahvalan):

 

bool check = true;
foreach (List<string> a in Abc)
{
    foreach (string temp in a)
    {
      if (char.IsDigit(temp.First()))
      {
         check = false;
      }
    }
}
if (check)
{
    for (int i = 0; i < number; i++)
    {
       Abc[i] = Abc[i].Select((item, index) => (index + 1).ToString() + ". " + item).ToList();
    }
}

 

Možda je način malo primitivan ali radi.

PeMaCN
Poruka je uređivana zadnji put ned 6.12.2015 19:57 (PeMaCN).
12 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Što to točno znači da neka lista "nije numerirana"? Što treba napraviti za listu "1.abc","2.def","ghi"?

 

Tvoj kod je pretvara u "1.1.abc","2.2.def","3.ghi". Osim toga, renumeriraš sve liste i kada samo jedna od njih nije numerirana.

11 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Ja raspolazem sa vise lista stringova od kojih je jedna npr. "aaa", "bbb", "ccc". Ta lista nije numerirana. Kad je lista numerirana, tada to izgleda ovako "1.aaa","2.bbb","3.ccc".
PeMaCN
Moj PC  
0 0 hvala 0
16 godina
offline
Re: C# - Problemi i rješenja

var flattedList = Abc.SelectMany(s => s)

           .Where(s => !String.IsNullOrEmpty(s));             

int stringPlace = 0;             

foreach (var _string in flattedList)             

{                 

   ++stringPlace;                 

   if (_string.Length > 0 && char.IsDigit(_string[0]))                 

   {                     

     Console.WriteLine(_string);                     

     continue;                 

   }                 

   var numberedString = String.Format("{0}.{1}", stringPlace, _string);                 

   Console.WriteLine(numberedString);             

}

You can patch technical vulnerabilities as they evolve, but there is no patch for stupidity, or rather gullibility. - Kevin Mitnick
Poruka je uređivana zadnji put ned 6.12.2015 20:52 (Bukva).
12 godina
neaktivan
offline
Re: C# - Problemi i rješenja
PeMaCN kaže...
Ja raspolazem sa vise lista stringova od kojih je jedna npr. "aaa", "bbb", "ccc". Ta lista nije numerirana. Kad je lista numerirana, tada to izgleda ovako "1.aaa","2.bbb","3.ccc".

 Onda je dovoljno provjeriti samo da li prvi string liste počinje s "1.".

15 godina
offline
Re: C# - Problemi i rješenja
Koja je prednost (smisao)korištenja override funkcije u subclass-i ,umjesto da napravimo novu funkciju
McLaren Mercedes:1974.Emerson Fittipaldi-1976.James Hunt-1984.Niki Lauda-1985.-1986.Alain Prost-1988.Ayrton Senna-1989.Alain Prost-1990.-1991.-Ayrton Senna-1998.-1999.Mika Hakkinen-2008.Lewis Hamilton
Moj PC  
0 0 hvala 0
17 godina
offline
Re: C# - Problemi i rješenja

U donjem primjeru u klasi C provjeravamo ID objekata klase A i klasa naslijeđenih iz klase A.

Za to nam je potreban samo jedan metod zahvaljujući polimorfizmu i override metodu. Bit override metode je u ovom, a najbolji primjer u praksi je override metoda ToString, to je metod klase Object, a sve klase u C# su derivirane iz te klase.

 

 

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

namespace ConsoleApplication2
{
    class A
    {
        public virtual void ID()
        {
            Console.WriteLine("A");
        }
    }
    class B : A
    {
        public override void ID()
        {
            Console.WriteLine("B");
        }
    }
    class C
    {
        public void Detektiraj(A a)
        {
            a.ID();
        }
    }
  
    class Program
    {
        static void Main(string[] args)
        {
            A prvi = new A();
            B drugi = new B();
            C provjera = new C();
            provjera.Detektiraj(prvi);
            provjera.Detektiraj(drugi);  
        }
    }
}

Poruka je uređivana zadnji put pet 11.12.2015 18:58 (Floki).
14 godina
offline
Re: C# - Problemi i rješenja

Zna li netko kako ovo riješiti?

 

Kreirati  (Console Application) koja čita brojeve iz jedne datoteke i zapisuje u drugu datoteku brojeve koji su djeljivi s nekim prethodno definiranim brojem. Znam da trebam koristiti streamwriter i streamreader, ali nisam siguran kako.

16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

Možeš i ovako.

 

int a = Console.ReadKey();

var data = File.Read(ulaz);

var outdata = "";

foreach (string s in data)

{

    int b = 0;

    if(int.TryParse(s, out b))

    {

        if(b % a == 0)

        {

             // nema ostatak

             outdata = outdata + "," + b;

        }

    }

}

File.Write(outdata, "file");

 

A rifle is like a human. The stock is the skeleton, the scope is the eyes, the action is the brain, and the barrel is the heart. But you, the man behind the rifle, you are the soul.
Poruka je uređivana zadnji put pon 14.12.2015 20:21 (Sum_of_all_fears).
15 godina
neaktivan
offline
C# - Problemi i rješenja

Evo mene opet :D

 

Recimo da imam dvije klase "postavke" i "mysql". Zašto ja unutar klase "mysql" ne mogu napraviti objekt klase "postavke" i koristiti njezine metode, nego unutar klase "mysql" moram napraviti funkciju i onda tek koristit metode.

 

Znači zašto ovo neće raditi:

 

class mysql
{

postavke neke = new postavke();
private string user=neke.getusername();

public void funkcija(){

sad tu koristim user

 

}

}

 

 A ovo radi:

 

class mysql
{

 

public void funkcija(){

 

postavke neke = new postavke();
private string user=neke.getusername();

 

 

}

}

 

 

 

 

 

Poruka je uređivana zadnji put sri 16.12.2015 20:40 (Zoko).
 
0 0 hvala 0
9 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Možeš koristiti, ali ne na način na koji ti to pokušavaš.

 

Ti pokušavaš inicijalizirati varijablu klase koristeći drugu varijablu klase kod samog kreiranja klase. To izaziva compile time error jer se tvoja linija "private string user=neke.getusername();" prevodi u "private string user=this.neke.getusername();", a this nije dopušteno koristiti u field initicijalizatoru prema C# spacifikaciji (ovo gdje ga ti pokušavaš inicijalizirati varijablu "user").

Detaljnije; to nije dopušteno jer kompajler ima slobodu presložiti redoslijed deklariranja varijabli klase pa bi se moglo dogoditi da se linija u kojoj želiš inicijalizirati "user" pokuša odraditi prije nego što je deklarirana varijabla "neke",a to je big nono...

 

Najbolje odradi inicijalizaciju usera u konstruktoru:

 

class mysql
{

    postavke neke = new postavke();
    private string user;

    public mysql()
    {
        user = neke.getusername();
    }

    public void funkcija()
    {
        tu sad koristi usera
    }

}

 

 

Donji slučaj ti radi jer se tamo odrađuje linija po linija kako su pisane i onda tu nema zabune.

15 godina
neaktivan
offline
C# - Problemi i rješenja

Hvala na brzom i stručnom odgovoru

 
1 0 hvala 0
15 godina
offline
C# - Problemi i rješenja

zašto ovo ne radi javlja grešku na drugoj foreach petlji kod in 

Stack myStk = new Stack();
myStk.Push("a");
myStk.Push("ab");
myStk.Push(2);
myStk.Push("sa");
myStk.Push(5);
foreach (object obj in myStk)
{
   Console.WriteLine(obj);
}

foreach (object obj in myStk)
{
  if(obj is string)
  {
   myStk.Pop();
  }
}
Console.WriteLine();
foreach (object obj in myStk)
{
   Console.WriteLine(obj);
}

Moj PC  
0 0 hvala 0
9 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Foreach petlja se ne smije koristiti za dodavanje ili micanje objekata iz kolekcije, nego samo za čitanje. Ako bi u foreach petlji bilo dozvoljeno brisanje, onda bi se vrlo lako pokušao dohvatiti element na lokaciji koja je izvan granica te kolekcije. (Npr. Ako si u startu imao 5 elemenata u kolekciji i kreneš s foreach te u njoj obrišeš 2 elementa, ta kolekcija sada ima samo 3 elementa, a foreach i dalje ide do elementa 5 koji više ne postoji i dobiješ ili ArrayOutOfBounds Exception ili kako se već zove ili NullReference Exception...). Zato je to zabranjeno prema c# specifikaciji.

Ako baš želiš prolaziti po kolekciji i u petlji brisati elemente možeš koristit for ili while petlju, ali budi jako oprezan da ti se ne dogodi ovo gore opisano.
 
0 0 hvala 1
15 godina
neaktivan
offline
C# - Problemi i rješenja

Eto opet mene sa pitanjcem.... Nije baš usko vezano za programiranje ali vjerujem da ekipa ovdje to zna.

Znači, pokušavam se spojiti na udaljenu mysql bazu. Ta baza se nalazi na hostingu koji se koristi za smještaj jedne web stranice ( joomla ) Ja sam kroz cpanel napravio bazu, korisnika pod opcijom "remote mysql" stavio svoj IP da može pristupiti toj bazi ali mi i dalje exception message u mojem programu baca "unable to connect to any of the specified mysql hosts".  Kada unesem neke bzvz postavke tu grešku mi odmah izbaci, a kada unesem prave traje jedno 2-3 sekunde pa ju izbaci, tako da pretpostavljam da je problem od strane servera? Da li je moguće da on i dalje odbija moju vezu iako sam svoj IP stavio na listu odobrenih? Da li postoji koji način da provjerim što se tu događa i zašto se ne mogu spojiti?

 

 

EDIT: Probao sam sa WAMP serverom lokalno i konekcija prolazi normalno

Poruka je uređivana zadnji put sub 19.12.2015 10:30 (Zoko).
 
0 0 hvala 0
11 godina
neaktivan
offline
C# - Problemi i rješenja

Bok ljudi, evo me opet.

 

Zanima me kako mogu izbrisati dinamički dodane richTextBoxeve i labele. Ovo je kod kojim dinamički dodajem kontole na flowLayoutPanel:

 

for (int i = 0; i < number; i++)
{
    Label labelForEnumeration = new Label();
    labelForEnumeration.Tag = i + 1;
    labelForEnumeration.Text = (i + 1).ToString();
    labelForEnumeration.Text = labelForEnumeration.Text + ".";
    flowLayoutPanel1.Controls.Add(labelForEnumeration);

 

    RichTextBox tempBox = new RichTextBox();
    tempBox.Tag = i + 1;
    tempBox.Size = new Size(650,60);
    flowLayoutPanel1.Controls.Add(tempBox);

}

foreach (Control control in flowLayoutPanel1.Controls)
{
    listOfControls.Add(control);

}

 

 

Mislio sam to izvesti tako da svakoj labeli i RTBoxu pridružim tag pa da kasnije,kada korisnik unese broj kontrole koju želi izbrisati, provjeravam koji tag odgovara tom broju. Ne znam može li se to i kako to realizirati? Imate li vi bolju ideju?

PeMaCN
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
C# - Problemi i rješenja

Izradio sam igricu križič kružič u c# 1vs1 radi dobro, kak sad izraditi 1vs komp?

Pokušal sam s random odabira pozicije al nije baš najbolje.

Neka ideja kako to najbolje i najjednostavnije riješiti? Na koju foru rade takve slične igre (npr. četri u nizu)

Pocetna Pocetna
Igranje... Igranje...
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Filip77 kaže...

Izradio sam igricu križič kružič u c# 1vs1 radi dobro, kak sad izraditi 1vs komp?

Pokušal sam s random odabira pozicije al nije baš najbolje.

Neka ideja kako to najbolje i najjednostavnije riješiti? Na koju foru rade takve slične igre (npr. četri u nizu)

Većina logičkih igara u kojima se traže pobjedničke kombinacije koristi MiniMax algoritam koji rekurzivno traži granu s najboljim ishodom za igrača. Primjerice za C(++) evo jednog malog programčića za križić-kružić 3x3:

 

#include <stdio.h>

char gridChar(int i) {
   switch (i) {
   case -1:
      return 'X';
   case 0:
      return ' ';
   case 1:
      return 'O';
   }
}
void draw(int b[9]) {
   printf(" %c | %c | %c\n", gridChar(b[0]), gridChar(b[1]), gridChar(b[2]));
   printf("---+---+---\n");
   printf(" %c | %c | %c\n", gridChar(b[3]), gridChar(b[4]), gridChar(b[5]));
   printf("---+---+---\n");
   printf(" %c | %c | %c\n", gridChar(b[6]), gridChar(b[7]), gridChar(b[8]));
}
int win(const int board[9]) {
   // ako je igrač treba pobijediti vraća se 0, a pobjedičke kombinacije su:
   unsigned wins[8][3] = { { 0, 1, 2 },{ 3, 4, 5 },{ 6, 7, 8 },{ 0, 3, 6 },{ 1, 4, 7 },{ 2, 5, 8 },{ 0, 4, 8 },{ 2, 4, 6 } };
   int i;
   for (i = 0; i < 8; ++i) {
      if (board[wins[i][0]] != 0 &&
         board[wins[i][0]] == board[wins[i][1]] &&
         board[wins[i][0]] == board[wins[i][2]])
         return board[wins[i][2]];
   }
   return 0;
}
int minimax(int board[9], int player) {
   int winner = win(board);
   if (winner != 0) return winner*player;

   int move = -1;
   int score = -2;
   int i;
   for (i = 0; i < 9; ++i) {// za sva polja,
      if (board[i] == 0) {// ako je polje slobodno,
         board[i] = player;// izračunaj kandidat potez
         int thisScore = -minimax(board, player*-1);
         if (thisScore > score) {
            score = thisScore;
            move = i;
         }// odaberi onaj potez koji je najgori za protivnika
         board[i] = 0;// resetiraj proču nakon računanja kandidat pozeta
      }
   }
   if (move == -1) return 0;
   return score;
}
void computerMove(int board[9]) {
   int move = -1;
   int score = -2;
   int i;
   for (i = 0; i < 9; ++i) {
      if (board[i] == 0) {
         board[i] = 1;
         int tempScore = -minimax(board, -1);
         board[i] = 0;
         if (tempScore > score) {
            score = tempScore;
            move = i;
         }
      }
   }   
   board[move] = 1;
}
void playerMove(int board[9]) {
   int move = 0;
   do {
      printf("\nOdaberi polje ([1..9]): ");
      scanf_s("%d", &move);
      printf("\n");
   } while (move >= 10 || move < 1 && board[move-1] == 0);
   board[move-1] = -1;
}
int main() {
   int board[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
   int player = 1;
   unsigned turn;

   for (turn = 0; turn < 9 && win(board) == 0; ++turn) {
      if ((turn + player) % 2 == 0)
         computerMove(board);
      else {
         draw(board);
         playerMove(board);
      }
   }
   switch (win(board)) {
   case 0:
      printf("Nerjeseno!\n");
      break;
   case 1:
      draw(board);
      printf("Izgubio si.\n");
      break;
   case -1:
      printf("Pobjedio si !?\n");
      break;
   }
}

 

Za svaki tvoj potez MiniMax algoritmom će se izračunati sve moguće kombinacije preko funkcije minimax te vidjeti koji od poteza kandidata dobiva ili gubi.

 

Ovo sve super radi dok je riječ o križić-kružić igri sa 3x3 polja jer najveći broj kombinacija je 9! tj. 362.880 poteza. No ako se ova igra proširi na 4x4 tada MiniMax nije dovoljan jer je riječ 16! mogućih kombinacija (20.922.789.888.000). Tada ovo toliko dugo traje da se i na najbržem računalu izvršava satima, te se tada u kombinaciji s MiniMax algoritmom koristi Alfa-Beta skraćivanje. Njime se ne prolaze one grane za koje se unaprijed zna da donose nepovoljan ishod pa se tako skraćuje i vrijeme pretraživanja najboljeg poteza. Tako primjerice bez alfa-beta skraćivanja bi bilo nezamislivo optimizirati MinMax algoritam za npr. neki šahovski game engine i sl.

Poruka je uređivana zadnji put ned 20.12.2015 20:11 (TracerCPP).
15 godina
neaktivan
offline
C# - Problemi i rješenja

Help help help! 

 

Pokušavam pročitati iz mysql baze profil korisnika ali dobivam "Could not find specified column in results: prezime"

Nije mi jasno pošto ime normalno čita (kada gledam kroz debbuger)

 

Dio koda:

 

konekcija.Open();


osoba osoba_prikaz = new osoba();

 

//1. Čitanje imena
string sql = "select ime from profili where ime=@ime and prezime=@prezime";
naredba = new MySqlCommand(sql, konekcija);
naredba.Parameters.Add("@ime", ime);
naredba.Parameters.Add("@prezime", prezime);

 

MySqlDataReader citac = naredba.ExecuteReader();


while (citac.Read()) {

 

osoba_prikaz.ime = citac["ime"].ToString();

 

//2. Čitanje prezimena
sql = "select prezime from profili where ime=@ime and prezime=@prezime";
naredba = new MySqlCommand(sql, konekcija);
naredba.Parameters.Add("@ime",ime);
naredba.Parameters.Add("@prezime",prezime);
osoba_prikaz.prezime = citac["prezime"].ToString();

 

 

Sve mi je radilo dok sam koristio sqlite bazu.... Što krivo radim?

 

 

Znači u bazi imam profile korisnika ( 9-10 stavki, ime, prezime, adresa,tel i sl. )

Sad to želim u pročitati iz baze i napraviti objekt "osoba" sa tim vrijednostima iz baze......

Poruka je uređivana zadnji put pon 28.12.2015 16:43 (Zoko).
 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice