webForumDet fria alternativet

probs med main program anropandes flera klassfiler...

7 svar · 516 visningar · startad av Broms

BromsMedlem sedan sep. 2002188 inlägg
#1

Person.java skapar en person, säljare och köpare, som sedan skall sparas i Bostadsklassen, där annan information redan finns, såsom adress, storlek etc etc.. Bostad.java och Person.java genererar inga felmeddelanden, men jag får problem när jag kompilerar Main.java:

cannot resolve symbol constructor Person(blablabla) rad 10 in Main.java
cannot resolve symbol constructor Person(blablabla) rad 12 in Main.java
sättKöpare(java.lang.String) in Bostad cannot be applied to (Person) rad 16 in Main.java
sättKöpare(java.lang.String) in Bostad cannot be applied to (Person) rad 18 in Main.java

Bostad.java:

import extra.*;

public class Bostad {
	// Instansvariabler
	String adress;
	String köpare, säljare;
	double storlek;
	double avgift;
	double utgångspris;
	double slutpris;
	double provision;
	
	// Konstruktor
	public Bostad (String adr, double str, double avg, 
	               double upris, double spris, double prov, String kpre, String sljre){
	   adress = adr;
	   storlek = str;
	   avgift = avg;
	   utgångspris = upris;
	   slutpris = spris;
	   provision = prov;
	   köpare = kpre;
	   säljare = sljre;
	}
	
	// Instansmetoder
	public void sättSlutpris(double spris) {
		slutpris = spris;
	}
	public void sättKöpare(String k) {
		köpare = k;
	}
	public void sättSäljare(String s) {
		säljare = s;
	}
	
	public String toString() {
		String s = "Adress: " + adress + "\nStorlek: " + storlek +
		           "\nMånadsavgift: " + avgift + "\nUtgångspris: " +
		           utgångspris + "\nSlutpris: " + slutpris + 
		           "\nProvision: " + provision;
		return s;
	}
}

Person.java:

public class Person {
	//instansvariabler
	private String namn, personnummer, köpare, säljare;
	//konstruktor
	public Person(String n, String pnr) {
		namn = n; personnummer = pnr;
	}
	//Instansmetoder
	public String avLäsNamn() {
		return namn;
	}
	public void sättKöpare(String k) {
		köpare = k;
	}
	public void sättSäljare(String s) {
		säljare = s;
	}
	public String toString() {
		return namn + "\nPersonnummer: " + personnummer;
	}

}

Main.java:

import extra.*;
public class Main {
	// Huvudprogrammet
	public static void main (String[] arg) {
	String salesman;
	// Skapar ett Bostads-objekt
	Bostad b = new Bostad("Storgatan 1, 234 56 Stockholm" , 
		                       106.7 , 2111.45 , 0 , 3700000 , 5.6 , "null" , "null");
	// Skapar ett Person-objekt (köparen)
	Person p1 = new Person("Bertil Nyström","710519-4578");
	// Skapar ett Person-objekt (säljaren)
	Person p2 = new Person("Sarah Björk","531002-3647");
	// Sätt ett slutpris på bostadsrätten
	b.sättSlutpris(3970000);
	// Sätter köparen
	b.sättKöpare(p1);
	// Sätter säljaren
	b.sättSäljare(p2);
	
	// Kontrollerar om säljaren är samma person
	String säljaren;
	säljaren = p2.avLäsNamn();
	Std.out.print("Skriv in säljarens namn: ");
	salesman = Std.in.readLine ();
	
	if (salesman.equals(säljaren)){
		// Skriv ut informationen om bostadsrätten*/
		Std.out.println(b);
	}
	else Std.out.println("Felaktig säljare.");
	}
}

Skulle någon kunna kompilera detta och testa? Hittar inte vad som blir fel :(

Uppskattar hjälp väldigt mycket..

//Erik

ViktorMedlem sedan aug. 20021 752 inlägg
#2

Problemet är att den inte hittar Person och Bostads klassen.
Alla filer måste ligga i samma katalog och när du kompilerar så skriver du såhär,

javac -classpath %CLASSPATH%;. Main.java

så ska det nog fungera :)

Ett tips är att lägga till . i din classpath miljö variabel. Det som ./ gör är att den säger till kompilatorn att söka efter filer i den katalog där du är just nu, dvs den katalog där Person och Bostad finns.

/Viktor

BromsMedlem sedan sep. 2002188 inlägg
#3

sitter i jcreator, dvs helt grafiskt, hur fixas det där tro?

har ju gjort liknande program innan, med flera klassfiler som anropas, men har aldrig stött på problemet att den inte hittar filerna då.. de ligger ju i samma katalog.. :\

ViktorMedlem sedan aug. 20021 752 inlägg
#4

Missade en sak,

sättKöpare(java.lang.String) in Bostad cannot be applied to (Person) rad 16 in Main.java
sättKöpare(java.lang.String) in Bostad cannot be applied to (Person) rad 18 in Main.java

beror på att funktionen sättKöpare vill ha en String och inte en Person, du måste skriva om ditt anropp till

b.sättKöpare(p1.toString());
b.sättSäljare(p2.toString());

så ska det felet försvinna.
Detta fel,

cannot resolve symbol constructor Person(blablabla) rad 10 in Main.java
cannot resolve symbol constructor Person(blablabla) rad 12 in Main.java

Betyder att klassen inte kan hittas eller att konstruktorn inte kan hittas, det är dock inget fel på den kod som du har postat här så om koden du försöker kompilera ser likadan ut så borde det fungera. Dock så är det bättre om du inte redigerar fel medelandena utan lägger ut dem hela, blablabla säger inte så mycket :)

