Det där fungerar tyvärr inte, men det finns några lösningar. Kanske det enklaste är att använda en "map", som så att säga mappar ett värde till ett annat. En map har nycklar som måste vara unika, och ett värde för varje nyckel. Ett exempel är HashMap, då kunde du ha
Map<String, Integer> names = new HashMap<String, Integer>();
names.put("Olle", 1234);
Märk som sagt att du då inte kan ha flera personer med samma namn. Ett annat alternativ är att ha en ArrayList bestående av räckor (array) av längden två, där det första elementet är namnet och det andra ISBN-numret. Då måste bägge vara av samma typ, d.v.s. String.
ArrayList<String[]> names = new ArrayList<String[]>();
names.add(new String[]{"Kalle", "1234"});
names.add(new String[]{"Olle", "4567"});
Det kanske bästa alternativet är att göra en skild klass för författare, så som du verkar har gjort i början. Du kan dock inte använda samma klass för att lagra elementen, såvida du inte har en statisk lista för dessa (statisk innebär gemensam för alla instanser av klassen).
class Writer {
static ArrayList<Writer> names = new ArrayList<Writer>();
String name;
int ISBN;
public Writer(String name, int ISBN) {
this.name = name;
this.ISBN = ISBN;
// Spara personen i klassens gemensamma lista
names.add(this);
}
public void printName() {
System.out.println(this.name);
}
public static void printNames() {
for(Writer w: names) {
System.out.println(w.name);
}
}
}
Så nu har du något att fundera på. Din type mismatch från tidigare är ganska uppenbar, du har en konstruktor som tar en ArrayList, och ibland ger du den en ArrayList, ibland en String.
OBS: Har inte testat koden ovan, kan finnas skrivfel.