Z_AGo Skrevet 17. november 2008 Del Skrevet 17. november 2008 Jeg har en string jeg skal bruke den og trenger å importere den in i flere klasser. men jeg får det ikke til public class HybelHus { Scanner input = new Scanner(System.in); boolean runde = true; int valg; public String leilighet() { return leilighet; } det ovenstående er starten på en klasse mens dette som står under en starten på main. public class Main { public String leilighet [][]; /** * @param args the command line arguments */ public static void main(String[] args) { HybelHus hybelhus = new HybelHus(); hybelhus.run(); jeg vil hente ut leilighet fra main og flytte den over til hybelhus. dette får jeg ikke til og det irriterer meg! hva har jeg gjort galt? Lenke til kommentar
gunnard Skrevet 17. november 2008 Del Skrevet 17. november 2008 (endret) En statisk metode, som main-metoden er, kan direkte* kun kalle på statiske metoder og bruke statiske variabler. Med andre ord, dersom det er arrayen "public String leilighet [][];" som du ønsker å aksessere i main-metoden må du gjøre den statisk, altså skrive: public static String leilighet [][]; * Indirekte, altså via et objekt, som for eksempel "hybelhus" over, kan en statisk metode også bruke ikke-statiske metoder og variabler. EDIT: Omformulert. Endret 17. november 2008 av gunnard Lenke til kommentar
Z_AGo Skrevet 17. november 2008 Forfatter Del Skrevet 17. november 2008 (endret) Full edit: Ok, smuud fikk det til fant leilighet i alle klassene! men nå kom problemet at når jeg har hentet den så blir alle stedene jeg har brukt "leilighet"-array understreket med rød linje... ser ikke ut som om de finner leilighet Endret 17. november 2008 av Z_AGo Lenke til kommentar
gunnard Skrevet 17. november 2008 Del Skrevet 17. november 2008 Kan du utdype det litt? Legg gjerne ved hele kode i kodeblokker ( ) og StackTrace dersom du får en feil under kjøring. Lenke til kommentar
Z_AGo Skrevet 17. november 2008 Forfatter Del Skrevet 17. november 2008 (endret) public class Main { public static String leilighet [][] ={{"1a",null,null,null,null},{"1b",null,null,null,null},{"1c",null,null,null,null},{"1d",null,null,null,null},{"1e",null,null,null,null},{"2a",null,null,null,null},{"2b",null,null,null,null},{"2c",null,null,null,null},{"2d",null,null,null,null},{"2e",null,null,null,null},{"3a",null,null,null,null},{"3b",null,null,null,null},{"3c",null,null,null,null},{"3d",null,null,null,null},{"3e",null,null,null,null}}; /** * @param args the command line arguments */ public static void main(String[] args) { HybelHus hybelhus = new HybelHus(); hybelhus.run(); } } public class Hybel { public String leilighet() { return leilighet(); } int x = 1; boolean ledig; public void run(){ for (int y = 0; y < 15; y++) { if (leilighet[y][x] == null) { ledig = true; System.out.println(leilighet[y][0]); System.out.println("Leilighet ledig"); } else { ledig = false; System.out.println(leilighet[y][0]); System.out.println("opptatt"); } } } } alle det står leilighet på nå er det en rød strek under. Da tok jeg med 2 klasser. main og hybel. håper det hjelper deg med å hjelpe meg! =) hehe Edit: Fjernet et punktum mellom return og leilighet(); Endret 17. november 2008 av Z_AGo Lenke til kommentar
gunnard Skrevet 17. november 2008 Del Skrevet 17. november 2008 (endret) Det gjør det Dersom du vil bruke en statisk variabel i en annen klasse (som du har tilgang til, f.eks. at den er "public" som her), gjør du dette ved å skrive: <klassenavn>.<variabelnavn> For eksempel, for metoden: public String leilighet() { return.leilighet(); } som jeg regner med skal returnere selve leilighets-arrayen, skal dette skrives som: public String leilighet() { return Main.leilighet; } mens for eksempel i testen: if (leilighet[y][x] == null) skal det stå: if(Main.leilighet[y][x] == null) Forøvrig vil nok mange reagere på kodestilen her, d.v.s. ha en statisk array i en klasse, bruke den og t.o.m. returnere den i/via metoder i en annen klasse. Om du bryr deg om dette er en annen sak EDIT: Dersom du fjernet "." i leilighet-metoden vil den metoden nå bare kalle seg selv i det uendelige, noe som tvilsomt er det du vil. Endret 17. november 2008 av gunnard Lenke til kommentar
Z_AGo Skrevet 17. november 2008 Forfatter Del Skrevet 17. november 2008 public String leilighet() { return.Main.leilighet; } når jeg skriver det får jeg illegal start of expression.. sorry at jeg må ha det inn med t-skje her. hehe.. jeg skal endre på hele koden tenker jeg... må bare få den til å fungere først.. slik at jeg vet hva jeg kan gjøre for noe.. men har snart deadline. så må har noe som fungerer! Lenke til kommentar
gunnard Skrevet 17. november 2008 Del Skrevet 17. november 2008 Hvis du (igjen) fjerne "." etter "return" (som aldri skal ha noe "." etter seg) så fungerer det Lenke til kommentar
Z_AGo Skrevet 17. november 2008 Forfatter Del Skrevet 17. november 2008 Dette setter jeg virkelig pris på! =) Men fikk det fortsatt ikke tl å fungere. nå får jeg denne feilmeldingen: found : java.lang.String[][] required: java.lang.String return Main.leilighet; public String leilighet() { return Main.leilighet; } Lenke til kommentar
Z_AGo Skrevet 17. november 2008 Forfatter Del Skrevet 17. november 2008 (endret) Jeg fikk det til! =D smuuud thnx for hjelpen Dette satte jeg virkelig pris på! Endret 17. november 2008 av Z_AGo Lenke til kommentar
gunnard Skrevet 17. november 2008 Del Skrevet 17. november 2008 (endret) Bare hyggelig Er bare en liten skrivefeil. Som du ser så finner den en String[][], altså en dobbeltarray av String's, mens den vil ha en String, siden "String" står som returtype i metodedeklarasjonen. Du må dermed skifte returtypen slik: public String[][] leilighet() { return Main.leilighet; } For det er det som metoden skal sant, returnere hele dobbeltarray med alle leilighetene? EDIT: Du fant ut av det selv ser jeg Endret 17. november 2008 av gunnard Lenke til kommentar
Z_AGo Skrevet 18. november 2008 Forfatter Del Skrevet 18. november 2008 Ok, nå sitter jeg med et annet problem her. Hvordan kan jeg sjekke om det brukeren har skrevet inn er numeric? Lenke til kommentar
pgdx Skrevet 18. november 2008 Del Skrevet 18. november 2008 (endret) Ok, nå sitter jeg med et annet problem her. Hvordan kan jeg sjekke om det brukeren har skrevet inn er numeric?Tja, basically ... Du gjør ikke det. int val; boolean accepted = false; while (!accepted) { String s = yourWayOfFetchingUserInput(); try { val = Integer.parseInt(s); accepted = true; } catch (NumberFormatException e) { System.out.println("Not a number, please enter a number or else."); } } return val; Endret 18. november 2008 av pgdx Lenke til kommentar
x871kx6167ss7 Skrevet 19. november 2008 Del Skrevet 19. november 2008 (endret) To andre måter: int val; boolean accepted = false; while (!accepted) { String s = yourWayOfFetchingUserInput(); if (s.matches("-?[0-9]+")) { // La til -? for å ta negative tall også. val = Integer.parseInt(s); accepted = true; } else { System.out.println("Not a number"); } } eller dersom du bruker scanner: int val; boolean accepted = false; Scanner sc = new Scanner(System.in); while (!accepted) { if (sc.hasNextInt()) { val = sc.nextInt(); accepted = true; } else { sc.next(); System.out.println("Ugyldig valg"); } } Endret 19. november 2008 av Blackslash Lenke til kommentar
pgdx Skrevet 19. november 2008 Del Skrevet 19. november 2008 Ja, begge de to er bedre enn min måte, spesielt den første av de. Nice, Backslash. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå