---
title: "två frågor om fält..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/56823-två-frågor-om-fält"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "mikael_a"
published: "2002-10-23T00:53:24.000Z"
updated: "2002-10-23T13:05:18.000Z"
replies: 11
views: 382
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/56823-två-frågor-om-fält"
---

# två frågor om fält...

## #1 — mikael_a, 2002-10-23T00:53Z

Jag försöker att lära mig hur fält fungerar...

Jag lagrar ett x antal uppgifter i ett fält. t.ex. förnamn, efternam och adress...

jag har försökt att göra en sök funktion, men jag får inte det att fungera, och hur skriver jag sedan ut bara personen den har hittat?

variablar: sökt = string, 
                hittad = boolean

record är namnet på fältet...

```php

else if (huvudMenyVal == 3)
{

System.out.print("\n	Ange får- och efternamn p† den person du vill såka p†: ");
sökt = SavitchIn.readLine();

   for (int i = 0; i < sökt.length; i++)
   if (record[i] == sökt)
   hittad = true;

if (hittad)
{
System.out.println("\n	Personen funnen");
System.out.println(" ");
}

else
{
System.out.println("\n	Tyv„rr personen finns ej i registret");
System.out.println(" ");
}
```

så här sparar jag till fältet

```php

if (huvudMenyVal == 1)
				{
				record = new PersonRegister[antalPersoner];
    	    	for (int i = 0; i < antalPersoner; i++)

			{
            record[i] = new PersonRegister();
            System.out.println("\n	Skriv in data får person nummer " + (i + 1));
            record[i].readInput();
            System.out.println();
        		}
			}
```

och till fråga 2

hur raderar jag sedan t.ex. post nummer 2? antar att jag har 10 namn inskrivna och vill radera namn nr 2 ifrån fältet...

tacksam för all hjälp... är i nybörjar stadiet, och börjar fatta lite :)

Permalänk: https://www.webforum.nu/p/56823

## #2 — PeW, 2002-10-23T05:47Z

Om du ska jämföra strängar måste du endera använda dig av de metoder som finns i standardklassen string... t.ex s1.equal(s2) eller göra en egen metod för det. 

```php
sökt = SavitchIn.readLine();

   for (int i = 0; i < sökt.length; i++)
   if (sökt.equals(record[i] ))
      hittad = true;
```

Sen är det nog bättre att skippa flaggan "hittad" och istället helt enkelt returnera / tilldela en referens till det hittade objektet. Om du t.ex vill kunna få träff på fler objekt kan man ju då ist peta in referenser för varje träff i en lista... och sen kolla om listan innehåller något eller inte.

```php
   for (int i = 0; i < sökt.length; i++)
   if (sökt.equals(record[i] ))
      obj_ref = record[i];
```

Är det fler som ska sparas:

```php
 int j = 0;
   for (int i = 0; i < sökt.length; i++)
   if (sökt.equals(record[i] )){
      obj_ref[j] = record[i];
     j++;
     }
```

Fast jag skulle hellre använda list() eller vector() än statiska arrayer.  ;)

Permalänk: https://www.webforum.nu/p/830467

## #3 — mikael_a, 2002-10-23T08:36Z

hmmm om jag använder ditt första exempel, så får jag följande fel:

Java 75: cannot resolve symbol
symbol : variable lenght
location : class.java.String
for (int i = 0; i \< sökt.length; i++)
                                z (en pil pekar på punkten)

Permalänk: https://www.webforum.nu/p/830531

## #4 — Viktor, 2002-10-23T09:14Z

length är en funktion altså måste du skriva length()
Som det är skrivet nu så försöker du anroppa en variabel i klassen String.

/Viktor

Permalänk: https://www.webforum.nu/p/830557

## #5 — mikael_a, 2002-10-23T09:23Z

ok, programmet startar, men det blir ett java.lang.arrayIndexOutOfBoundsException fel på raden

Permalänk: https://www.webforum.nu/p/830564

## #6 — Viktor, 2002-10-23T09:27Z

Ska inte

```
sökt = SavitchIn.readLine();

   for (int i = 0; i < sökt.length(); i++)
   if (sökt.equals(record[i] ))
      hittad = true;
```

vara

```
sökt = SavitchIn.readLine();

   for (int i = 0; i < [B]record[/B].length(); i++)
   if (sökt.equals(record[i] ))
      hittad = true;
```

??
Lite osäker på hur man får fram storleken på en array så record.length() kanske är fel men det som den ska ta fram är altså storleken på arrayen.
Som det är nu så loopar den så många gånger som det finns tecken i strängen som användaren har skrivit in.

/Viktor

Permalänk: https://www.webforum.nu/p/830568

## #7 — Viktor, 2002-10-23T09:31Z

En ska till,

```
   if (sökt.equals(record[i] ))
      hittad = true;
```

borde inte det vara

```
   if (sökt.equals(record[i][B].getName()[/B]))
      hittad = true;
```

?
Du ska väll gämföra namnet, inte hela objektet.
Du får byta "getName()" mot vad din funktion för att hämta ut namnet från kalssen heter.

/Viktor

Permalänk: https://www.webforum.nu/p/830570

## #8 — mikael_a, 2002-10-23T09:58Z

det fungerade inte heller...

det jag vill göra är att söka efter ett namn som finns lagrat i ett fält som heter record.... namnet du söker på sparas i en string "sökt" så om du skriver "kalle svensson" så sparas detta i sökt och så vill jag leta igenom fältet record om det finns så skall det skrivas ut, annars skrivs det ut att det inte finns...

bifogar koden...

\*\*\* PersonData.java \*\*\*

```php

public class PersonData
{
    private PersonRegister[] record;
    private int antalPersoner, huvudMenyVal;
    private String sökt;
    boolean huvudMeny = true;

  	boolean hittad = false;

    public void getUppgifter()
    {
        System.out.println("	Välkommen till Personregistreraren 2002 version 3.0\n");
        System.out.println("	");
        System.out.print("	Hur m†nga personer vill du kunna spara? ");
        antalPersoner = SavitchIn.readLineInt();

			while (huvudMeny == true)
			{
			System.out.println("");
			System.out.println("	ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»");
			System.out.println("	º                                   º");
			System.out.println("	º - Personregistreraren version 3 - º");
			System.out.println("	º                                   º");
			System.out.println("	º              Huvud Meny           º");
			System.out.println("	º                                   º");
			System.out.println("	º      1. Mata in person            º");
			System.out.println("	º      2. Visa personlista          º");
			System.out.println("	º      3. Såk p† person             º");
			System.out.println("	º      4. Ta bort person            º");
			System.out.println("	º      5. Avsluta programmet        º");
			System.out.println("	º                                   º");
			System.out.println("	ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼");
			System.out.println("");
			System.out.print("	Ange val: ");
			huvudMenyVal = SavitchIn.readLineInt();

			if (huvudMenyVal == 1)
				{
				record = new PersonRegister[antalPersoner];
    	    	for (int i = 0; i < antalPersoner; i++)

			{
            record[i] = new PersonRegister();
            System.out.println("\n	Skriv in data får person nummer " + (i + 1));
            record[i].readInput();
            System.out.println();
        		}
			}

			else if (huvudMenyVal == 2)
			{
		      System.out.println(" ");
		      for (int i = 0; i < antalPersoner; i++)
		      record[i].writeOutput();
              System.out.println();

			}

			else if (huvudMenyVal == 3)
			{

			System.out.print("\n	Ange får- och efternamn p† den person du vill såka p†: ");
			sökt = SavitchIn.readLine();

			for (int i = 0; i < record.length(); i++)
			if (sökt.equals(record[i].getFörnamn() ))
			             hittad = true;

				if(hittad)
						{
			          System.out.println("\n	Personen funnen");
			          System.out.println(" ");
						}
			    else
			    {
           		System.out.println("\n	Tyv„rr personen finns ej i registret");
           		System.out.println(" ");
				}

//			System.out.print("	Programmet avslutas...");
//			huvudMeny = false;
//			break;
			}

			else if (huvudMenyVal == 4)
			{
			System.out.print("	Programmet avslutas...");
			huvudMeny = false;
			break;
			}

			else if (huvudMenyVal == 5)
			{
			System.out.print("\n	Programmet avslutas...\n\n");
			huvudMeny = false;
			break;
			}

			else
			{
			System.out.print("\n	Valet fanns inte, var god fårsåk igen...\n");
			huvudMeny = true;
			}

			}
	}

public static void main(String[] arg)
{

PersonData clerk = new PersonData();
clerk.getUppgifter();
 //		clerk.displayMeny();
 //   clerk.update();
   //   clerk.displayResults();
	}
}
```

\*\*\* PersonRegister.java \*\*\*

```php

public class PersonRegister
{
    private String förnamn, efternamn, födelseår, adress, postnummer, postort;

    public PersonRegister()
    {
      	förnamn = "Ingen Data";
        efternamn = "Ingen Data";
        födelseår = "Ingen Data";
        adress = "Ingen Data";
        postnummer = "Ingen Data";
        postort = "Ingen Data";
    }

    public PersonRegister(String initialFörnamn, String initialEfternamn, String initialFödelseår, String initialAdress, String initialPostnummer, String initialPostort)
    {
        set(initialFörnamn, initialEfternamn, initialFödelseår, initialAdress, initialPostnummer, initialPostort);
    }

    public void set(String newFörnamn, String newEfternamn, String newFödelseår, String newAdress, String newPostnummer, String newPostort)
    {
        förnamn = newFörnamn;
        efternamn = newEfternamn;
        födelseår = newFödelseår;
        adress = newAdress;
        postnummer = newPostnummer;
        postort = newPostort;
    }

    public void readInput()
    {
        System.out.print("\n	Ange fårnamn: ");
        förnamn = SavitchIn.readLine();

        System.out.print("	Ange efternamn: ");
        efternamn = SavitchIn.readLine();

        System.out.print("	Ange fådelse†r: ");
        födelseår = SavitchIn.readLine();

        System.out.print("	Ange adress: ");
        adress = SavitchIn.readLine();

        System.out.print("	Ange postnummer: ");
        postnummer = SavitchIn.readLine();

        System.out.print("	Ange postort: ");
        postort = SavitchIn.readLine();

    }

    public void writeOutput()
    {
        System.out.println("	");
        System.out.println("	Namn: "+förnamn+" "+efternamn);
        System.out.println("	Fådelse†r: "+födelseår);
        System.out.println("	Adress: ");
        System.out.println("	"+adress);
        System.out.println("	"+postnummer+" "+postort);
        System.out.println("	");

    }

    public String getFörnamn()
    {
        return förnamn;
    }

    public String getEfternamn()
    {
        return efternamn;
    }

    public String getFödelseår()
	    {
	        return födelseår;
    }

    public String getAdress()
	    {
	        return adress;
    }

	public String getPostnummer()
    {
        return postnummer;
    }

	public String getPostort()
    {
        return postort;
    }

}
```

tacksam för all hjälp jag hitills har fått... det här med fält är tycker jag är lite krångligt... :)

Permalänk: https://www.webforum.nu/p/830584

## #9 — PeW, 2002-10-23T11:15Z

Det är inte så krångligt. Men det hade förmodligen varit enklare om du byggt upp klassen lite mer OOP-mässigt. Nu liknar programmets uppbyggnad strukturerad programmering med en klass som datasamling (struct).  Skitsamma, den biten kommer väl senare för dig, antar jag. 

För att lösa ditt problem med indexOutOfBounds:

```php
for (int i = 0; i < record.length()-1; i++)
            if (sökt.equals(record[i].getFörnamn() ))
                         hittad = true;
```

\*lade till -1 \*

Mao så måste du ta med i beräkningen att längden på fältet är kanske t.ex 4 men index slutar i det fallet på 3  ;)  

Nu kanske det är meningen att du ska köra med ett statiskt fält, men en sån här uppgift är betydligt lättare om du använder vector (i java.util)

Permalänk: https://www.webforum.nu/p/830616

## #10 — mikael_a, 2002-10-23T11:34Z

tack... men jag får fortfarande ett error...

cannot resolve symbol
symbol : method length ()
location : class PersonRegister\[\]

for (int i = 0; i \< record.length()-1; i++)

( en pil på punkten)

Permalänk: https://www.webforum.nu/p/830631

## #11 — phonkworks, 2002-10-23T13:03Z

record.length
ska de va.

Regel:
En array vet sin längd
En sträng vet inte sin längd

mvh
phonk

Permalänk: https://www.webforum.nu/p/830687

## #12 — PeW, 2002-10-23T13:05Z

Ta bort "()" efter length ...  det du gör nu är att anropa en metod som heter length() i **class PersonRegister**... och nån sådan har du inte implementerat. Alternativt så gör du en klassvariabel i PersonRegister som räknas upp varje gång du skapar ett nytt objekt, alt har du en räknare i "main" som håller reda på alla instanser.

Din register-klass är lite lustig. Den är både ett register och en datatyp för personer. Om jag vore som du skulle jag plocka ut alla inmatningar och utskrifter från klassen och ta bort metoden "set". Istället skulle jag använda den andra konstruktorn för att direkt initiera instansen.

```php
public PersonRegister(String förnamn, String efternamn, String födelseår, String adress, String postnummer, String postort)
    {
        this.förnamn = förnamn;
        this.efternamn = efternamn;
        this.födelseår = födelseår;
        this.adress = adress;
        this.postnummer = postnummer;
        this.postort = postort;

    }
```

I den första klassen (i detta fall class PersonData) sköter man all kommunikation med användaren, initierar instansen med datan och hämtar för jämförelser och utskrift.

Permalänk: https://www.webforum.nu/p/830688

---

Tråden på webben: https://www.webforum.nu/amne/java/56823-två-frågor-om-fält
