Gå til innhold

Hvordan skal jeg få det til ? (substring)


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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
  • 2 uker senere...
"]neppe tilfeldig nei :D

 

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...