Ohjelmoinnin ongelmanurkkaus

Toi sun tapaus eroaa tosta esimerkistä siten, että esimerkissä luodaan uusi xmlfilu ja näin ollen tuossa esimerkissä tuo XML-luokka tekee sen string replacen samalla kun se tekee tuosta "stringistä" xml-domin ja siinä vaiheessa tekee replacen noille {variableille}.

Eli kyllä sun tarttee manuaalisesti noi {placeholderit} korvata, viimeistään siinä vaiheessa kun ne printtaa näkyviin.
 
10% ALENNUS KOODILLA PAKKOTOISTO
Toi sun tapaus eroaa tosta esimerkistä siten, että esimerkissä luodaan uusi xmlfilu ja näin ollen tuossa esimerkissä tuo XML-luokka tekee sen string replacen samalla kun se tekee tuosta "stringistä" xml-domin ja siinä vaiheessa tekee replacen noille {variableille}.

Eli kyllä sun tarttee manuaalisesti noi {placeholderit} korvata, viimeistään siinä vaiheessa kun ne printtaa näkyviin.

Joo, noinhan se pitää. Tosin nyt on ongelmia sen kanssa. :D Tää nyt on varmaan alkujaankin ihan tyhmä metodi, mutta en parempaakaan tähän hätään keksinyt.

Koodi:
var charNames:Array = new Array(
		
"#charName001", "Matti",
"#charName002", "Teppo",
"#charName003", "Paula",
"#charName004", "Mira"
		
);

function replaceNames() {
		
var originalString:String = "#charName001, #charName002, #charName003 ja #charName004";
			
var replacedString = originalString 
			
.replace(charNames[0],charNames[0+1])
.replace(charNames[2],charNames[2+1])
.replace(charNames[4],charNames[4+1])
.replace(charNames[6],charNames[6+1]);
			
trace (replacedString);
			
}

Tämä toimii ok, ja tulostaa "Matti, Teppo, Paula ja Mira" kuten kuuluukin. Mutta siltä varalta että tuo array paisuu kuin pullataikina, miten saisin noi replacet loopattua? Tyyliin:

Koodi:
replacedString = originalString

for (var i = 0; i < charName.length; i+=2) {

.replace(charNames[i],charNames[i+1])

}

;

Toihan ei luonnollisestikaan toimi, mutta ymmärtänee mitä tarkoitan. Sekään kun ei toimi että sisällyttää tuon koko rivin looppiin, muuten se määrittäisi muuttujan vain uudelleen ja uudelleen kun pitäisi saada vain nuo replacet loopattua.
 
En jaksanut säätää tuon kanssa sen enempää, niin päädyin tekemään vaan funktion joka generoi tarvittaessa tuon replace-rimpsun, ja jonka voin sitten copypasteta itse koodiin. :D

Koodi:
function GenerateReplaces() {	
   for (var i = 0; i < charNames.length; i+=2) {
			
      trace(".replace(charNames[" + i + "], charNames[" + i + "+1])");
				
   }
}

Nyt saa jäädä tuon projektin osalta koodaus vähäksi aikaa, ryntäsin nimittäin tekemään innoissani koodia ennenkuin kokonaisuus oli suunniteltu joten takaisin UML-kaavioiden ääreen. :hyper:
 
Mihin tuota C#:n TransactionScopea oikein tarvitaan/käytetään. Tekeillä oleva ohjelma toimii oikein hyvin, mutta sanottiin että tuota pitäisi käyttää. Oma koodi on try-catch-finally- lohkossa kuten kaikissa netin esimerkeissäkin, ja tuon TranactionScopen lisäys/käyttö ei tunnu vaikuttavan yhtään mihinkään yhtään mitenkään.

Googleteltu on, mutta ei vaan tunnu aukeavan...
 
Mihin tuota C#:n TransactionScopea oikein tarvitaan/käytetään. Tekeillä oleva ohjelma toimii oikein hyvin, mutta sanottiin että tuota pitäisi käyttää. Oma koodi on try-catch-finally- lohkossa kuten kaikissa netin esimerkeissäkin, ja tuon TranactionScopen lisäys/käyttö ei tunnu vaikuttavan yhtään mihinkään yhtään mitenkään.

Googleteltu on, mutta ei vaan tunnu aukeavan...

En kauheasti C#:n kanssa ole ollut nyt tekemisissä, mutta näköjään tuolla TransactionScopella voit hallita ja kapseloida transaktiokäsittelyn. Sanooko transaktio yhtään mitään?
 
En kauheasti C#:n kanssa ole ollut nyt tekemisissä, mutta näköjään tuolla TransactionScopella voit hallita ja kapseloida transaktiokäsittelyn. Sanooko transaktio yhtään mitään?

"Transaktio on joukko tapahtumia, jotka suoritetaan peräkkäin, aivan kuin kyseessä olisi vain yksi ainoa tapahtuma. Jos jokin tapahtuma epäonnistuu, silloin koko transaktio perutaan. "