/Viktor

BromsMedlem sedan sep. 2002188 inlägg
#5

skrev så bara för att dom inte gick att kopiera.. utan jag fick skriva dom manuellt :p

BromsMedlem sedan sep. 2002188 inlägg
#6

har stött på riktiga problem igen... :\ längst ner i Main.java anropas testet i Bostad.java som kollar om försäljaren är == det försäljarobjektet som sparats ovan i main. när det sedan ska kollas får jag errors, körde detta i Main innan:

	String salesman, säljaren;
	säljaren = p2.avLäsNamn();
	Std.out.print("Skriv in säljarens namn: ");
	salesman = Std.in.readLine ();
	
	b.geSlutInfo(salesman, säljaren);

och detta i Bostad

	public String geSlutInfo(String s_man, String s_man2){
	
	// dvs if (s_man == s_man2){
	if (s_man.equals(s_man2)){
		
		// Skriv ut informationen om bostadsrätten*/
		Std.out.println(toString());
	}
	else Std.out.println("Felaktig säljare.");
		
		return "";
	}

, men Säljaren måste anropas från Bostad, dvs p2.avLäsNamn(); måste komma i Bostad, typ som:

	public String säljaren() {return p2.avLäsNamn();}

Men jag fattar inte, jag får inte tag på p2 ifrån Bostad.. varför inte?? Hur fixar jag detta??

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
PROGRAMKODEN
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

Bostad.java:

import extra.*;
public class Bostad {
	//instansvariabler
	private String adress, säljaren, sale; private double storlek, avgift, utgångspris, slutpris, provision;
	private Person köpare, säljare; private int ja;
	
	//konstruktor
	public Bostad(String adr, double str, double avg, 
	               double upris, double prov) {
		adress = adr; storlek = str; avgift = avg; utgångspris = upris; slutpris = 0; provision = prov;
		
	}
		
	//Instansmetoder
	
	public void sättSlutpris(double spris) {
		slutpris = spris;
	}
	public void sättKöpare(Person p) {
		köpare = p;
	}
	public Person avläsköpare() {
		return köpare;
	}
	public void sättSäljare(Person p) {
		säljare = p;
	}
	public Person avläsSäljare() {
		return säljare;
	}
	
	public String toString() {
		return		säljaren + "Adress: " + adress + "\nStorlek: " + storlek +
		           	"\nMånadsavgift: " + avgift + "\nUtgångspris: " +
		           	utgångspris + "\nSlutpris: " + slutpris + 
		           	"\nProvision: " + provision + "\nKöpare: " + köpare + "\nSäljare: " + säljare;
	}
	
//	public String geSlutInfo(String sale, String säljaren){
	public String säljaren() {return p2.avLäsNamn();}
	public String geSlutInfo(String sale){
	
	if (sale.equals(sale)){
		// Skriv ut informationen om bostadsrätten*/
		Std.out.println(toString());
	}
	else Std.out.println("Felaktig säljare.");
		
		return "";
	}
}

Person.java:

public class Person {
	//instansvariabler
	private String namn, personnummer;
	//konstruktor
	public Person(String n, String pnr) {
		namn = n; personnummer = pnr;
	}
	//Instansmetoder
	public String avLäsNamn() {
		return namn;
	}

	public String toString() {
		return namn + "\nPersonnummer: " + personnummer;
	}

}

Main.java:

import extra.*;
public class Main {
	// Huvudprogrammet
	public static void main (String[] arg) {
	String salesman;
	// Skapar ett Bostads-objekt
	Bostad b = new Bostad("Storgatan 1, 234 56 Stockholm",
		                       106.7, 2111.45, 3700000,5.6);
	// Skapar ett Person-objekt (köparen)
	Person p1 = new Person("Bertil Nyström","710519-4578");
	// Skapar ett Person-objekt (säljaren)
	Person p2 = new Person("Sarah Björk", "531002-3647");
	// Sätt ett slutpris på bostadsrätten
	b.sättSlutpris(3970000);
	// Sätter köparen
	b.sättKöpare(p1);
	// Sätter säljaren
	b.sättSäljare(p2);
	
	// Kontrollerar om säljaren är samma person
	Std.out.print("Skriv in säljarens namn: ");
	salesman = Std.in.readLine ();
	
//	b.geSlutInfo(salesman, säljaren);
	b.geSlutInfo(salesman);
	}

}
BromsMedlem sedan sep. 2002188 inlägg
#7

det enda som behöver fixas är alltså att

säljaren = p2.avLäsNamn();

skall integreras i Bostad.java, och anropet av jämförelsen av säljaren sparad i objektet, samt säljaren inmatad från tangentbordet skall anropas via

b.geSlutInfo(salesman);

dvs, jämförelsen mellan namnen skall göras i Bostad.java, och inte i Main.java som i det allra första exemplet i tråden..

Hur anropar jag p2.avLäsNamn(); i Bostad.java??? och får jämförelsen av namnen integrerad i bostad...

enda som skall vara i slutet på Main.java är ju:

	// Kontrollerar om säljaren är samma person
	Std.out.print("Skriv in säljarens namn: ");
	salesman = Std.in.readLine ();
	
	b.geSlutInfo(salesman);
BromsMedlem sedan sep. 2002188 inlägg
#8

har äntligen äntligen fått skiten ur världen :D tog dock sina timmar...

140 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)