Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Söka i en ArrayList

Postades av 2007-06-15 14:36:23 - Gunnar Storäng, i forum java, Tråden har 13 Kommentarer och lästs av 2986 personer

Hej, jag skapar en ArrayList och lagrar ett antal objekt bestående av int variablar, efter det önskar jag söka igenom samma ArrayList. Det är sökfunktionen som jag har problem med. Jag har skrivit en metod som tar emot ett inmatat värde lagrat som en int variabel, denna variabel vill jag jämföra med elementen i ArrayListan. efter for loopen gör jag jämförelsen med en if sats:

public int getArmID(int sokdata){
for(int i = 0; i<idlist.size; i++{
if(sokdata == idlist.get(i))
return 0;
}
return -1;
}

resultatet blir alltid 0 vad jag än har lagt in i listan eller värdet av variabeln, jämförelsen fungerar inte, vad gör jag för fel?

Tacksam för svar
/javabeginner


Svara

Sv: Söka i en ArrayList

Postades av 2007-06-15 14:40:10 - Niklas Jansson

Funktionen där är ju felskriven, det saknas en högerparentes efter i++.

Om elementet finns i listan, är det naturligtvis så att du alltid får svaret 0, vad du i allmänhet ska returnera är väl indexet


public int getArmID(int sokdata){
for(int i = 0; i<idlist.size; i++){
if(sokdata == idlist.get(i))
return i;
}
return -1;
}


Svara

Sv:Söka i en ArrayList

Postades av 2007-06-15 14:58:53 - Gunnar Storäng

Hej Niklas och tack för ditt svar! Ledsen med parantesen, missade den när jag skrev in frågan, problemet är att funktionen alltid returnerar 0 även om variabeln sokdata inte stämmer med elementet i listan.
Listan innehåller ett element med ex värdet 1, sokdata är 2.
Och du får ursäkta mig jag är verkigen nybörjare på java men nu när jag testar att skriver in ditt förslag på kod, (retur i) blir resultat 0 iallfall, jag antar att det är variabeln i i for loopen som returneras.


Svara

Sv: Söka i en ArrayList

Postades av 2007-06-15 15:18:08 - Tom Granqvist

Kan du inte använda contains-metoden?

import java.util.ArrayList;
import java.util.List;

class Test {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		list.add(12);
		list.add(6);
		list.add(9);
		
		System.out.printf("Listan innehåller en 9? %s\n", list.contains(9) ? "Jepp" : "Nope");
	}
}


Kräver Java 1.5 eller högre, men det bör du ha annars också.


Svara

Sv:Söka i en ArrayList

Postades av 2007-06-15 15:27:16 - Gunnar Storäng

Hej Tom och tack för ditt förslag! Har inte testat men ska fundera lite.
Ha det!


Svara

Sv: Söka i en ArrayList

Postades av 2007-06-15 15:55:32 - Niklas Jansson

Det vettigaste du kan göra nu är att skriva ut grejerna, typ

System.out.println("i = " + i);
System.out.println("sokdata = " + sokdata);
System.out.println("get(i) = " + ...get(i));

inuti loopen, så ser du exakt vad som händer.


Svara

Sv:Söka i en ArrayList

Postades av 2007-06-15 16:10:05 - Tom Granqvist

Här är en tutorial om Java Collection Framework dit bl.a. ArrayList hör, det kan lösa sig att läsa den http://java.sun.com/docs/books/tutorial/collections/index.html. Om du undrar vad det inom < och > har att göra med är det s.k. generics, läs mera på: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf(pdf)


Svara

Sv:Söka i en ArrayList

Postades av 2007-06-18 08:39:09 - Gunnar Storäng

Hej och tack igen Niklas, kan ändå inte komma vidare...här är utskriften

idlist.add((indata));
System.out.println(idlist);
[5] // Lägger till värde i ArrayList (idlist).


i = 0 // Variabel i definierad i for loopen.
sokdata = 3 // Variabeln sokdata med värde 3 som ska jämföras med element i list.
get(i) = 5 // Värdet i första elementet.
0 // retur i inne i for loopen.

Känns som det är ett pinsamt superlarvigt fel jag gör, kan bara inte förstå vad felet är..Jag försöker jämföra en int variabel med ett element i en arraylist, programmet går alltid vidare efter if satsen där jag önskar att en jämförelse ska göras, oavsett om jämförelsen är sann eller inte.


Svara

Sv: Söka i en ArrayList

Postades av 2007-06-18 08:54:57 - Niklas Jansson

Det kan inte vara så enkelt att du har ett semikolon efter for-grejen?
Om inte, kopiera in den exakta koden här.


Svara

Sv:Söka i en ArrayList

Postades av 2007-06-18 11:16:24 - Gunnar Storäng

Nej, inget semikolon efter for loopen. Jag är tacksam för att du tar dig tid!
Kan det ha att göra med att jag försöker jämföra en int med ett objekt? Alltså det är ju egentligen en int i elementet. Om jag vänder på if satsen och skriver idlist.get(i) == sokdata får jag felmeddelande

incomparable types: java.lang.Object and int

Hursomhelst här kommer koden:

public int getArmID(int sokdata){
for(int i = 0; i<idlist.size; i++){
if(sokdata == idlist.get(i))
System.out.println("i = " + i);
System.out.println("sokdata = " + sokdata);
System.out.println("get(i) = " + idlist.get(i));
return i;
}
return -1;
}

