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: Funktionen där är ju felskriven, det saknas en högerparentes efter i++. 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. Kan du inte använda contains-metoden? Hej Tom och tack för ditt förslag! Har inte testat men ska fundera lite. Det vettigaste du kan göra nu är att skriva ut grejerna, typ 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) Hej och tack igen Niklas, kan ändå inte komma vidare...här är utskriften Det kan inte vara så enkelt att du har ett semikolon efter for-grejen? Nej, inget semikolon efter for loopen. Jag är tacksam för att du tar dig tid! Problemet nu är att du inte har lagt koden i ett block (samma effekt som semikolon), prova: 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! Verkar vara en konstig design. 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.Söka i en ArrayList
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
/javabeginnerSv: Söka i en ArrayList
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;
}Sv:Söka i en ArrayList
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.Sv: Söka i en ArrayList
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å.
Sv:Söka i en ArrayList
Ha det!Sv: Söka i en ArrayList
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.Sv:Söka i en ArrayList
Sv:Söka i en ArrayList
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. Sv: Söka i en ArrayList
Om inte, kopiera in den exakta koden här.Sv:Söka i en ArrayList
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 GunnarSv: Söka i en ArrayList
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;
}
Sv:Söka i en ArrayList
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
Sv: Söka i en ArrayList
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();
}
}
Sv:Söka i en ArrayList
import java.util.Set;
import java.util.HashSet;
// ...
private Set<Integer> idset = new HashSet();
Java Collections Framework är riktigt snyggt designat faktiskt. :)