2009-12-04, 18:02
  #1
Medlem
pirates avatar
Ja alla ni som vill börja programmera eller programmerar som nybörjare, ställ era frågor här så vi slipper alldeles för många trådar som behandlar samma ämne.
Citera
2009-12-06, 17:00
  #2
Medlem
pirates avatar
Får väl ta och börja frågorna själv då!

När man har en mousepressed-event så får man man med som parameter till funktionen ett MouseEvent.
Vad ska man göra med det och behöver man göra nåt med det överhuvudtaget?

Ex.
Kod:
private void exBtnMousePressed(java.awt.event.MouseEvent evt) {                                    
        
System.out.println("OK");


Så som det är nu så när jag trycker på knappen så får jag ut OK som output.
Citera
2009-12-06, 17:40
  #3
Medlem
du måste inte göra något alls. Men det är användbart i vissa lägen, tex skulle du kunna skriva evt.getX() för att få X koordinaten för "klicket"
Citera
2009-12-07, 10:57
  #4
Bannlyst
Bra tråd!

Jag håller på och gör ett program som ska registrera hundar och sedan ska kunna lista ut dom beroende på vilken svanslängd dom har. Och skulle vara snällt om någon kunde hjälpa mig med ett litet problem.

Så här ser den delen av koden ut som inte vill fungera:

System.out.print("Minsta svanslängd? ");
int svans=Integer.parseInt(sc.nextLine());
for (int x=0; x<kennel.size(); x++)
if (svans < svansl)
//svansl är längden på just den hundens svans som användaren skriver in på ett annat ställe i koden
System.out.println(kennel.get(x));

Problemet är att om flera hundar är registrerade så skrivs antingen alla hundarna man registrerat i arraylisten ut eller ingen av dom (beroende på vad värdet i int svans är). Hur gör man för att den ska skriva ut endast de hundar som har en svanslängd som är över värdet man skriver in på int svans?

Tack på förhand!
Citera
2009-12-07, 11:12
  #5
Medlem
Spejnars avatar
Citat:
Ursprungligen postat av Busmumrik
Bra tråd!

Jag håller på och gör ett program som ska registrera hundar och sedan ska kunna lista ut dom beroende på vilken svanslängd dom har. Och skulle vara snällt om någon kunde hjälpa mig med ett litet problem.

Så här ser den delen av koden ut som inte vill fungera:

Kod:
System.out.print("Minsta svanslängd? ");
int svans=sc.NextInt());
for (
int x=0x<kennel.size(); x++){
    
//svansl är längden på just den hundens svans som användaren skriver in på ett annat ställe i koden
    
if (svans svansl)
        
System.out.println(kennel.get(x));


Problemet är att om flera hundar är registrerade så skrivs antingen alla hundarna man registrerat i arraylisten ut eller ingen av dom (beroende på vad värdet i int svans är). Hur gör man för att den ska skriva ut endast de hundar som har en svanslängd som är över värdet man skriver in på int svans?

Tack på förhand!

Det första jag ser är att du typecastar din input av någon anledning, använd istället Scanner.NextInt().
http://java.sun.com/javase/6/docs/ap...xtInt%28int%29

Det är svårt att se var felet ligger om du inte lägger med hela koden. Använd förresten taggar så man kan läsa din kod också.

edit: Du har inga brackets runt din for-sats.
Citera
2009-12-07, 12:09
  #6
Medlem
Tooners avatar
Citat:
Ursprungligen postat av Busmumrik
System.out.print("Minsta svanslängd? ");
int svans=Integer.parseInt(sc.nextLine());
for (int x=0; x<kennel.size(); x++)
if (svans < svansl)
//svansl är längden på just den hundens svans som användaren skriver in på ett annat ställe i koden
System.out.println(kennel.get(x));

Jag förstår inte for-satsen och if-satsen. Du loopar genom en lista "kennel", för varje element jämför du "svans" (som användaren just matat in) med "svansl" som användaren också matat in.

Det kommer ju ge samma resultat för varje kennel.

Matar användaren in 4 för svans och tidigare matat in 5 för svansl, så kommer if-satsen alltid vara sann och du kommer skriva ut kennel.get(x) för alla kennlar. Om tvärtom kommer du inte skriva ut någonting.

Om jag nu gissar hur du tänkt dig så innehåller "kennel" en massa hundar, då skulle det antagligen se ut så här istället:

Kod:
for (int x=0x<kennel.size(); x++){
    if (
svans kennel.get(x).getSvansl())
        
System.out.println(kennel.get(x).getHundNamn());


Jag antar alltså här att "kennel" innehåller objekt av en klass Hund som har en metod getSvansl() som returnerar längden på just den hunden. Sedan jämförs den längden med "minsta svanslängd" som just matats in.

"Hund" innehåller i det här exemplet också getHundNamn() som returnerar namnet på hunden (detta kan istället lösas med att överlagra toString-metoden, men det kanske är överkurs).

Citat:
Ursprungligen postat av Spejnar
Du har inga brackets runt din for-sats.

De behövs inte i det här fallet eftersom det bara är ett uttryck i den. (däremot är if-satsen i sig som sagt fel)

Det går till och med att skriva på en rad:

Kod:
for (int x=0x<kennel.size(); x++) if (svans kennel.get(x).getSvansl()) System.out.println(kennel.get(x).getHundNamn()); 

Fungerar utmärkt utan brackets, däremot är det inte att rekommendera för att det är svårt att lägga till kod om man skulle vilja.
__________________
Senast redigerad av Tooner 2009-12-07 kl. 12:19.
Citera
2009-12-07, 16:01
  #7
Bannlyst
Tack för två riktigt bra svar!

Citat:
Ursprungligen postat av Spejnar
Det första jag ser är att du typecastar din input av någon anledning, använd istället Scanner.NextInt().
http://java.sun.com/javase/6/docs/ap...xtInt%28int%29

Det är svårt att se var felet ligger om du inte lägger med hela koden. Använd förresten taggar så man kan läsa din kod också.

edit: Du har inga brackets runt din for-sats.

Jo kanske borde använt mig av Scanner.nexInt() istället. Vad är föresten fördelen med det?

Tänkte inte på att det fanns taggar tyvärr men sak tänka på det i fortsättningen. Koden är ganska lång eftersom programmet kan göra fler saker än det jag nämnde, men kändes onödigt att skriva resten eftersom det fungerar.

Och till Tooner: Ser nu också vad som var felet och inte så konstigt att det blev så fel så som det blev :P

Tack för koden du gav, den fungerade alldeles utmärkt och blev exakt som jag ville ha nu Testade att använda toString-metoden och blev ännu bättre då fler attribut än namnet på hunden kunde skrivas ut på varenda rad

Nu är det dock ett litet problem kvar. Svanslängden i programmet räknas ut genom att ta åldern*vikten/10 på varje hund. Problemet är att när den svanslängden skrivs ut så avrundas den till närmaste heltal trots att jag satt svansl som en double i Hund.java.

Har skivit formeln:
Kod:
svansl = (alder*vikt)/10

Vad är det jag har glömt?
Citera
2009-12-07, 17:59
  #8
Medlem
Spejnars avatar
Citat:
Ursprungligen postat av Busmumrik
Jo kanske borde använt mig av Scanner.nexInt() istället. Vad är föresten fördelen med det?
Finns ingen anledning att typcasta om man absolut inte måste(och det är väldigt sällan).

Citat:
Ursprungligen postat av Busmumrik
Nu är det dock ett litet problem kvar. Svanslängden i programmet räknas ut genom att ta åldern*vikten/10 på varje hund. Problemet är att när den svanslängden skrivs ut så avrundas den till närmaste heltal trots att jag satt svansl som en double i Hund.java.

Har skivit formeln:
Kod:
svansl = (alder*vikt)/10

Vad är det jag har glömt?

Minst en av variablerna ålder eller vikt måste vara en double för att ditt resultat inte ska avrundas.
Citera
2009-12-07, 18:33
  #9
Bannlyst
Citat:
Ursprungligen postat av Spejnar
Minst en av variablerna ålder eller vikt måste vara en double för att ditt resultat inte ska avrundas.

Tack! Nu fungerar programmet som det ska
Citera
2009-12-10, 21:55
  #10
Medlem
10 första primtalen

Hej jag är nybörjare på Java och uppskattar konstruktiv kritik. Hur som helst jag försöker ta fram de 10 första primtalen med ett enkelt program, men jag lyckas inte någon vidare. Kan någon vara snäll och titta på vad jag har gjort för fel?

Jag antar att det har och göra med att min for loop är konstruerad på ett sånt sätt att alla talen från 2 till primtal-1 inte testas, utan att bara tal 2 testas. Hur ska jag lösa det?

Tacksam för svar



Citera
2009-12-10, 21:57
  #11
Medlem
AquaRegias avatar
Citat:
Ursprungligen postat av azgular
Hej jag är nybörjare på Java och uppskattar konstruktiv kritik. Hur som helst jag försöker ta fram de 10 första primtalen med ett enkelt program, men jag lyckas inte någon vidare. Kan någon vara snäll och titta på vad jag har gjort för fel?

Jag antar att det har och göra med att min for loop är konstruerad på ett sånt sätt att alla talen från 2 till primtal-1 inte testas, utan att bara tal 2 testas. Hur ska jag lösa det?

Tacksam för svar




Ja, det är därför. Lös det genom att testa att dividera med alla (prim)tal upp till roten ur 'primtal'?
Citera
2009-12-10, 22:04
  #12
Medlem
Emerains avatar
problemet ligger i att oavsett om talet som testas är ett primtal så höjer du massa variablar

sen är ett tips att du bara behöver testa talen som är mindre än kvadratroten ur talet du vill kolla. dvs om du vill kolla x så behöver du bara kolla talen som är mindre än Math.sqrt(x)

sen kan du inne i din while-loop typ sätta en if-sats
Kod:
if( isPrime(number)
{
        
counter++;
        
System.out.println(number+" is a prime");

och sen ha en statisk funktion
boolean isPrime(int number);
där du testar om number är ett primtal, returnerar sant, annars falskt.

mitt tips iallafall. i isPrime kan du ha en loop som testar mellan x == 2 och x<=Math.sqrt(number) är jämnt delbart med number.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in