Har även testat med detta som egentligen bara sparar idlist.get(i) till en Integer.
public int getArmID(int sokdata){
for(int i=0; i<idlist.size(); i++){
Integer test = (Integer) idlist.get(i);
if(sokdata == test){
System.out.println("i = " + i);
System.out.println("sokdata = " + sokdata);
System.out.println("get(i) = " + idlist.get(i));
return test;
}
}
return -1;
}

Mvh Gunnar


Svara

Sv: Söka i en ArrayList

Postades av 2007-06-18 12:36:34 - Niklas Jansson

Problemet nu är att du inte har lagt koden i ett block (samma effekt som semikolon), prova:

public int getArmID(int sokdata){
        for(int i = 0; i<idlist.size; i++){
           if(sokdata == idlist.get(i)){
             System.out.println("i = " + i);
             System.out.println("sokdata = " + sokdata);
             System.out.println("get(i) = " + idlist.get(i));
             return i;
           }
        }
    return -1;
}


Det kan naturligtvis även vara det andra som är problem, prova att omvandla till int istället för Integer.

public int getArmID(int sokdata){
        for(int i = 0; i<idlist.size; i++){
           if(sokdata == (int)idlist.get(i)){
             System.out.println("i = " + i);
             System.out.println("sokdata = " + sokdata);
             System.out.println("get(i) = " + idlist.get(i));
             return i;
           }
        }
    return -1;
}


Svara

Sv:Söka i en ArrayList

Postades av 2007-06-18 15:06:07 - Gunnar Storäng

Hej jepp det var felet, dock får jag fortfarande 0 när jag returnerar i, jag tycker jag borde få idlist.get(i) istället men..Tack för all din hjälp!
MEN, det är var ju såklart bara ett litet delproblem. Jag håller på att bygga ett system där jag matar in en int via ett GUI, fångar upp och skickar vidare till en metod som lagrar int variabeln i en ArrayList (idlist). Nu vill jag såklart kunna söka i samma lista och få ett resultat jag kan bygga vidare med. När jag anropar denna jämförelse/sök metod får jag NullPointerException för att jag återigen missat något.

Systemet består av tre klasser: GUI, Controller och ArmID koden för de två sista ser ut så här:

Controller.java:

public class Controller {
    private Gui gui;
    private ArrayList idlist = new ArrayList();

    public Controller(){
        gui = new Gui(this);
    }
    
    public void avsluta(){
        System.exit(0);
    }
    
    public void regArmID(int indata){
        ArmID armID = new ArmID(indata, idlist);
    }
    
    public void sokArmID(int sokdata){
        ArmID armID = new ArmID();
        int sok = armID.getArmID(sokdata);    
        if(sok == 0)
        gui.visaKarta();
        else if(sok == -1)
            System.out.println("inget att visa"); //Bry dig inte så mycket om detta..
    }
    
    public static void main(String[] args) {
        Controller cont = new Controller();                
    }
}



ArmID.java
public class ArmID {
     private Controller controller;
     private int indata;
     private ArrayList idlist;
     
     public ArmID(){       
     }
     
     public ArmID(Controller controller){
         this.controller = controller;
     }
     
     public ArmID(int indata, ArrayList idlist) {
        this.indata = indata;
        this.idlist = idlist;
        idlist.add((indata));
//        System.out.println(idlist);
//        int size = idlist.size();
//        System.out.println(size);     
    }
      
     public int getArmID(int sokdata){
         for(int i=0; i<idlist.size(); i++){
             Integer test = (Integer) idlist.get(i);
             if(sokdata == test){
                 System.out.println("i = " + i);
                 System.out.println("sokdata = " + sokdata);
                 System.out.println("get(i) = " + idlist.get(i));
                 return 0;
             }
         }
         return -1;
     }
}

Och det är när jag anropar public int getArmID jag får NullPointerException varför?
Mvh Gunnar


Svara

Sv: Söka i en ArrayList

Postades av 2007-06-18 15:57:33 - Martin Adrian

Verkar vara en konstig design.

Varför skall ArmID objekten innehålla controller och idlist?

Använd ett set istället:
(Är inget bra på Java men något i den här stilen kanske)

public class Controller {
    private Gui gui;
    private Set<int> idset = new Set<int>();

    public Controller(){
        gui = new Gui(this);
    }
    
    public void avsluta(){
        System.exit(0);
    }
    
    public void regArmID(int indata){
        idset.Add(indata);
    }
    
    public void sokArmID(int sokdata){
        if (idset.Contains(sokdata))
          gui.visaKarta();
        else 
            System.out.println("inget att visa"); //Bry dig inte så mycket om detta..
    }
    
    public static void main(String[] args) {
        Controller cont = new Controller();                
    }
}


Svara

Sv:Söka i en ArrayList

Postades av 2007-08-10 10:49:52 - Emil Hernvall

For future reference: Generics fungerar bara med objekt och inte primitives. Set är ett interface i java, och man måste väl ett konkret objekt när man skapar ett nytt Set.

import java.util.Set;
import java.util.HashSet;

// ...

private Set<Integer> idset = new HashSet();


Java Collections Framework är riktigt snyggt designat faktiskt. :)


Svara

Nyligen

  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 843
27 961
271 763
810
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies