Inlägg

Inlägg som Tazavoo har skrivit i forumet
Av Tazavoo

Kan inte säga att det ena är bättre än det andra, de påverkar egentligen bara hur din kod ser ut.

Från och med Java 8 finns det ett nytt sätt att skriva de anonyma klasserna på, nämligen lambda-uttryck:

bnStone.addActionListener(e -> System.out.println("Hej!"));

Alternativ

btnStone.addActionListener(e -> { System.out.println("Hej 1"); System.out.println("Hej 2"); });

Av Tazavoo

Det är väl klart att den inte hittar ditt cal objekt, då du deklarerar det innanför constructorn? Hour, minute och second deklarerar du utanför, varför inte kalendern?

Lägg en private Calendar cal före konstruktorn så borde det lösa sig (och ta bort Calendar framför cal inne i konstruktorn).

Edit: Du saknar även ett semikolon i din update-metod, och så måste du uppdatera hour, minute och second i din update-metod.

Av Tazavoo

Hej igen!

En liten bi-fråga först, har du dina klasser i olika filer? Annars kan du inte ha din import mellan klasserna, men du har dem säkert i olika.
Dessutom skulle jag föredra att ha klassen med main-metoden public, då main-metoden i så fall hittas automatiskt då filen körs.

Hur som helst, över till ditt problem.

Lite Googlande på problemet visar att scan.nextInt() inte 'konsumerar' radbrytning. I stället läses den av nästa scan.nextLine(), som konsumerar den och inte låter användaren mata in något.

Tänk dej att skannern har ett matbord framför sig. Du säger åt den att äta nästa siffra, och matar in siffran 9 följt av enter. Den äter glatt upp 9:an, men radbrytningen efter 9:an blir kvar på bordet. Du säger åt den att äta nästa radbrytning, men eftersom den redan har en kvar på bordet äter den upp den och du har aldrig möjligheten att mata in något nytt.

Lösning? Du kan efter en scan.nextInt() ha en scan.nextLine() som du inte sparar, utan ändast "äter upp" den extra radbrytningen.
Ett annat alternativ är att läsa in alla värden med scan.nextLine(), och konvertera dem till siffror o.dyl. efteråt.

Av Tazavoo

Kul att kunna hjälp till.

Av Tazavoo

Sitter på föreläsning så hinner inte testa kod, men kan ge några alternativ me otestad kod

Först räkna priset i samband med utskrift

