Trädvy Permalänk
Medlem
Registrerad
Dec 2014

list cannot be resolved, Java

Hejsan!

Jag håller på att roa mig med metoder i Java. Jag har för vana att skriva allt för mycket kod i main-klassen och tänkte försöka ändra på det.
Nu har jag kört fast lite när jag implementerar en arrayList i koden. Jag får meddelandet "list cannot be resolved" i konstruktorn. Jag tror jag förstår varför, men jag kan inte komma på hur jag ska lösa det på bäst sätt.

import java.util.*; public class Head { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String fname, lname; int choice; ArrayList<People>list = new ArrayList<>(); People p1 = new People("Mia", "Wallace", "1111"); People p2 = new People("Marcellus", "Wallace", "2222"); list.add(p1); list.add(p2); System.out.println("Welcome"); System.out.println("1) Add person \n2) Last name \n3) Print list"); choice = scan.nextInt(); switch(choice){ case 1: People.walk(); //calling the method break; case 2: People.run(); break; case 3: People.crawl(); break; } } }

och...

import java.util.*; public class People { static Scanner scan = new Scanner(System.in); private static String fname; private static String lname; private static String dob; public People(String fname, String lname, String dob){ this.fname = fname; this.lname = lname; this.dob = dob; } public String getFname(){ return fname; } public String getLname(){ return lname; } public String getDob(){ return dob; } public static void walk(){ System.out.println("Enter first name: "); fname = scan.next(); System.out.println("Enter last name: "); lname = scan.next(); System.out.println("Enter dob: "); dob = scan.next(); list.add(new People(fname, lname, dob)); //list cannot be resolved } public static void run(){ System.out.println("Remove people"); } public static void crawl(){ int peoplenumber = 0; System.out.println("\nNumber of peoples: " + list.size()); //list cannot be resolved for(People p : list){ //list cannot be resolved peoplenumber += 1; System.out.println("#" + peoplenumber + "\n" + p.toString()); } } public String toString(){ return "First name: " + this.fname + "\nLast name: " + this.lname + "\nDateOfBirth: " + this.dob; } }

Tack så mycket för att du tog dig tid

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Sep 2003

ArrayList ligger väll i utils som du redan har, dock ser jag inte att du har något som pekar på people. Är inte så inne på Java heller men du kanske måste ha People innanför taggerna after new också.

Edit I: ovanstående var tydligen tillåtet i Java

Edit II: anledningen till att det inte kompilerar är för att du varken skickar in eller har en lista deklarerad i din people-klass, ta en funderare på var du vill utföra din addering/utskrivningar.

1: Intel i7-3930K | 32GB Corsair Dominator GT | Asus Rampage IV Extreme x79 | 2 x 1080 GameRock Premium 8GB | 2 x Samsung Pro 840 512GB | Corsair AX1200i | BenQ XL2411 24" / W1070 135" | Bose QC25 | Windows 10 Pro x64 | HTC Vive |
2: Intel Core i7-4700HQ | 32GB RAM | Intel HM87 Express | GTX 780M | 17" | Windows 10 x64 |

Trädvy Permalänk
Medlem
Registrerad
Maj 2012

Felet är att din klass "People" försöker använda variablen "list" utan att ha deklarerat den någonstans, därav klagar kompilatorn på att den inte kan resolva.

Antigen får du skicka in en lista i dina funktioner //walk, run, crawl
Eller så får du skicka in en referens i konstruktorn där du senare använder i dina funktioner

Trädvy Permalänk
Medlem
Registrerad
Dec 2014
Skrivet av Maltafalas:

Felet är att din klass "People" försöker använda variablen "list" utan att ha deklarerat den någonstans, därav klagar kompilatorn på att den inte kan resolva.

Antigen får du skicka in en lista i dina funktioner //walk, run, crawl
Eller så får du skicka in en referens i konstruktorn där du senare använder i dina funktioner

Ok..... Tack för din hjälp
Något förslag på hur kag gör det?

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Nov 2001

Ett tips är att namnge variabler och metoder så att man förstår innebörden av dem. Undvik förkortningar och liknande.
Det var lite andra buggar i programmet där du använder static felaktigt som gör att du får oväntade buggar. Static på ett fält gör att fältet blir samma för alla olika instanser av det objektet. När jag körde ditt program efter några fixar så skrevs enbart sista personens uppgifter ut.
Jag har skrivit om programmet lite så, jag visste inte exakt vad du var ute efter i programmet så det har inte exakt samma funktioner.

import java.util.*; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Peoples peoples = createInitialPeoples(); System.out.println("Welcome"); while (true) { System.out.println("\n1) Add person \n2) Print list\n0) Exit\n"); int userInput = scan.nextInt(); switch(userInput) { case 1: peoples.add(PersonFactory.newFromUserInput()); break; case 2: System.out.println(peoples); break; case 0: System.exit(0); } } } private static Peoples createInitialPeoples() { Peoples peoples = new Peoples(); peoples.add(new Person("Mia", "Wallace", "1981-01-01")); peoples.add(new Person("Marcellus", "Wallace", "1982-02-02")); return peoples; } }

public class Person { private final String firstName; private final String lastName; private final String dateOfBirth; public Person(String firstName, String lastName, String dateOfBirth) { this.firstName = firstName; this.lastName = lastName; this.dateOfBirth = dateOfBirth; } public String toString() { return "First name: " + firstName + "\nLast name: " + lastName + "\nDateOfBirth: " + dateOfBirth; } }

import java.util.Scanner; public class PersonFactory { public static Person newFromUserInput() { Scanner inputScanner = new Scanner(System.in); System.out.println("Enter first name: "); String firstName = inputScanner.next(); System.out.println("Enter last name: "); String lastName = inputScanner.next(); System.out.println("Enter date of birth: "); String dateOfBirth = inputScanner.next(); return new Person(firstName, lastName, dateOfBirth); } }

import java.util.ArrayList; import java.util.List; public class Peoples { private List<Person> peoples = new ArrayList<>(); public String toString() { String summaryOfPeoples = "Number of peoples: " + peoples.size() + "\n"; for (int i = 0; i < peoples.size(); i++) { summaryOfPeoples += "#" + (i+1) + "\n" + peoples.get(i).toString() + "\n"; } return summaryOfPeoples; } public void add(Person people) { peoples.add(people); } }

Sverige är ett så litet land att det bara får plats en åsikt i taget där.

Trädvy Permalänk
Medlem
Registrerad
Dec 2014
Skrivet av Daniel:

Ett tips är att namnge variabler och metoder så att man förstår innebörden av dem. Undvik förkortningar och liknande.
Det var lite andra buggar i programmet där du använder static felaktigt som gör att du får oväntade buggar. Static på ett fält gör att fältet blir samma för alla olika instanser av det objektet. När jag körde ditt program efter några fixar så skrevs enbart sista personens uppgifter ut.
Jag har skrivit om programmet lite så, jag visste inte exakt vad du var ute efter i programmet så det har inte exakt samma funktioner.

import java.util.*; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Peoples peoples = createInitialPeoples(); System.out.println("Welcome"); while (true) { System.out.println("\n1) Add person \n2) Print list\n0) Exit\n"); int userInput = scan.nextInt(); switch(userInput) { case 1: peoples.add(PersonFactory.newFromUserInput()); break; case 2: System.out.println(peoples); break; case 0: System.exit(0); } } } private static Peoples createInitialPeoples() { Peoples peoples = new Peoples(); peoples.add(new Person("Mia", "Wallace", "1981-01-01")); peoples.add(new Person("Marcellus", "Wallace", "1982-02-02")); return peoples; } }

