13 svar
180 visningar
civilingengör är nöjd med hjälpen
civilingengör 193
Postad: 19 mar 2022 10:41

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. 

Fermatrix 7841 – Fd. Medlem
Postad: 19 mar 2022 11:00

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.

civilingengör 193
Postad: 19 mar 2022 16:15 Redigerad: 19 mar 2022 16:29
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.

Fermatrix 7841 – Fd. Medlem
Postad: 19 mar 2022 21:34

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? :)

civilingengör 193
Postad: 20 mar 2022 08:43
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?

Fermatrix 7841 – Fd. Medlem
Postad: 20 mar 2022 09:25 Redigerad: 20 mar 2022 09:29

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.

Fermatrix 7841 – Fd. Medlem
Postad: 20 mar 2022 09:28

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. :)

civilingengör 193
Postad: 20 mar 2022 14:39
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.  

Laguna Online 28597
Postad: 20 mar 2022 14:58

Hur ser koden ut nu?

civilingengör 193
Postad: 20 mar 2022 15:10

Jag har även testat att byta ut "-1" mot "i" vilket inte helelr gav något vidare resultat.

Laguna Online 28597
Postad: 20 mar 2022 15:15

Du returnerar alltid redan för första strängen. Om andra strängen skulle matcha får du aldrig veta det.

civilingengör 193
Postad: 20 mar 2022 19:02
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?

Fermatrix 7841 – Fd. Medlem
Postad: 20 mar 2022 19:17

Läs igenom tråden, du har fortfarande exakt samma problem.

civilingengör 193
Postad: 21 mar 2022 08:53

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 :)

Svara Avbryt
Close