public static void printAllBooksInfo(){ int sum = 0; for(int i = 0; i<allBooks.size(); i++){ System.out.println("Bok " + (i+1) + "\nTitel: " + allBooks.get(i).title + "\nFörfattare: " + allBooks.get(i).author + "\nISBN: " + allBooks.get(i).isbn +"\nPris: " + allBooks.get(i).price + " kr\n"); // Lägg till priset till summan sum += allBooks.get(i).price; } // Skriv ut summan efter for-loopen System.out.println("Böckerna kostar totalt " + sum + " kronor."); }

Eller med enhanced for-loop

public static void printAllBooksInfo(){ int sum = 0; int counter = 1; for(Book book: allBooks) { System.out.println("Bok " + counter + "\nTitel: " + book.title + "\nFörfattare: " + book.author + "\nISBN: " + book.isbn + "\nPris: " + book.price + "kr\n"); sum += book.price; } // Skriv ut summan efter for-loopen System.out.println("Böckerna kostar totalt " + sum + " kronor."); }

Att söka efter ett objekt är ganska lätt, att söka efter ett objekt med en viss egenskap är lite lite svårare. Det lättaste sättet är helt enkelt att loopa igenom:

public void printPrice(String title) { for(Book b: allBooks) { if(b.title.equals(title)) System.out.println("Boken " + b.title + " kostar " + b.price + " kronor."); } }

Kom ihåg att du kan jämföra primitiva typer (int, boolean, float o.s.v.) med ==, men objekt skall oftast jämföras med equals (String är ett objekt, därför börjar String med stor bokstav). Så pris skulle istället vara if(b.price == price).

Av Tazavoo

Ursäkta, gjorde en liten ändring i mitt tidigare inlägg.

Okej, då måste du fundera ut hur du vill mata in alla böcker du vill köpa?

Av Tazavoo

Vad vill du att händer då du köper en eller flera böcker, och hur matar du in vilken bok du vill köpa?

Väljer du bok enligt index i listan?

Book.buyBook(3);

Enligt referens?

Book book1 = new Book(blabla); book1.buy();

Enligt titel/isbn?

Book.buyBook(123543);

Vad ska sedan hända? Skall boken försvinna ur listan? Skall du få ett sammanlagt pris? Du får lov att specificera lite

Av Tazavoo

Skrev ett litet program du kan köra om du vill, kom ihåg att filen måste heta "Test" då klassen "Test" är public, eller så får du döpa om den. Koden nedanför är testad och fungerar.

import java.util.ArrayList; public class Test { public static void main(String[] args) { // Skapa en bok som vi sparar referens till Book book1 = new Book("Män som hatar C++", "Steve Jobs", 1234567); /* * En till bok som vi inte sparar en referens till, men eftersom vi i konstruktorn för klassen * Book sparar den i listan allBooks kan vi ändå skriva ut den med printAllBooksInfo() */ new Book("Sagan om Windows", "Bill Gates", 13371337); // Skriv ut den första boken book1.printInfo(); // Skriv ut alla böcker Book.printAllBooksInfo(); } } class Book { static ArrayList<Book> allBooks = new ArrayList<Book>(); String title; String author; int isbn; public Book(String title, String author, int isbn) { this.title = title; this.author = author; this.isbn = isbn; allBooks.add(this); } public void printInfo() { System.out.println("Title: " + title + "\nAuthor: " + author + "\nISBN: " + isbn + "\n"); } public static void printAllBooksInfo() { for(int i = 0; i < allBooks.size(); i++) { System.out.println("Book " + (i+1) + ":\nTitle: " + allBooks.get(i).title + "\nAuthor: " + allBooks.get(i).author + "\nISBN: " + allBooks.get(i).isbn + "\n"); } } }

Av Tazavoo

Två kommentarer:

Jag tror inte du behöver counter, du kan ju ersätta den med (i + 1):

for(int i =0; i <names.size(); i++){ System.out.println("Författare Bok " + (i+1) + ": " + names.get(i)); }

Sedan kan du ju lägga bägge utskrifter i samma for-loop (såvida du vet att names och isbn har samma längd)

for(int i =0; i <names.size(); i++){ System.out.println("Författare Bok " + (i+1) + ": " + names.get(i) + ", ISBN: " + isbn.get(i)); }

Av Tazavoo

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.

Av Tazavoo

Dina code-taggar verkar inte fungera, du skall ha en [CODE] i början och en [./CODE] i slutet (utan punkt).

Jag är inte helt säker på vad du vill göra med din kod, du har en klass Writer som du använder för två helt olika saker. Dels verkar den representera en författare(?) med ett namn och ett ISBN, dels verkar den representera en samling författare.

Du får lov att precicera va du vill göra med klassen.

Av Tazavoo

Tvekade om jag skulle köpa en SP3:a i mars-april eller vänta på SP4. Valet föll på en lätt begagnad SP3, har inte ångrat det hittills och i och med att den här åtminstone inte var fläktlös så ångrar jag det inte nu heller. Kanske överväger att köpa ett nytt typecover, det nuvarande har urusel trackpad, dåliga tangenter och är relativt högljutt.

Av Tazavoo

Allting är gjort i Photoshop eller liknande program, visst, men dels finns det väldigt mycket att lära sig i form av funktioner, dels kräver det en viss artistiskt förmåga. Jag tror de flesta Twitch/YouTube-användare som har dylika avatars, banners o.dyl. har fått bilderna gjorda av någon annan.

Så hur hittar man dessa personer? Ett alternativ är att hitta en kanal med en avatar/banner som du gilla och fråga ägaren vem som gjort dem. Alternativt så är Google din vän.

Av Tazavoo

Bortsett från punkt 2 är det väl åtminstone ganska klart: laga en metod som tar två parametrar (ingångssumma, räntesats) och skriver ut resultatet. Det hade du väl under kontroll.

Sedan tycker jag det är lite oklart vilka metodanrop som avses. I och med exemplet säger att räntesatsen varierar från 2% till 9% så blir det ju 8 anrop, så antagligen det som avses. Dock är System.out.print()/println(), scan.nextInt() osv. också metodanrop.

Av Tazavoo
Skrivet av försvarsmakten:

http://www.blocket.se/malmo/VARSTING_MONSTER_I7_SPELDATOR_Nyp...

Jag vill bara slå han, inte för att priset är super-duper fel kanske men såsom texten och rubriken är skriven.

10 GB RAM, undrar i vilken uppsättning han kör det.

Citat:

ATI RAdeon 5780, den här grafikkortet finns inte hos vem som helst inte alla får tag i en sån här, svårt hittad.

Sannolikt då grafikkortet inte finns.

Av Tazavoo

@mhj: Inte särskilt konstigt om du har koll på var respektive stacks topp ligger.

Av Tazavoo
Skrivet av ReadyO:

@NoToes:

borde man då inte få kompileringsfel? För att det går att exekvera pgmet utan "" och jag ser ingen skillnad.

Om man skriver

char c = 'a'; String s = c;

?

Det bör ge kompileringsfel.

Av Tazavoo

En String-variabel kan inte tilldelas ett char-värde. Däremot tillåter Java att du slår ihop en String med en char. String s = "" + c slår helt enkelt ihop en tom sträng med en char, och resultatet blir en sträng med samma innehåll som c.

Ett annat alternativ är String s = Character.toString(c);

Edit: Inget nytt som perost inte redan skrivit, men låter det stå kvar.

Av Tazavoo
Skrivet av gwin:

Förstår inte hur du ens kan tänka tanken att lära dig java. Jag ryser... Men c++ eller c# kanskte inte fungerar på IOS?

OnT
Om ni kan tänka er att inte skriva spelmotorn själva så kan jag varmt rekomendera Unity 5 free. Unity är en färdig spelmotor, vilket innebär att det finns system implementerade för importering av assets, level design och rendering osv samt massa bra verktyg. Går dessutomlätt att expandera. Programmeringen eller egentligen scriptingen sköts i c#, javascript(unityscript) eller Boo.

Förutom att ni sparar tid på att inte skriva motorn själv, blir det nog enklare och snyggare med Unity och spelet ni gör kan portas till allt från IOS, Android, Windows till xbox osv.

http://unity3d.com/

Vad är det som är så hemskt med Java?

Av Tazavoo
Skrivet av Dunder:

Nja, for-loopen användes inte alls. Han försökte med while-loopen istället om du läser hans andra inlägg, vilket är en bra ide om man ska göra del två också.

I hans första inlägg, jo. I det andra inlägget som jag citerade använde han en for-loop, men hade problemet att den bara körde sista varvet. Detta berodde alltså på ett litet semi-kolon, som gjorde att koden som borde ha körts inom for-loopen endast kördes efteråt.

Jag valde att kommentera detta då koden i det inlägget annars såg bra ut, och jag inte själv genast noterade det lilla felet.