DJ-Stigma Skrevet 20. oktober 2012 Del Skrevet 20. oktober 2012 Hei! Jeg prøver å få til et program som skriver ut 15 stjerner som skal være en pyramide. Slik som dette: + ++ +++ ++++ +++++ Har egentlig fått til dette, men får altfor mange tegn i pyramiden.. Kan legge ut koden hvis ønskelig. Lenke til kommentar
Piwoot Skrevet 20. oktober 2012 Del Skrevet 20. oktober 2012 Sikkert bedre måter å gjøre det på, men det fungerer. public class Test { public static void main(String[] args){ String space = " "; String plusstegn = "+"; for (int x = 1; x <=15; x++) { for(int y = 15; y > x; y--) { System.out.print(space); } for(int z = 0; z < x; z++) { System.out.print(plusstegn); System.out.print(space); } System.out.print("\n"); } } } 1 Lenke til kommentar
Persn Skrevet 20. oktober 2012 Del Skrevet 20. oktober 2012 (endret) Jeg var så godt i gang med å skrive ett forslag før jeg så Piwoot sitt så slenger like godt opp min egen også, fordi jeg kan Kode: public class Pyramide { public String skrivRettvinkletTrekant(int antStjernerTot) { String trekant = ""; for (int i = 0; i < antStjernerTot; i++) { trekant += skrivStjerne(i + 1) + "\n"; antStjernerTot -= (i + 1); } return trekant; } private String skrivStjerne(int antStjerner) { String stjerner = ""; for (int i = 0; i < antStjerner; i++) { stjerner += "*"; } return stjerner; } public static void main(String[] args) { Pyramide pyr = new Pyramide(); System.out.println(pyr.skrivRettvinkletTrekant(15)); } } Utskrift: * ** *** **** ***** Fordelen her er at det er litt fleksiblet, du er ikke begrenset til å kun skrive ut 15 stjerner, dog er det ikke implementert noen sjekk for at det skal bli symmetrisk, men jeg tviler på at det er så vanskelig å få til. EDIT: Jeg har dog tatt utgangspunkt i en rettvinklet trekant siden jeg ble usikker på hva trådstarter egentlig spurte etter, sier pyramide, men tegner en rettvinklet trekant Endret 20. oktober 2012 av Persn 1 Lenke til kommentar
Martin HaTh Skrevet 20. oktober 2012 Del Skrevet 20. oktober 2012 Tok Piwoot sin kode, og endret litt på den, på måten jeg først tenkte var greiest. Det viste seg at det var litt vanskeligere enn forventet i Java, da det ikke er støtte for å multiplisere strings ('a'*3 blir 'aaa'). static void printTrekant(){ String space = " "; String pluss = "+ "; int max = 5; for (int x = 1; x <= max; x++) { System.out.println(multiplyString(space,(max-x))+multiplyString(pluss,x)); } } static String multiplyString(String s, int n) { StringBuilder sb = new StringBuilder(); int i = 0; while(i++<n){ sb.append(s); } return sb.toString(); } 1 Lenke til kommentar
DJ-Stigma Skrevet 21. oktober 2012 Forfatter Del Skrevet 21. oktober 2012 Tusen takk til alle som tok seg tid til å svare! Men jeg fikk det til før jeg lagde denne tråden... Lenke til kommentar
Piwoot Skrevet 21. oktober 2012 Del Skrevet 21. oktober 2012 Tusen takk til alle som tok seg tid til å svare! Men jeg fikk det til før jeg lagde denne tråden... Var klar over det, men jeg(vi) kjeda meg(oss). Lenke til kommentar
DJ-Stigma Skrevet 21. oktober 2012 Forfatter Del Skrevet 21. oktober 2012 Tusen takk til alle som tok seg tid til å svare! Men jeg fikk det til før jeg lagde denne tråden... Var klar over det, men jeg(vi) kjeda meg(oss). Det var egentlig du som hadde veldig enkelt grei kode som jeg så etter før jeg fikk det til! Persn: Hvorfor har du public static void main(String[] args) { nederst i koden din? Prøvde å lime inn koden din, men det kom bare feilmeldinger.. Ser også at du har while og return i koden din noe jeg ikke har kommet så langt med ennå.. Har kun brukt for(int) etc som variabel. Martin HaTh: Koden din ble litt for komplisert for meg.. Litt av det samme som Persn sitt kode. Men ellers takk for hjelpen igjen! Er student for tiden Kommer tilbake hvis det er mer jeg lurer på! Lenke til kommentar
DJ-Stigma Skrevet 21. oktober 2012 Forfatter Del Skrevet 21. oktober 2012 Istedet for å lage en tråd, skriver jeg det her. Jeg er nå i gang med å skrive et program som skal skrive en diamant som utskrift: * ** *** **** ****** ****** **** *** ** * Jeg har løsningen, men jeg lurer bare på hvordan jeg får antall stjerner som vist ovenfor. Jeg får alt for mange stjerner som utskrift etter å kjørt programmet. Koden er: for (int i = 1; i <= 10; i += 2) { for (int j = 0; j < 10 - i / 2; j++) System.out.print(" "); for (int j = 0; j < i; j++) System.out.print("*"); System.out.print("\n"); } for (int i = 5; i > 0; i -= 2) { for (int j = 0; j < 10 - i / 2; j++) System.out.print(" "); for (int j = 0; j < i; j++) System.out.print("*"); System.out.print("\n"); } } } Lenke til kommentar
Persn Skrevet 21. oktober 2012 Del Skrevet 21. oktober 2012 Persn: Hvorfor har du public static void main(String[] args) { nederst i koden din? I dette tilfellet så er main-metoden kun eksisterende for testing mens alt det andre er selve logikken. Hvis du vil lese av logikken i en klasse er det greit at det er det første du ser når du åpner fila ikke sant? Jeg mener også og huske at ved konvensjon i java så skal main-metoden stå nederst, kan hende jeg husker feil, jeg liker bare å ha den der ivertfall. Prøvde å lime inn koden din, men det kom bare feilmeldinger.. Det er ingen logisk grunn til at det skal skje, jeg bruker ingen spesifikke avanserte ting som krever import-setninger og sånt. Hvis du copy-paster hele skiten må du huske å legge det i en tom java-fil og navngi den "Pyramide" Ser også at du har while og return i koden din noe jeg ikke har kommet så langt med ennå.. Har kun brukt for(int) etc som variabel. Det er lov det Jeg er ganske sikker på at hvis du lærer deg hva alt er for noe kommer du til å synes det er VELDIG oversiktlig, ikke nødvendigvis måten jeg har gjort det på, men selve konseptet bak oppbygginga, men jeg har ikke en eneste while-løkke i koden så den må du nesten forklare??? Hvis ønskelig kan jeg prøve å forklare hva som skjer i koden, men jeg er ikke noen mester i pedagogikk så kan hende jeg forklarer meg fullstendig vekk. Lenke til kommentar
DJ-Stigma Skrevet 21. oktober 2012 Forfatter Del Skrevet 21. oktober 2012 Er ny innen Java, og har bare lært at main-metoden skulle stå øverst i koden, men nå har jeg lært meg noe nytt at man kan plassere main-metoden hvor som helst i koden for at koden skal kjøre! Takker for det! Grunnen til at jeg fikk feil melding var det at jeg hadde 2 main metoder, merket ikke main metoden din som var nederst i koden din. Bruker Eclipse. Sorry, sammenlignet koden til Martin HaTh der han brukt while løkker. Gjerne om du har tid Lenke til kommentar
H5N1 Skrevet 21. oktober 2012 Del Skrevet 21. oktober 2012 (endret) public static void main(String[] args) { pyramide(10, true); pyramide(10, false); } public static void pyramide(int size, boolean normal){ String space = " "; String star = "* "; if(normal){ for(int i = 0; i < size; i++){ for(int x = 0; x < size-i; x++){ System.out.print(space); } for (int j = 0; j <= i; j++) { System.out.print(star); } System.out.println(); } }else{ for(int i = size; i > 0; i--){ for(int x = 0; x <= size-i; x++){ System.out.print(space); } for (int j = 0; j < i; j++) { System.out.print(star); } System.out.println(); } } } Endret 21. oktober 2012 av H5N1 1 Lenke til kommentar
Persn Skrevet 21. oktober 2012 Del Skrevet 21. oktober 2012 (endret) Er ny innen Java, og har bare lært at main-metoden skulle stå øverst i koden, men nå har jeg lært meg noe nytt at man kan plassere main-metoden hvor som helst i koden for at koden skal kjøre! Takker for det! Ikke 100% riktig, du kan ikke opprette metoder inni andre metoder f.eks. Men here goes, jeg lager en ny java-klasse som dummer det ned til grunnprinnsippene sånn at jeg er sikker på at jeg får forklart the basics. Full kode: public class Forklaring { public String eksempel(){ return "Hallois"; } public static void main(String[] args){ Forklaring forklaring = new Forklaring(); String eks = forklaring.eksempel(); System.out.println(eks); } } public String eksempel(): public String eksempel(){ return "Hallois"; } Her har jeg lagd en String-metode, det er en metode på samme måte som main, men når jeg skriver String istedet for void så betyr det rett og slett at jeg MÅ returnere en String i slutten av metoden. Det bør gi deg en grei indikasjon på hvordan return-setningen funker Hver gang du kaller på den metoden kommer du til å få tilbake "Hallois". Hva som skjer i main: public static void main(String[] args){ Forklaring forklaring = new Forklaring(); String eks = forklaring.eksempel(); System.out.println(eks); } I første linja lager jeg ett objekt ut av klassen Forklaring, jeg må dette siden main-metoden er static, ikke spør hvorfor, det er ett kapittel for seg selv, få litt bedre grep på java og skrivemåten før du henger deg opp i det. Forklaring referer til klassen, forklaring er navnet jeg har gitt objektet, og new Forklaring() betyr rett og slett at jeg vil lage ett helt nytt objekt ut av den klassen. I andre linja lager jeg en String som du kan fra før, men etter = så skriver jeg forklaring.eksempel(), hvor forklaring indikerer hvilket objekt jeg skal operere på, punktum indikerer at jeg skal kalle på noe inni objektet, og eksempel() forteller hvilken metode jeg vil kalle. Det som står der er basicly det samme som String eks = "Hallois"; Den tredje linja trenger ikke å forklares regner jeg med. Jeg skriver ut stringen jeg nettopp har laga, enkelt og greit. Jeg la ved hele koden øverst sånn at du kan eksprimentere på egen hånd og se hva som skjer hvis du skriver om koden. Du kan godt spørre hvis noe ble uklart, og dette forklarer ikke alt fra den første koden min, men det kan du henge deg opp i etter du har forstått denne biten. EDIT: Koden hadde en feil sånn at den skrev ut variabelnavnet istedet for innholdet i variablen Fixed ivertfall Endret 22. oktober 2012 av Persn 1 Lenke til kommentar
Persn Skrevet 22. oktober 2012 Del Skrevet 22. oktober 2012 Siden jeg ikke får sove skreiv jeg om programmet mitt til å skrive ut diamanter også. public class Pyramide { public String skrivDiamant(int antStjernerTot) { String diamant = ""; diamant += skrivRettvinkletTrekantNed(antStjernerTot); diamant += skrivRettvinkletTrekantOpp(antStjernerTot); return diamant; } public String skrivRettvinkletTrekantNed(int antStjernerTot) { String trekant = ""; String[] stjerneTab = stjerneTabell(antStjernerTot); for (int i = 0; i < stjerneTab.length; i++) { trekant += stjerneTab[i] + "\n"; } return trekant; } public String skrivRettvinkletTrekantOpp(int antStjernerTot) { String trekant = ""; String[] stjerneTab = stjerneTabell(antStjernerTot); for (int i = stjerneTab.length - 1; i >= 0; i--) { trekant += stjerneTab[i] + "\n"; } return trekant; } private int beregnAntLinjer(int antStjerner) { int antLinjer = 0; for (int i = 0; i < antStjerner; i++) { antLinjer++; antStjerner -= (i + 1); } return antLinjer; } private String[] stjerneTabell(int antStjernerTot) { String[] stjerner = new String[beregnAntLinjer(antStjernerTot)]; for (int i = 0; i < antStjernerTot; i++) { stjerner[i] = skrivStjerne(i + 1); antStjernerTot -= (i + 1); } return stjerner; } private String skrivStjerne(int antStjerner) { String stjerner = ""; for (int i = 0; i < antStjerner; i++) { stjerner += "*"; } return stjerner; } public static void main(String[] args) { Pyramide pyr = new Pyramide(); System.out.println(pyr.skrivDiamant(15)); } } 1 Lenke til kommentar
DJ-Stigma Skrevet 22. oktober 2012 Forfatter Del Skrevet 22. oktober 2012 Tusen takk for flott tips og god forklaring og programmet du har laget Persn! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå