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...
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
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 :)
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.
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.
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:
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. ;)
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.
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 ***
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();
}
}
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:
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)
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.
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.
143 ms totalt · 3 externa anrop · v20260731065814-full.55e59744