public class Person { private final String firstName; private final String lastName; private final String dateOfBirth; public Person(String firstName, String lastName, String dateOfBirth) { this.firstName = firstName; this.lastName = lastName; this.dateOfBirth = dateOfBirth; } public String toString() { return "First name: " + firstName + "\nLast name: " + lastName + "\nDateOfBirth: " + dateOfBirth; } }

import java.util.Scanner; public class PersonFactory { public static Person newFromUserInput() { Scanner inputScanner = new Scanner(System.in); System.out.println("Enter first name: "); String firstName = inputScanner.next(); System.out.println("Enter last name: "); String lastName = inputScanner.next(); System.out.println("Enter date of birth: "); String dateOfBirth = inputScanner.next(); return new Person(firstName, lastName, dateOfBirth); } }

import java.util.ArrayList; import java.util.List; public class Peoples { private List<Person> peoples = new ArrayList<>(); public String toString() { String summaryOfPeoples = "Number of peoples: " + peoples.size() + "\n"; for (int i = 0; i < peoples.size(); i++) { summaryOfPeoples += "#" + (i+1) + "\n" + peoples.get(i).toString() + "\n"; } return summaryOfPeoples; } public void add(Person people) { peoples.add(people); } }

Tack så väldans för det, vilket jobb. Jag har bara min telefon just nu, men jag ska kolla vad du skrev lite mer noggrant under dagen

Skickades från m.sweclockers.com