6 svar
516 visningar
josefinanord behöver inte mer hjälp
josefinanord 103 – Fd. Medlem
Postad: 1 apr 2019 23:57

ArrayList söka efter element i givet index

I en ArrayList med namn försöker jag söka och skriva ut namnet som står på det index som användaren ska få välja själv. Min kod:

import java.util.Scanner;
import java.util.ArrayList;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class ReadFileIntoArrayListA{
static String name;

public static void main(String[] args) {



}
public String toString(){//overriding the toString() method
return name;
}
static String findName (ArrayList list, int index){
File file = new File("text.txt");
list = new ArrayList<String>();

try{
Scanner scan = new Scanner(file);
while(scan.hasNextLine()){
list.add(scan.nextLine());
}
scan.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}

Scanner in = new Scanner(System.in);
System.out.println("Enter index: ");
index = in.nextInt();

String integer = Integer.toString(index);
name = list.get(index);
return name;
}
}

 

Men jag får detta error-meddelandet:

Tips på lösningar? :)

SeriousCephalopod 2696
Postad: 2 apr 2019 00:28

Om det är ett runtime-error och inte ett compile-error så behöver du alltid specificera  vad det var för input som genererade felet samt datan som är matad in i programmet då sådana fel inte nödvändigtvis är fel med  koden i sig utan hur man interagerar med den.

Det sagt så gissar jag att problemet kommer av hur knasigt findName är definierad. Varför är list ett argument till funktionen överhuvudtaget? Den instansieras ju i funktionen och riskerar bara skriva över extern data av misstag.

Hursomhelst så är ArrayList list i findname(...) inte specificerad som en <String>-lista vilket inte är några problem när det kommer till sätta in strängar i listan eftersom jag antar att java castar dem till Object men när du försöker rycka ut objekt från list som inte längre har sträng-typ och sätta in dem i index som har strängtyp så får du ett fel som ju lyder explicit "du försöker sätta in ett värde med Object-typ i en variabel med Strängtyp och det går inte. 

Om det inte är det problemet så specificera inputsekvensen om det är runtime omkompilera med -Xlint så att du får detaljerna. 

Laguna 30364
Postad: 2 apr 2019 06:55
SeriousCephalopod skrev:

Om det är ett runtime-error och inte ett compile-error så behöver du alltid specificera  vad det var för input som genererade felet samt datan som är matad in i programmet då sådana fel inte nödvändigtvis är fel med  koden i sig utan hur man interagerar med den.

Det sagt så gissar jag att problemet kommer av hur knasigt findName är definierad. Varför är list ett argument till funktionen överhuvudtaget? Den instansieras ju i funktionen och riskerar bara skriva över extern data av misstag.

Hursomhelst så är ArrayList list i findname(...) inte specificerad som en <String>-lista vilket inte är några problem när det kommer till sätta in strängar i listan eftersom jag antar att java castar dem till Object men när du försöker rycka ut objekt från list som inte längre har sträng-typ och sätta in dem i index som har strängtyp så får du ett fel som ju lyder explicit "du försöker sätta in ett värde med Object-typ i en variabel med Strängtyp och det går inte. 

Om det inte är det problemet så specificera inputsekvensen om det är runtime omkompilera med -Xlint så att du får detaljerna. 

Det står en del bra saker här, men 'index' är inte en sträng, det är en int (men också den definierad konstigt, som argument till metoden).

Jag tror att anropet list.get(index) behöver ha en try/catch runt sig, för det kan hända att man anger ett index utanför listan.

SeriousCephalopod 2696
Postad: 2 apr 2019 07:01 Redigerad: 2 apr 2019 07:04

My bad men var ett slarvdfel. Menar fortf. att det är en object string grej.

Det var name jag menade på samma rad som var en sträng och som man försöker sätta ett obj i.

Laguna 30364
Postad: 2 apr 2019 07:19
SeriousCephalopod skrev:

My bad men var ett slarvdfel. Menar fortf. att det är en object string grej.

Det var name jag menade på samma rad som var en sträng och som man försöker sätta ett obj i.

Ja, du har rätt. Hur man borde göra är jag inte säker på, jag är inte helt rutinerad på Java. 

josefinanord 103 – Fd. Medlem
Postad: 2 apr 2019 12:22

Nu funkar det! Slutgiltiga koden:

public class FindNameAtIndex{
static int index;
public static void main(String[] args) {
File file = new File("text.txt");
ArrayList<String> list = new ArrayList<String>();

try{

Scanner scan = new Scanner(file);
while(scan.hasNextLine()){
list.add(scan.nextLine());
}
scan.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();}
Iterator iterator = list.iterator();
System.out.println("List of names: ");
while(iterator.hasNext()){
System.out.println(iterator.next().toString());
}
System.out.println("");
System.out.print(findName());
System.out.println("The name at specified index is: ");
System.out.println(list.get(index -1));
}

static String findName (){
String name = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter index: ");
index = in.nextInt();
return name;
}
}

Laguna 30364
Postad: 2 apr 2019 12:44

Hm, jag ser inte att 'name' sätts till något annat än "".

Svara
Close