fredrija Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 hei. jeg skal lage dette programmet: Du skal i denne oppgaven lage et program som leser inn to tekststrenger og sjekker om den siste er en delstreng i den første, om den siste forekommer i den første. De to tekststrengene leses inn fra main-metoden. Deretter kalles en klassemetode som utfører undersøkelsen. Metoden returnerer en boolsk verdi som bekrefter eller avkrefter at streng nr. to er en delstreng i streng nr. en. Dersom det er tilfelle skal programmet også skrive ut hvor delstrengen starter. Alle sløyfestrukturer i denne oppgaven skal styres av boolske variabler, betingelser skal erstattes med boolske variabler. foreløpig har jeg denne koden: import javax.swing.JOptionPane; public class Oppgave2C { public static void main(String[] args) { String streng1, streng2; String inputStreng1, inputStreng2; inputStreng1 = JOptionPane.showInputDialog("Skriv inn streng1"); streng1 = inputStreng1; inputStreng2 = JOptionPane.showInputDialog("skriv inn streng2"); streng2 = inputStreng2; System.out.println("streng1: "+streng1); System.out.println("streng2: "+streng2); System.out.println(); boolean substringOf = Oppgave2C.SubstringOf(streng1, streng2); if(substringOf==true) System.out.println(streng2); } public static boolean SubstringOf(String streng1, String streng2) { for(int i=0; i<streng1.length(); i++) { if(streng2.equals(streng1.substring(i))) return true; } return false; } } men får det ikke helt til. noen som kan hjelpe meg med siste resten takk på fårhånd:) Lenke til kommentar
NevroMance Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 Hvis du kun skal sjekke om streng2 er en substring av streng1 trenger du vel kun noe som if(string2.equals(streng1.substring(i, i+string2.length) { return true;}[/code} Hvis du skal sjekke motsatt trenger du kun en for-løkke til. Også må du avslutte for-løkka di på i < (streng1.length - streng2.length) Lenke til kommentar
___ Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 Vanligvis bruker jeg ikke å komme med komplette besvarelser til oppgaver, men siden du tydeligvis har jobbet seriøst med dette, så tenkte jeg at jeg skulle hjelpe deg. I stedet for å bruke for-løkke, bruker jeg String sin indexOf()-metode. Denne returnerer posisjonen når den finner en forekomst, ellers returnerer den -1. import javax.swing.JOptionPane; public class Oppgave2C { private static int where; public static void main(String[] args) { String streng1, streng2; String inputStreng1, inputStreng2; inputStreng1 = JOptionPane.showInputDialog("Skriv inn streng1"); streng1 = inputStreng1; inputStreng2 = JOptionPane.showInputDialog("skriv inn streng2"); streng2 = inputStreng2; System.out.println("streng1: " + streng1); System.out.println("streng2: " + streng2); System.out.println(); boolean substringOf = Oppgave2C.SubstringOf(streng1, streng2); if (substringOf == true) System.out.println("\"" + streng2 + "\" starter på posisjon " + where); } public static boolean SubstringOf(String streng1, String streng2) { // indexOf returnerer posisjon ved treff, eller -1 ved ikke treff return ((where = streng1.indexOf(streng2)) != -1); } } Hilsen Werner Lenke til kommentar
pgdx Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 String.contains()? http://java.sun.com/j2se/1.5.0/docs/api/ja...g.CharSequence) Lenke til kommentar
Mr.Garibaldi Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 String.contains()?http://java.sun.com/j2se/1.5.0/docs/api/ja...g.CharSequence) Den gir svar på om streng a er del av streng b, men ikke hvor den er i streng b, noe oppgaven ba om. Dermed blir indexof() den beste løsningen i dette tilfellet... Selv om NevroMance nok hadde en løsning som ligger nærmere hva de etterspør (siden det er en egen implementasjon og ikke bare bruk av biblioteket)... Lenke til kommentar
IwwY^^ Skrevet 22. oktober 2008 Del Skrevet 22. oktober 2008 Hei, ser dette er en gammel post, men har en lignende oppgave jeg har slitt litt med, men lurer på om noen kloke hoder kan fortelle meg hvorfor vi må legge static int where før metoden? Altså jeg har en egen klasse for SubstringOf som heter delStreng. Hvis jeg deklarerer int i den metoden og i main, vil den ikke kunne finne where. Men hvis jeg legger den før metoden main eller før metoden SubstringOf i delStreng klassen fungerer det. Er forholdvis nybegynner så ville bare lære hvorfor den står der? import javax.swing.JOptionPane; public class Oppgave2C { private static int where; public static void main(String[] args) { String streng1, streng2; String inputStreng1, inputStreng2; inputStreng1 = JOptionPane.showInputDialog("Skriv inn streng1"); streng1 = inputStreng1; inputStreng2 = JOptionPane.showInputDialog("skriv inn streng2"); streng2 = inputStreng2; System.out.println("streng1: " + streng1); System.out.println("streng2: " + streng2); System.out.println(); boolean substringOf = Oppgave2C.SubstringOf(streng1, streng2); if (substringOf == true) System.out.println("\"" + streng2 + "\" starter på posisjon " + where); } public static boolean SubstringOf(String streng1, String streng2) { // indexOf returnerer posisjon ved treff, eller -1 ved ikke treff return ((where = streng1.indexOf(streng2)) != -1); } } Lenke til kommentar
pgdx Skrevet 22. oktober 2008 Del Skrevet 22. oktober 2008 (endret) Det er ganske vanskelig å forklare akkurat hvorfor uten at du har en bedre forståelse for hvordan OOP fungerer, men for å si det enkelt, main-metoden din må være statisk, og skal en statisk metode nå noe i klassen uten å ha en referanse til et objekt, må den være statisk. where er delt mellom alle instanser av klassen. Det er i det hele tatt en dårlig løsning. where bør fjernes, subString-metoden din bør ta inn en int where, og main-metoden må mellomlagre hvor langt i strengen den har kommet. subStringOf bør returnere indexen, som string.indexOf, deretter kan du sjekke int where = subStringOg(streng1, streng2); if (where >= 0) { System.out.println("\"" + streng2 + "\" starter på posisjon " + where); } Endret 22. oktober 2008 av pgdx Lenke til kommentar
IwwY^^ Skrevet 23. oktober 2008 Del Skrevet 23. oktober 2008 (endret) EDIT: Lagde en egen static int metode istedet. Får vel gå =) Takk for svar! Endret 23. oktober 2008 av IwwY^^ 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å