Avatar billede iziqio Nybegynder
22. oktober 2003 - 09:43 Der er 55 kommentarer og
1 løsning

Array sortering ?

jeg har læst de fleste spg om array igennem men kan ikke helt kombinere dem med mit prob. (Lidt newbie)

Hvordan sortere jeg mine "boger" ?? Det virker fint ellers...

import cs1.Keyboard;
import java.util.*;


public class BogHolderi
{

  public static void main (String[] args)
  {
   
    BogSamling boger = new BogSamling ();
   
    int nr = 0;
    String str, koerprogramigen = "y";
 
   
    while (koerprogramigen.equalsIgnoreCase("y") )
      {
     
      //Intast oplysninger
      nr++;
      System.out.println ("titel") ;
      String titel = Keyboard.readString();
      System.out.println ("Forfatter") ;
      String forfatter = Keyboard.readString();
      System.out.println ("Art/Genre") ;
      String art = Keyboard.readString();
     
      //Tilfoj informationer til array
      boger.addBog (nr, titel, forfatter, art);
   
     
     
      /*Arrays.sort(boger);
        for(int i = 0; i < sa.length; i++) System.out.println(sa[i]);
        */
     
     
      //Udskriv informationer
      System.out.println (boger) ;
     
     
      //Mulighed for at oprette endnu en bog
      System.out.println ("Vil du oprette endnu en bog ? (Tryk Y)") ;
      koerprogramigen = Keyboard.readString();
         
      }
    System.out.println ("SLUT") ;
 
  }

}
Avatar billede iziqio Nybegynder
22. oktober 2003 - 09:44 #1
det i /* og */ virker ikke... derfor /*
Avatar billede soreno Praktikant
22. oktober 2003 - 09:48 #2
Hvordan ser BogSamling klassen ud ?
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 09:49 #3
boger er ikke et array, så det kan du jo ikke sortere ;)
Avatar billede iziqio Nybegynder
22. oktober 2003 - 09:49 #4
import java.util.*;


public class BogSamling
{
  private Bog[] Samling;
  private int count;
 
  public BogSamling ()
  {
      Samling = new Bog[100];
      count = 0;
  }
  public void addBog (int nr, String titel, String forfatter, String art)
  {
      if (count == Samling.length)
        increaseSize();
     
 
     
      Samling[count] = new Bog (nr, titel, forfatter, art);
      count++;
     
     
     
     
  }
  //
  public String toString()
  {
     

      String report = "------------------------------------------------------\n";
      report +=      "***\t\tDin BogSamling\t\t***\n";

      report += "  \t\tAntal Boger:" + count ;
     
      report += "\n\nBog Liste:";
     
      report += "\nnr\tTitel:\t\tForfatter:\t\tArt:\n";


      for (int bog = 0; bog < count; bog++)
        report += Samling[bog].toString() + "\n";

      return report;
  }
  // Ungår at arrayet bliver mindre
  private void increaseSize ()
  {
      Bog[] temp = new Bog[Samling.length * 2];

      for (int bog = 0;  bog < Samling.length; bog++)
        temp[bog] = Samling[bog];

      Samling = temp;
  }
 
 
}
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 09:51 #5
Er din Bog-klasse så "comparable", for det array "Samling" kan sorteres
Avatar billede soreno Praktikant
22. oktober 2003 - 09:52 #6
Hvilket kriterie vil du sortere efter ?
Avatar billede iziqio Nybegynder
22. oktober 2003 - 09:53 #7
alfabetisk efter forfatter... kan man evt udelade "nr" ? gør det det hele nemmere ?
Avatar billede soreno Praktikant
22. oktober 2003 - 09:54 #8
Så vis os lige din Bog klasse.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 09:54 #9
Avatar billede iziqio Nybegynder
22. oktober 2003 - 09:54 #10
import java.util.*;
 
public class Bog
{
  private String titel, forfatter, art;
  private int nr;

  public Bog (int antal, String name, String singer, String type)
  {
      nr = antal;
      titel = name;
      forfatter = singer;
      art = type;
   
  }

  public String toString()
  {
     
      String description;

      description = nr + "\t" + titel + "\t" + "\t"+ forfatter + "\t" + "\t" + art;

      return description;
  }
 
  public int compareTo (Object other)
 
  {
      int result;

      if (forfatter.equals(((Bog)other).forfatter))
        result = titel.compareTo(((Bog)other).titel);
      else
        result = forfatter.compareTo(((Bog)other).forfatter);

      return result;
  }
 
}
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 09:56 #11
public class Bog implements Comparable
Avatar billede iziqio Nybegynder
22. oktober 2003 - 09:56 #12
"nr" skal vel fjernes (Det var bare for at gøre overskueligheden nemmere, men er ikke nødvendig !!!
Avatar billede arne_v Ekspert
22. oktober 2003 - 09:57 #13
I BogSamling burde du kunne lave:

Samling = Arrays.sort(Samling);
Avatar billede iziqio Nybegynder
22. oktober 2003 - 09:57 #14
Til sidst i filen ? eller hvor ?
Avatar billede arne_v Ekspert
22. oktober 2003 - 09:57 #15
Men du skal lave soretringen i BogSamling ikke på BogSamling.
Avatar billede arne_v Ekspert
22. oktober 2003 - 09:59 #16
Du kunne jo f.eks. lave en sort metode:

public void sort() {
  Samling = Arrays.sort(Samling);
}

og så kalde:
  boger.sort();
i BogHolderi.
Avatar billede iziqio Nybegynder
22. oktober 2003 - 09:59 #17
hvis den sættes til linie 58 : giver den :
Error: incompatible types
found  : void
required: Bog[]
-- det er 2 } før slutningen på filen
Avatar billede arne_v Ekspert
22. oktober 2003 - 09:59 #18
Vigtigt: Eriks 09:56:10 kommentar *skal* rettes !
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:01 #19
boger.sort();
giver
Error: cannot resolve symbol
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:02 #20
ups, metode er ikke en fil, men en den af bogholderi filen ikke ?
Avatar billede arne_v Ekspert
22. oktober 2003 - 10:04 #21
Nej sort metoden skulle ligges ind i BogSamling.

Og kaldes fra BogHolderi main.
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:07 #22
Error: <identifier> expected ????
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:07 #23
hvor skal "public class Bog implements Comparable" indsættes ?
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:08 #24
ok øvertst i bog filen
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:10 #25
public void sort()
  {
    Samling = Arrays.sort(Samling);
  }
  boger.sort();
  System.out.println (boger) ;
-------- Er sat i bunden (lige før det sidste } ) af Bogholderi, men giver stadig fejlen ...
Avatar billede arne_v Ekspert
22. oktober 2003 - 10:14 #26
Du skal have metoden sort i BogSamling.

Du skal kalde boger.sort() i BogHolderi main.

Du skal havce implements Comparable på Bog.
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:17 #27
done done done. men :

Error: incompatible types
found  : void
required: Bog[]
--------i BogSamling efter indsat
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:19 #28
skal vi bruge andre end : import java.util.*;
Avatar billede arne_v Ekspert
22. oktober 2003 - 10:20 #29
Nej.

Kan du lige poste BogSamling som den ser ud nu ?
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:20 #30
import java.util.*;
import java.util.Collections;



public class BogSamling
{
  private Bog[] Samling;
  private int count;
 
  public BogSamling ()
  {
      Samling = new Bog[100];
      count = 0;
  }
  public void addBog (int nr, String titel, String forfatter, String art)
  {
      if (count == Samling.length)
        increaseSize();
     
 
     
      Samling[count] = new Bog (nr, titel, forfatter, art);
      count++;
     
     
     
     
  }
  //
  public String toString()
  {
     

      String report = "------------------------------------------------------\n";
      report +=      "***\t\tDin BogSamling\t\t***\n";

      report += "  \t\tAntal Boger:" + count ;
     
      report += "\n\nBog Liste:";
     
      report += "\nnr\tTitel:\t\tForfatter:\t\tArt:\n";


      for (int bog = 0; bog < count; bog++)
        report += Samling[bog].toString() + "\n";

      return report;
  }
  // Ungår at arrayet bliver mindre
  private void increaseSize ()
  {
      Bog[] temp = new Bog[Samling.length * 2];

      for (int bog = 0;  bog < Samling.length; bog++)
        temp[bog] = Samling[bog];

      Samling = temp;
     
  }
   
  public void sort ()
  {
    Samling = Arrays.sort(Samling);
  }
 
 
}
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:34 #31
Kan i se hvor det går galt ?
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:37 #32
Det der link Erik gav mig, viser mest sortering men Arrays der har hver deres "nummer", hvordan bruger jeg det på min måde ? Kan man det ? eller er der en løsning med de filer jeg har nu ?
Avatar billede arne_v Ekspert
22. oktober 2003 - 10:46 #33
Min fejl.

det er:

public void sort ()
  {
    Arrays.sort(Samling);
  }

(sp compiler det hos mig)

Sorry.
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:56 #34
Fejl:
java.lang.NullPointerException:
  at Bog.compareTo(Bog.java:32)
  at java.util.Arrays.mergeSort(Unknown Source)
  at java.util.Arrays.mergeSort(Unknown Source)
  at java.util.Arrays.mergeSort(Unknown Source)
  at java.util.Arrays.mergeSort(Unknown Source)
  at java.util.Arrays.mergeSort(Unknown Source)
  at java.util.Arrays.sort(Unknown Source)
  at BogSamling.sort(BogSamling.java:65)
  at BogHolderi.main(BogHolderi.java:38)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
Avatar billede iziqio Nybegynder
22. oktober 2003 - 10:56 #35
men den compiler fint :)
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:00 #36
Arrayet er ikke fuldt.

public void sort ()
  {
    Arrays.sort(Samling, 0, count - 1);
  }
Avatar billede iziqio Nybegynder
22. oktober 2003 - 11:05 #37
Tusind, tak. Nu er den der. Det er alle pointene værd. Nu mangler jeg bare at finde ud af hvordan jeg sletter en bog i Arrayet...
Avatar billede iziqio Nybegynder
22. oktober 2003 - 11:06 #38
Vil du ikke lige angive et svar, så du kan få point - evt hjælpe med næste problem ? Jeg har læst noget om at man kan bruge array.remove [index]eller lign ... ?
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:06 #39
Det er bare besværligt !

(du er nødt til at kopiere referancer til alle elementer efter det du sletter).

Overvej at bruge ArrayList i.s.f. array - det er meget nemmere !!
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:06 #40
svar
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:07 #41
ArrayList har en remove(index) metode.
Avatar billede instruktorne Nybegynder
22. oktober 2003 - 11:08 #42
Husk nu, at det betragtes som videnskabelig uredelighed at snyde!!! Det er helt ok, at stille spørgsmål på Eksperten, så længe disse IKKE omhandler konkrete problemstillinger ved de opgaver I skal løse!

Det er ret åbentlyst og lidt klumset, at stille spørgsmål direkte til denne uges obligatoriske og eksamens-adgangsgivende-opgave.

Formuler jeres spørgsmål på et aggregeret niveau - eksempelvis: hvordan sorterer man et array efter strenge el. lign.

Just a friendly reminder :O), men alvorligt talt, så betragtes snyd ret alvorligt på DØK-studiet, hvilket i yderste konsekvens kan betyde udelukkelse fra alle videregående uddannelser i en årrække!

Venlig hilsen

En af jeres instruktorer
Avatar billede iziqio Nybegynder
22. oktober 2003 - 11:08 #43
Hvor meget skal jeg lave om ? hvis jeg skifter til arrayList ? har læst lidt om det, men ikke nok til at kunne skifte sådan lige ...
Avatar billede iziqio Nybegynder
22. oktober 2003 - 11:10 #44
Til instruktorne :
Hvordan skulle man ellers få hjælp når men sidder fast ?
Jeg har brugt ca 6 timer på at sidde og programmere frem og tilbage ?
Avatar billede iziqio Nybegynder
22. oktober 2003 - 11:11 #45
Er det ikke bedre at prøve alt hvad man kan istedet for at give op ? (Som jeg ved mange er lige ved at gøre)
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:12 #46
Her er et eksmepel (som jeg har postet nogle gange før) med ArrayList og
sortering:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortArrayListComplex {
    public static void main(String[] args) {
        List lst = new ArrayList();
        lst.add(new Data("CCC","1"));
        lst.add(new Data("BB", "2"));
        lst.add(new Data("A", "3"));
        for(int i = 0; i < lst.size(); i++) {
            System.out.println((Data)lst.get(i));
        }
        Collections.sort(lst, new Cmp());
        for(int i = 0; i < lst.size(); i++) {
            System.out.println((Data)lst.get(i));
        }
    }
}

class Data {
    private String v1;
    private String v2;
    public Data(String v1, String v2) {
        this.v1 = v1;
        this.v2 = v2;
    }
    public String toString() {
        return (v1 + " " + v2);
    }
    public String getV1() {
        return v1;
    }
    public String getV2() {
        return v2;
    }

}

class Cmp implements Comparator {
    public int compare(Object o1, Object o2) {
        return ((Data)o1).getV1().compareTo(((Data)o2).getV1());
    }
    public boolean equals(Object obj)  {
        return false;
    }
}
Avatar billede iziqio Nybegynder
22. oktober 2003 - 11:18 #47
Til : instruktorer
Jeg kontakter - Eksperten.dk og får dem til at slette indlægget, da jeg nødig vil træde nogen over tæerne eller på nogen måde skade min egen fremtidige mulighed for at blive DØKKER.

Til : Arne

Tak for hjælpen, det hjælp lidt, men den sortere stadig ikke helt rigtigt ! Først når man afslutter programmet :(
(Du fik point)
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:21 #48
Den sorterer vel der hvor du kalder boger.sort, så hvis du vil have sorteret
tidligere så flytter du bare den sætning hen hvor sorteringen skal ske.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 11:22 #49
Det er selvfølgelig lidt filosofisk, men når du skriver
"Hvordan skulle man ellers få hjælp når men sidder fast ?" får det
mig til at tænke på om du så egentlig burde
bestå den eksamen. Det er jo meningen at du selv skal lære det.
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:22 #50
Hvis du afleverer en løsning med ArrayList så tror jeg ikke at der
er nogen som vil have ondt af et kode eksempel med simpelt array
på Eksperten.
Avatar billede iziqio Nybegynder
22. oktober 2003 - 11:25 #51
Erik - enig ang, at man selv skal lære/læse, men hvis koden ikke giver mening, eller hvis man ikke forstår hvorfor den gør som den gør, nytter det jo ikke noget at give op. Som jeg tidligere skrev har jeg virkeligt prøvet alle de ting jeg kunne komme på, inden jeg benyttede eksperten.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 11:28 #52
Jo, men jeg forstår ikke denne tankegang "Jeg kan ikke løse opgaven, så
jeg må få andre til det, så jeg kan bestå eksamen".

Jeg ville meget bedre kunne forstå: "Jeg kan ikke løse opgaven, så jeg
må se at finde ud af hvad jeg ikke har lært. Måske kan jeg få nogle
på eksperten.dk til at hjælpe mig med de grundlæggende ting."

Jeg kan også forstå: "Jeg kan ikke finde ud af det. Jeg giver op". Der er
jo ikke nogen der siger at du absolut skal have den eksamen, hvis du ikke
kan finde ud af det.
Avatar billede iziqio Nybegynder
22. oktober 2003 - 11:31 #53
Jeg vil ikke bare sige det kan jeg ikke !!! Det er ikke mig .. Man må prøve igen ! Indtil man har fundet ud af hvordan og hvorfor. Ellers kommer man jo ikke frem i livet. Man skal aldrig give op. Men det er jo bare min holdning.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 11:36 #54
instruktorne (sjov stavemåde) siger så også - så vidt jeg kan læse - at
du kan benytte dig af den midterste mulighed i mit indlæg.
Avatar billede iziqio Nybegynder
27. oktober 2003 - 14:46 #55
Jeg har nu aflevetret opgaven, dog uden held med at få arrayes til at virke. Derudover har jeg forsøgt at få spørgsmålet lukket da jeg ikke mener det har relevans for andre at se, at jeg måske har begået en fejl ved spørge så direkte til en opgave. Forstå godt man kunne bruge det som eksempel til andre, dog uden forståelse for hvorfor mit nick skal vises i al evighed. Men dette er Ekspertens.dk valg og man kan jo ikke gøre noget ved det da det er dem der styrer siden.
Avatar billede iziqio Nybegynder
27. oktober 2003 - 14:51 #56
Jeg kan oplyse interesserede i at jeg startede forfra og brugte ArrayList da det var nemmere for min opgaveløsning og jeg derved ikke brugte de svar jeg modtog herinde. -> ErikJakosen, ja jeg har brugt dit midterste forslag. Da det lød som en fornuftig løsning.
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