Kodfel - sökning i vektorer
Hej! Vet någon möjligtvis vad som är fel med denna kod? Värdet -1 returneras varje gång koden körs.
Det du gör att är du försöker jämföra adressen för strängarna. Du måste använda s.equals om du vill jämföra själva värdet av strängen.
Dracaena skrev:Det du gör att är du försöker jämföra adressen för strängarna. Du måste använda s.equals om du vill jämföra själva värdet av strängen.
Tack, men jag förstår inte riktigt. Varför fungerar inte min lösning? Hur använder jag s.equals istället? Tack för din tid.
Här har du ett exempel.
public static void main(String[] args) {
String[] animals = {"fisk", "mus", "fisk", "fisk", "anka", "hund", "kanin"};
int freq = 0;
for (int i = 0; i < animals.length; i++) {
if (animals[i].equals("fisk")) freq++;
}
System.out.println("Fisk freq: " + freq);
}
Kan du med hjälp av detta fixa till din kod så den fungerar? :)
Dracaena skrev:Här har du ett exempel.
public static void main(String[] args) { String[] animals = {"fisk", "mus", "fisk", "fisk", "anka", "hund", "kanin"}; int freq = 0; for (int i = 0; i < animals.length; i++) { if (animals[i].equals("fisk")) freq++; } System.out.println("Fisk freq: " + freq); }
Kan du med hjälp av detta fixa till din kod så den fungerar? :)
Hej igen. Ditt exempel är väldigt lättförståeligt men jag lyckas ändå få detta felmeddelande trots att jag tycks ha gjort rätt. Vad har jag missat?
Om du vill hålla dig till samma struktur som du hade från början så kan du skriva följande:
public static int test(String[] strings, String word) {
int i = 0;
while (i < strings.length && !strings[i].equals(word)) {
i++;
}
if(i < strings.length)
return 1;
return -1;
}
Det som ställer till det i din kod är att du fortfarande i din while-loop försöker kolla om minnesadressen för strings[i] är samma som 'word' och detta kommer skapa problem.
Du kan också göra något i stil av detta:
public static int test(String[] strings, String word) {
for (int i = 0; i < strings.length; i++) {
if(strings[i].equals(word))
return 1;
}
return -1;
}
Tillägg: 20 mar 2022 10:04
Glömde att du skall returnera index och inte 1 / -1 om strängen existerar men det är en enkel justering. Det är bara att ändra så att man istället returnerar i och inte 1. :)
Dracaena skrev:Du kan också göra något i stil av detta:
public static int test(String[] strings, String word) { for (int i = 0; i < strings.length; i++) { if(strings[i].equals(word)) return 1; } return -1; }
Tillägg: 20 mar 2022 10:04
Glömde att du skall returnera index och inte 1 / -1 om strängen existerar men det är en enkel justering. Det är bara att ändra så att man istället returnerar i och inte 1. :)
Tack igen för din tid. Men jag får tyvärr inte rätt på det. Det fungerar inte trots att "i" byts ut mot 1.
Hur ser koden ut nu?
Jag har även testat att byta ut "-1" mot "i" vilket inte helelr gav något vidare resultat.
Du returnerar alltid redan för första strängen. Om andra strängen skulle matcha får du aldrig veta det.
Laguna skrev:Du returnerar alltid redan för första strängen. Om andra strängen skulle matcha får du aldrig veta det.
Varför går första "if-satsen" alltid igenom? Hur löser jag detta?
Läs igenom tråden, du har fortfarande exakt samma problem.
Tack snälla för allas hjälp! Jag löste det nu på detta vis. Jag hoppas ni får en fortsatt bra dag :)