Eli ohjelmasta lähtee n kpl palvelukutsuja palvelimelle (peräkkäin, ja uusi kutsu voi riippua edellisen tuloksesta). Joku voi kaatua => tehdään rollback jolloin muutokset perutaan.

Mutta kun tuossa TransactionScopessa ei ole varsinaista rollback-kutsua, niin tehdäänkö se automaagisesti siinä vaiheessa jos/kun tapahtuu virhe?
 
Rolling back a transaction

"If you want to rollback a transaction, you should not call the Complete method within the transaction scope. For example, you can throw an exception within the scope. The transaction in which it participates in will be rolled back."

http://msdn.microsoft.com/en-us/library/ms172152.aspx

Eli silloin kun (Transaction)skoupista heitetään joku poikkeus, tehdään aina rollback. Oletettavasti rollbackin luulisi silti pystyvän tekemään myös manuaalisesti. Commitoitavassa transaktiossa pitää manuaalisesti tehdä aina commit tai rollback. Transaktionkäsittely ja lukitukset on sellainen asia, johon kannattaa yrittää perehtyä, mikäli vain se on mahdollista.
 
Koodi:
replacedString = originalString

for (var i = 0; i < charName.length; i+=2) {

.replace(charNames[i],charNames[i+1])

}

;

Toihan ei luonnollisestikaan toimi, mutta ymmärtänee mitä tarkoitan. Sekään kun ei toimi että sisällyttää tuon koko rivin looppiin, muuten se määrittäisi muuttujan vain uudelleen ja uudelleen kun pitäisi saada vain nuo replacet loopattua.

Aika outoa syntaksia. Kohtuu kokeneena AS3 koodaajanakin menin sekasin :D
Tähän tyyliin saat toimimaan for loopissa.

Koodi:
var replacedString:String = originalString;
for(var i:int=0;i<charNames.length;i+=2){
	replacedString = replacedString.replace(charNames[i], charNames[i+1]);
}
Voit laittaa trace(replacedString) for loopin vikalle riville niin selkenee varmaan vielä paremmin.

Arraysta voi tehdä myös relatiivisen jolloin se on selkeämpi kuin tommonen 1,2,1,2 tyylinen seka-array.
Koodi:
var arr:Array=[]; //sama kuin new Array()
arr["#charName1"] = "Matti";

trace(arr["#charName1"]);

RPG:n tekeminen täytyy kyllä kaikkien kokea kerran :rock:
 
Haluan vieraskirjan tekstin suoraan toiselle sivulle. Millä html koodilla tuo irtoaisi. Eli esim vieraskirja.php-tiedoston
sisältö näkymään contact.php sivulle suoraan. Onnaako?
 
Haluan vieraskirjan tekstin suoraan toiselle sivulle. Millä html koodilla tuo irtoaisi. Eli esim vieraskirja.php-tiedoston
sisältö näkymään contact.php sivulle suoraan. Onnaako?

Meikä on niin kettu et just ku kirjotan kysymyksen, niin keksin vastauksen...

Koodi:
<?php
	if(!isset($_GET["sivu"])) { $sivu = "main"; }
	else { $sivu = $_GET["sivu"]; }
	if(!file_exists($sivu . ".php")) { $sivu = "error"; }
	include($sivu . ".php");
?>
 
Haluan vieraskirjan tekstin suoraan toiselle sivulle. Millä html koodilla tuo irtoaisi. Eli esim vieraskirja.php-tiedoston
sisältö näkymään contact.php sivulle suoraan. Onnaako?
En nyt ihan varma mitä haet, mutta...

Yksinkertaisesti, mitä itse käytän esim. navigoinnin tuomiseen joka sivulle:
Koodi:
<?php include("vieraskirja.php"); ?>
Tietenkin tuolloin ei sais olla vieraskirja.php:ssa olla <html> <body> <head> osioita, eli vain sisältöä koska toi repii koko tiedoston sisällön sinne mihin tuon pätkän lykkäät.
 
Jep tänks, oli vielä simppelimpi kuin tuo minkä aluksi törkkäsin! PHP jutut jäänyt niin vähille, etten noita hiffaa lainkaan.
Sama itsellä, jos jotain dynaamista lähden rakentaa niin yksinkertaisesti pistän Joomlan pyörimään alle.

Ymmärrän täysin tosin sen että paras tapa on tehdä alusta itse, ylivoimaisesti. Joomla on raskas jos tarvii esiin vain pelkän front-end artikkelilisäyksen jne, mutta kun ei vielä osaa niin sillä mennään. :)
 
Ois java ohjelmointiin liittyvä kysymys. En tiedä oikein miten tämän selittäisin, mutta koitetaan.

Jos mulla olisi esimerkiksi main luokka, jolla olisi aliluokka
päivät ja pääluokassa olisi luotu taulukko päivistä. Nyt
jos tuolla aliluokalla päivät olisi vielä aliluokka tapahtumat
ja päivät luokassa olisi luotu taulukko tapahtumista.

