Avatar billede bumle90 Nybegynder
04. juni 2001 - 00:31 Der er 6 kommentarer og
1 løsning

Haster.....metoder

Hej jeg vil gerne spørge om det kan lade sig gøre at en metode modtager flere forskellige arrays, som indeholder objekter af forskellige typer. Dog skal det lige nævnes at objekterne har de samme instansvariabler, som fx. fornavn og efternavn og CPR nr. osv. Grunden til at jeg vil dette er at jeg ikke vil skrive:
System.out.print(indtast navn)
x[1].fornavn=Keyboard.readInt();
osv. flere gange end nødvendigt da objekterne i de andre arrays også har en attribut der hedder fornavn osv.
Kort sagt....
Kan
public static void indtastninger(array1 x, array2 y)
laves så man sætte begge arrays til at være x i metoden. På den måde sparer jeg jo en ´masse plads i min source code og programmet bliver mere overskueligt osv. Forstår i hvad jeg mener?
Avatar billede mwittrock Nybegynder
04. juni 2001 - 21:45 #1
Hvis dine forskellige klasser alle har de samme instansvariabler, kan du nedarve dine klasser fra en Person klasse, der har så har fornavn, efternavn osv. Du kan da skrive én metode, der modtager et array af Person objekter. I dit program kan du da kalde denne metode med arrays af objekter, hvis klasser nedarveder fra Person, og det hele vil fungere.
Avatar billede bumle90 Nybegynder
04. juni 2001 - 22:48 #2
Men mine metoder har ikke helt de samme instansvariabler. Der er nogle attributter på nogle af objekterne i et array som der ikke er i de andre osv...
Avatar billede lens Nybegynder
04. juni 2001 - 22:57 #3
Hvad med at kalde skidtet med et array af arrays!
I dette tilfælde to.
Avatar billede mwittrock Nybegynder
04. juni 2001 - 22:58 #4
Jeg er ikke helt sikker på, at jeg forstår dig. Hvis du har en metode, der forventer at modtage et Person objekt, kan du sagtens kalde den metode med et Brandmand objekt, hvis klassen Brandmand nedarver fra klassen Person. Fra metodens synspunkt modtager den en Person, og den kan derfor udføre sit arbejde uden problemer.
Avatar billede delbing Nybegynder
06. juni 2001 - 11:34 #5
For eksempel:

public class Person {
String fornavn;
String efternavn;
long Cpr;
}

public class Mand extends Person {
boolean harSkæg;
}

public class Kvinde extends Person {
boolean erGravid;
}


Så har du en metode
public void skrivNavn(Person[] personer) {
for (int i=0; i<personer.length;i++) System.out.println(person[i].fornavn);
}


Nu vil du gerne have en metode som tager et array af Mand og et af Kvinde og skriver navnene ud - den kunne se sådan ud:

public void skrivNavn(Mand[] m, Kvinde[] k) {
skrivNavn(m);
skrivNavn(k);
}
Avatar billede bumle90 Nybegynder
06. juni 2001 - 22:16 #6
Hmmm  jeg tror ikke jeg har formuleret mig godt nok. Det var ikke det jeg mente nemlig. Men det gør heller ikke så meget nu, for jeg fandt på en alternativ metode, og vi har afleveret opgeaven i dag. Men tak for hjælpen ellers drenge.

Jeg vil give de 60 point til den der svarer på dette spørgsmål:
Til den bog som jeg har købt til JAVA (JAVA software solutions af lewis og loftus) hører der en Keyboard klasse med. Denne klasse gør det muligt hvis man importerer den at indlæse en værdi fra tastaturet. Det er meningen at man kan taste String,byte,short,int,long,float og double værdier ind, hvorefter man så kan gemme værdierne i den variabel man har defineret. Sagen er bare den at keyboardklassen er dårlig. Den virker nemlig kun når man indtaster en string, en en int eller en double. De andre metoder virker ikke.
Så mit spørgsmål er hvordan man eventuelt kan hente en værdi af typen String,byte,short,int,long,float el double ind fra keyboardet vha JDK standard package library. Hvis der er en der gider at skrive koden for hvordan man gør til hver type, får han de 60 point. Tak på forhånd
Avatar billede mwittrock Nybegynder
07. juni 2001 - 00:08 #7
Kig på den her, fremgangsmåden er ganske ligetil (se på Main() for et eksempel på hvordan klassen kan bruges):

import java.io.*;

public class Console {

  private BufferedReader in;

  public Console() {
    in = new BufferedReader(new InputStreamReader(System.in));
  }

  public String readString() throws IOException {
    return in.readLine();
  }

  public byte readByte() throws IOException, NumberFormatException {
    return Byte.parseByte(in.readLine());
  }

  public short readShort() throws IOException, NumberFormatException {
    return Short.parseShort(in.readLine());
  }

  public int readInt() throws IOException, NumberFormatException {
    return Integer.parseInt(in.readLine());
  }

  public long readLong() throws IOException, NumberFormatException {
    return Long.parseLong(in.readLine());
  }

  public float readFloat() throws IOException, NumberFormatException {
    return Float.parseFloat(in.readLine());
  }

  public double readDouble() throws IOException, NumberFormatException {
    return Double.parseDouble(in.readLine());
  }

  public static void main(String[] cmdargs) {

    int a = 0;
    long b = 0;
    float c = 0;
    Console con = new Console();

    try {

      System.out.print(\"Indtast en int værdi: \");
      a = con.readInt();

      System.out.print(\"Indtast en long værdi: \");
      b = con.readLong();

      System.out.println(a + \" * \" + b + \" = \" + (a*b));

      System.out.print(\"Indtast en float værdi: \");
      c = con.readFloat();

      System.out.println(a + \" * \" + b + \" * \" + c + \" = \" + (a*b*c));

    } catch (Exception e) {
      System.out.println(\"Ups: \" + e.getMessage());
    }

  }

}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester