[muffin] Skrevet 25. februar 2003 Del Skrevet 25. februar 2003 Har et problem. Jeg skal få en tekststreng til å skrives ut som en trekant. Først et tegn, så to osv. bruker skal kunne angi bredde på trekanten, go problemet mitt er derfor: Hvordan skal jeg få programmet til å fortsette fra begynnelsen når bredden er større en lengden på tekststrengen ? Slik at hvis programmet får inn "jippi" og bredde 7, skal programmet skrive ut: j ip pij ippi jippi jippij ippijip her er koden min så langt: public class Trekant { public static void main(String[] args) { System.out.println("Dette er et program som ber deg skrive inn en tekst,nog deretter skriver ut teksten som en trekant."); System.out.println("Programmet vil spørre deg om størrelse og form på trekanten."); System.out.print("Gi teksten som skal skrives ut: "); String tekstInn = Terminal.lesString(); // System.out.print("Gi trekantens form(1=nordvest, 2=nordøst, 3=sørvest, 4=sørøst): "); // int form = Terminal.lesInt(); // while(form<1 || form>4) { // Sjekker om det er angitt gyldig form // System.out.print("Ugyldig form. Prøv på nytt: "); // form = Terminal.lesInt(); // } System.out.print("Gi størrelsen(det vil si antall linjer) på trekanten: "); int bredde = Terminal.lesInt(); while(bredde<1) { // Sjekker om det er gitt 0 eller negativ verdi til størrelse System.out.print("Du kan ikke ha negativ størrelse. Prøv på nytt: "); bredde = Terminal.lesInt(); } int i=0, j=0, økJ=0; while(økJ<=bredde) { System.out.println(i+" "+j+" "+økJ); System.out.print(tekstInn.substring(i, j)); i=j; økJ++; j+=økJ; if(j>tekstInn.length()) j=tekstInn.length(); if(i>=tekstInn.length()) i=0; } } } Lenke til kommentar
[muffin] Skrevet 25. februar 2003 Forfatter Del Skrevet 25. februar 2003 Ingen som kan java her ? :-? Lenke til kommentar
MikkelRev Skrevet 26. februar 2003 Del Skrevet 26. februar 2003 Jeg finner ikke Terminal i API'en min. Lenke til kommentar
[muffin] Skrevet 26. februar 2003 Forfatter Del Skrevet 26. februar 2003 oh, sorry. Terminal er en input klasse. Her : import java.io.*; /** * Denne klassen tilbyr metoder for innlesing av heltall, flyttall og * strenger fra terminalen. * * Pass på at du legger denne filen i samme katalog som programmene dine, * og kompilerer den før du kjører disse. * * @version 1.0 * @author Rolf W. Rasmussen * @author Khalid A. Mughal * @author Torill Hamre */ public final class Terminal { private Terminal() {}; private static BufferedReader leser = new BufferedReader( new InputStreamReader(System.in) ); /** * Leser en int verdi fra terminalen. */ public static int lesInt() { while (true) try { return Integer.parseInt( leser.readLine() ); } catch (IOException io) { reportError(); } catch (NumberFormatException nf) { reportError(); } } /** * Leser en double verdi fra terminalen. */ public static double lesDouble() { while (true) try { return Double.parseDouble( leser.readLine() ); } catch (IOException io) { reportError(); } catch (NumberFormatException nf) { reportError(); } } /** * Leser en linje fra terminalen og returnerer denne som et objekt * av typern String. */ public static String lesString() { while (true) try { return leser.readLine(); } catch (IOException io) { reportError(); } } /** * Skriver ut en streng eller strengrepresentasjonen av en annen verdi * til terminalen og går videre til neste linje. */ public static void promptln( Object str ) { System.out.println( str ); } /** * Skriver feilmelding og går videre til neste linje på terminalen * slik at brukeren kan taste inn verdi på nytt. */ private static void reportError() { System.out.println( "Feil i inndata. Prøv på nytt!" ); } } Lenke til kommentar
w3edr5t Skrevet 27. februar 2003 Del Skrevet 27. februar 2003 Her er en mulig løsning: Det finnes sikkert bedre/mer elegante måter å løse dette på , men det var dette jeg kom på i farta. public class Trekant { public static void main(String[] args) { System.out.println("Dette er et program som ber deg skrive inn en tekst,nog deretter skriver ut teksten som en trekant."); System.out.println("Programmet vil spørre deg om størrelse og form på trekanten."); System.out.print("Gi teksten som skal skrives ut: "); String tekstInn = Terminal.lesString(); System.out.print("Gi trekantens form(1=nordvest, 2=nordøst, 3=sørvest, 4=sørøst): "); int form = Terminal.lesInt(); while(form<1 || form>4) { // Sjekker om det er angitt gyldig form System.out.print("Ugyldig form. Prøv på nytt: "); form = Terminal.lesInt(); } System.out.print("Angi bredden på trekanten: "); int bredde = Terminal.lesInt(); while (bredde < 1) { // Sjekker om det er gitt 0 eller negativ verdi til størrelse System.out.print("Du kan ikke ha negativ størrelse. Prøv på nytt: "); bredde = Terminal.lesInt(); } //vet nå tekst og bredde //beregne antall teksttegn nødvendig for å lage trekanten. int antallTegn = 0; for(int i=1;i<bredde+1;i++) { antallTegn = antallTegn + i; } //bygger en Streng med nødvendig tekst: String tekst = ""; while(tekst.length()<antallTegn) { tekst = tekst + tekstInn; } tekst = tekst.substring(0, antallTegn); System.out.println("Trekanten kommer her:n"); int posisjon = 0; if(form==1 || form==2) { for(int j=1;j<bredde+1;j++) { if(form==1) { System.out.println(tekst.substring(posisjon, posisjon+j)); } else if(form==2) { System.out.println(lagWhiteSpace(bredde-j) + tekst.substring(posisjon, posisjon+j)); } posisjon = posisjon + j; } } if(form==3 || form==4) { for(int j=bredde;j>0;j--) { if(form==3) { System.out.println(tekst.substring(posisjon, posisjon+j)); } else if(form==4) { System.out.println(lagWhiteSpace(bredde-j) + tekst.substring(posisjon, posisjon+j)); } posisjon = posisjon + j; } } } private static String lagWhiteSpace(int antall) { String whitespaces = ""; for(int i=0;i<antall;i++) { whitespaces = whitespaces + " "; } return whitespaces; } } Lenke til kommentar
w3edr5t Skrevet 27. februar 2003 Del Skrevet 27. februar 2003 Huff, forumet er ikke spesielt bra til å vise kildekode. Jeg kan sende deg java fila hvis du ønsker. mvh Terje Lenke til kommentar
Grokster Skrevet 28. februar 2003 Del Skrevet 28. februar 2003 her er mitt enkle forslag: sjekk lengden på stringen, hvis den er mindre en antall rader brukeren ønsker, legg til strengen på nytt, sjekk lengden igjen. Kjør substring for å få lengden på strengen lik antall rader og voila! kodesnutt: while ( blTeller ) { if ( intTall > intTempLengde ) { strTekst += strTekst; intTempLengde = strTekst.length(); } else blTeller = false; } strTekst = strTekst.substring(0, intTall); kanskje ikke den mest elegante men virker Lenke til kommentar
Superior Skrevet 11. mars 2003 Del Skrevet 11. mars 2003 Gjør leksene dine selv. Denne oppgaven er nøyaktig lik en obligatorisk oppgave som jeg nettopp har hatt. Neppe tilfeldig. Lenke til kommentar
[muffin] Skrevet 11. mars 2003 Forfatter Del Skrevet 11. mars 2003 neppe tilfeldig nei men nå er det ikke ulovlig å spørre om råd da vet du... Du kan jo legge ut løsningen din da hvis du er så genial, siden innleveringsfristen er ute likevel Lenke til kommentar
Superior Skrevet 11. mars 2003 Del Skrevet 11. mars 2003 "]neppe tilfeldig nei men nå er det ikke ulovlig å spørre om råd da vet du... Du kan jo legge ut løsningen din da hvis du er så genial, siden innleveringsfristen er ute likevel Løsningen min er grei nok den, men ikke så genial at jeg gidder å legge den ut. Lenke til kommentar
[muffin] Skrevet 11. mars 2003 Forfatter Del Skrevet 11. mars 2003 oki. Men du må slutte å hakke på oss som kanskje må spør om tips av og til... 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å