Eli miten nyt pystyn hakemaan main luokasta nuo päivien tapahtumat?
Jos koitan vaikka tyyliin:

main luokassa

for (int i = 0, i < päivienMäärä, i++) {
päivät.getTapahtuma();
}

päivät luokassa

public void getTapahtuma() {
for (int i = 0, i < tapahtumienMäärä, i++) {
System.out.print(tapahtuma);
}

Niin tuo ei anna mitään virheilmoitusta, mutta ei kyllä tulostakkaan
mitään. Olisko jollakin jotain neuvoa tähän, jos nyt kukaan
edes tajusi, mitä haen takaa :).
 
^ Laitatko koodin pätkät, niin olisi helpompi ymmärtää mitä haet takaa.
 
Toi oli siis vaan esimerkki, tarkennettuna yritän vääntää ohjelmaa, joka seuraisi ajoneuvojen kuluja. Eli pääluokassa on taulukko autot ja autoluokassa on taulukko tapahtumat.
Nyt jos yritän tulostaa noita tapahtumia niin tulee vaan tyhjää. Pistän nyt vaikka osan koodia jos selkeyttäisi.

Autoluokassa:

tapahtumat[] tapahtuma = new tapahtumat[100];
int tapahtumienMäärä = 0;

public void getTapahtuma(){
for (int i = 0; i < tapahtumienMäärä; i++){
System.out.print(tapahtuma);
}
}

Pääluokassa:

auto[] autot = new auto[1000];
int autojenMäärä = 0;

ja tällä yritän tulostaa tapahtumia, mutta tulee vaan tyhjää.

switch(toiminto) {
case 1:
for (int i = 0; i < autojenMäärä; i++){
autot.getTapahtuma();
 
En tiedä kirjoititko tuon koodin väärin, mutta kummankaan for-silmukan ehto ei koskaan toteudu (eli tapahtumien määrä == 0 ja autojen määrä on == 0). Jos haluat tulostaa tuon taulukon sisällön, niin viittaa taulukon kokoon esim. näin: tapahtuma.length() tai autot.length(). Tai int tapahtumienMäärä = tapahtuma.length(); Todellisuudessa et tiedä kuitenkaan monta "oikeaa" tapahtumaa taulukossa on, koska sen kooksi on luotu 100 alkiota. Tuossa ei ollut koodia siitä, miten sijoitat taulukkoon ne tapahtumat, mutta ilmeisesti sulla on sille oma setTapahtuma-metodi.

Jos käytät Eclipseä, voit kirjoittaa taulukon luomisen jälkeen vain for ja painaa ctrl + space ja koodiassistentti ehdottaa haluatko loopata taulukon muuttajaa apuna käyttäen ja Eclipse generoi koodin valmiiksi.

Lisäksi jos et ole ylikirjoittanut tapahtumat-luokassa toString-metodia, ei tuo system-out tulosta kuin tapahtumat-luokan hashkoodin.

Eli esim. näin:

@override
public String toString() {
return this.jokuLuokkamuuttuja;
}


Javassa sitten luokat nimet aloitetaan isolla kirjaimella. Ne esim. erottaa näin helpommin muuttujista.
 
Olen tässä yrittänyt tehdä flashilla eräänlaista arvailu peliä, jossa yhden tason ideana on arpoa muutama erilainen kuva ja käyttäjän on klikattava stagella näkyvää sitä vastaavaa sanaa.
Sana tulee olemaan button symboli. Jos sana vastaa esitettyä kuvaa saa käyttäjä pisteen, muussa tapauksessa tulee miinus piste.

Kysymys kuuluu että miten saan arvottua nuo kuvat niin, ettei samaa kuvaa näytetä kahteen kertaan?
Ja toinen kysymys miten olisi helpointa tarkistaa onko käyttäjän vastaus oikein, ts. miten nuo kuvat kannattaisi nimetä, että vastauksen tarkistaminen kävisi vaivattomimmin (ja pitääkö käyttää esim. for - looppia?)
Ja viimeisenä kysymyksenä, miten saan sen ensimmäisen kuvan arvottua siihen stagelle, ilman että käyttäjä tekee mitään, eli kun edellinen taso on suoritettu niin seuraavan tason avautuessa siihen pitäisi hetken kuluttua ilmestyä se ensimmäinen kuva. Siitä edespäin sitten kuvia arvotaan sitä mukaa kun käyttäjä klikkailee niitä sanoja.

Toivottavasti joku tajusi mitä hain takaa tällä ontuvalla viestillä :)
 
Kiitos Inska, sainkin tuon jo toimimaan. Olin tosiaan unohtanut kirjoittaa tuonne tapahtumat-luokkaan toString metodin, joka osaltaan vaikutti.
Paljon on vielä opeteltavaa, mutta virheiden kautta opitaan. Kyllä välillä hermoja koitetaan, kun koodissa on joku pikku virhe ja saa etsiä tunteja
sitä.
 

Latest posts

Suositut

Back
Ylös Bottom