behöver hjälp med programmeringsuppgifter(två inte så stora)

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

behöver hjälp med programmeringsuppgifter(två inte så stora)

Hej jag är elev som läser i gymnasiet
Fredag är kursens slut och han ska sätta betyg, därför innan fredag jag måste göra om och lämna in uppgifterna som jag fick F på betyg.
Några jag har gjort, men finns några som jag förstår inte. Kan ni hjälpa mig?

Uppgift1.
Genomgången idag behandlade skapandet av en kortbunt. Vid utskriften så var en 1 färgen klöver. Modifiera utskriften så att den blir på formen Klöver 5. Byt alltså ut 1-4 mot Klöver, Ruter, Hjärter och Spader.

Den är kod som vi gjorde i klassen tillsammans

package Kapitel14; class Kort{ public static final int KLÖVER =1; public static final int RUTER =2; public static final int HJÄRTER =3; public static final int SPADER =4; //INSTANSVARIABLER int färg, valör; } //klassen kortbunt används för att skapa 52st kort class kortbunt{ Kort [] bunten = new Kort[52]; int antal; } public class Kapitel14_1 { public static void main(String[] args) { kortbunt kb= new kortbunt(); int f, i = 0, val; for(f = Kort.KLÖVER; f<=Kort.SPADER; f++){ for (val=1; val <= 13; val++, i++){ kb.bunten[i] = new Kort(); kb.bunten[i].färg = f; kb.bunten[i].valör = val; kb.antal++; } } System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].färg + " " ); System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].valör + " " ); } }

OCh den är kod som jag gjorde fel

package Kapitel14; class Kort2{ public static final int KLÖVER =5; public static final int RUTER =4; public static final int HJÄRTER =3; public static final int SPADER =2; //INSTANSVARIABLER int färg, valör; } //klassen kortbunt används för att skapa 52st kort class kortbunt2{ Kort [] bunten = new Kort[52]; int antal; } public class Kapitel14_inlämningsuppgift { public static void main(String[] args) { kortbunt2 kb= new kortbunt2(); int f, i = 0, val; for(f = Kort.KLÖVER; f<=Kort.SPADER; f++){ for (val=1; val <= 13; val++, i++){ kb.bunten[i] = new Kort(); kb.bunten[i].färg = f; kb.bunten[i].valör = val; kb.antal++; } } System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].färg + " " ); System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].valör + " " ); } }

Du kan se att där finns nästan inget skillnad och det är eftersom jag har inte riktigt förstått uppgiften. Min lärare har kommenterat att jag använde felaktig klass kortbunt, när jag tänkte att där är fel med klass Kort2. Hur ska man göra med kortbunt?

Uppgift 2.
På sid 366 i boken, finns ex CirkelProg2 som beräknar arean och omkretsen av en cirkel.

Uppgiften blir nu att modifiera programmet så att arean och omkretsen av en ellips beräknas. Det räcker med en approximativ formel för att beräkna omkretsen av ellipsen.

Uppgift i boken:

import javax.swing.*; import java.util.*; public class CirkelProg{ public static void main (String[] args) { Cirkel c1 = new Cirkel(), c2 = new Cirkel(); String s = JOptionPane.showInputDialog ("Den första cirkelns radie?"); Scanner sc = new Scanner(s); c1.sättRadie(sc.nextDouble()); s = JOptionPane.showInputDialog ("Den andra cirkelns radie?"); sc = new Scanner (s); c2.sättRadie(sc.nextDouble()); JOptionPane.showMessageDialog(null, String.format("Den första cirkeln har arean %.3f" + "och omkretsen %.3\n" + "Den andra cirkeln har arean %.3f " + " och omkretsen %.3\f", c1.area(), c1.omkr(), c2.area(), c2.omkr()));

Koden som jag gjorde:

package kapitel15uppgift; import javax.swing.*; import java.util.*; public class Kapitel15_hemuppgift2 { @SuppressWarnings("MalformedFormatString") public static void main(String[] arg) { Kapitel15_hemuppgift e1 = new Kapitel15_hemuppgift(); e1.area(); e1.omkrets(); String s = JOptionPane.showInputDialog("Sida1?"); double x = Double.parseDouble(s); String s1 = JOptionPane.showInputDialog("Sida2?"); double y = Double.parseDouble(s1); e1.sättRadie(x, y); JOptionPane.showMessageDialog(null, String.format("Ellipsens area är %.3f" +" och omkretsen är %3.f\n" + "Den andra ellipsens area är %.3f" + "och omkretsen är %3.f", e1.area(), e1.omkrets())); } class Kapitel15_hemuppgift { double a, b; double sida1, sida2; double omkrets, area; public void sättRadie (double x, double y){ if(x>0) sida1 = x; else throw new IllegalArgumentException("Talet är negativ"); if(y>0) sida2= y; else throw new IllegalArgumentException("Talet är negativ"); } public double area() { return Math.PI * sida1 * sida2; } public double omkrets () { return Math.PI*Math.sqrt(2*Math.pow(a, 2)+2*Math.pow(b, 2)); } }

Det visar felutskrift
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '3'
at java.util.Formatter.checkText(Formatter.java:2579)
at java.util.Formatter.parse(Formatter.java:2555)
at java.util.Formatter.format(Formatter.java:2501)
at java.util.Formatter.format(Formatter.java:2455)
at java.lang.String.format(String.java:2940)
at kapitel15uppgift.Kapitel15_hemuppgift2.main(Kapitel15_hemuppgift2.java:41)
C:\Users\(Mitt namn)\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 4 seconds)

och lärare kommenterade :
e1.area(), e1.omkrets()
Inga sådana metoder finns i objekten e1 och e2
Men varför är det så om jag har redan räknat area och omkrets??

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Nov 2009

@ProgrammeringElev
Postar i två omgångar.

"Modifiera utskriften så att den blir på formen Klöver 5."

Är det så enkelt som att ändra vad den skiver ut?

Din lärares påpekan på fel kortbunt beror på

public class Kapitel14_inlämningsuppgift { public static void main(String[] args) { kortbunt2 kb= new kortbunt2(); int f, i = 0, val; for(f = Kort.KLÖVER; f<=Kort.SPADER; f++){ for (val=1; val <= 13; val++, i++){ kb.bunten[i] = new Kort(); kb.bunten[i].färg = f; kb.bunten[i].valör = val; kb.antal++; } }

Då du i din kod har döpt den klassen till Kort2. Samma fel finns även i kortbunt2.

Till uppgiften: Modifiera utskriften så den blir på formen "Klöver 5." Alltså färg + value.
Du vet att klöver = 1, ruter = 2, hjärter = 3. spader = 4 (om du använder värdena från klassens kod).

System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].färg + " " ); System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].valör + " " );

Detta kommer ju som sagt att skriva ut färgen (siffran) för ett slumpmässigt kort, och sedan värdet på ett annat (antagligen, 1/52 chans att den skriver ut samma kort)

Som jag förstår det vill du skriva ut färg + värde för ett kort.
Uppgiften i sig ligger i att förstå att den skriver ut olika kort vid utskriften eftersom den använder sig av random metoden två gånger.

Kort utskriftsKort = kb.bunten[1 + (int)(Math.random() * 52)] /*Nu har vi ett slumpmässigt kort, hur går vi tillväga för att skriva ut på formen färg(bokstäver) + värde?*/

Hur tror du vi kan gå tillväga för att omvandla 1,2,3,4 till dess respektive värde?
Fortsätt på uppgiften och fråga mer om du kör fast. Har inte kört detta i någon kompilator så vet inte om allt stämmer

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av NoToes:

@ProgrammeringElev
Postar i två omgångar.

"Modifiera utskriften så att den blir på formen Klöver 5."

Är det så enkelt som att ändra vad den skiver ut?

Din lärares påpekan på fel kortbunt beror på

public class Kapitel14_inlämningsuppgift { public static void main(String[] args) { kortbunt2 kb= new kortbunt2(); int f, i = 0, val; for(f = Kort.KLÖVER; f<=Kort.SPADER; f++){ for (val=1; val <= 13; val++, i++){ kb.bunten[i] = new Kort(); kb.bunten[i].färg = f; kb.bunten[i].valör = val; kb.antal++; } }

Då du i din kod har döpt den klassen till Kort2. Samma fel finns även i kortbunt2.

Till uppgiften: Modifiera utskriften så den blir på formen "Klöver 5." Alltså färg + value.
Du vet att klöver = 1, ruter = 2, hjärter = 3. spader = 4 (om du använder värdena från klassens kod).

System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].färg + " " ); System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].valör + " " );

Detta kommer ju som sagt att skriva ut färgen (siffran) för ett slumpmässigt kort, och sedan värdet på ett annat (antagligen, 1/52 chans att den skriver ut samma kort)

Som jag förstår det vill du skriva ut färg + värde för ett kort.
Uppgiften i sig ligger i att förstå att den skriver ut olika kort vid utskriften eftersom den använder sig av random metoden två gånger.

Kort utskriftsKort = kb.bunten[1 + (int)(Math.random() * 52)] /*Nu har vi ett slumpmässigt kort, hur går vi tillväga för att skriva ut på formen färg(bokstäver) + värde?*/

Hur tror du vi kan gå tillväga för att omvandla 1,2,3,4 till dess respektive värde?
Fortsätt på uppgiften och fråga mer om du kör fast. Har inte kört detta i någon kompilator så vet inte om allt stämmer

Tack så mycket för snäll svar!! Ska prova om ditt respons stämmer på kvällen!

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av NoToes:

@ProgrammeringElev
Postar i två omgångar.

"Modifiera utskriften så att den blir på formen Klöver 5."

Är det så enkelt som att ändra vad den skiver ut?

Din lärares påpekan på fel kortbunt beror på

public class Kapitel14_inlämningsuppgift { public static void main(String[] args) { kortbunt2 kb= new kortbunt2(); int f, i = 0, val; for(f = Kort.KLÖVER; f<=Kort.SPADER; f++){ for (val=1; val <= 13; val++, i++){ kb.bunten[i] = new Kort(); kb.bunten[i].färg = f; kb.bunten[i].valör = val; kb.antal++; } }

Då du i din kod har döpt den klassen till Kort2. Samma fel finns även i kortbunt2.

Till uppgiften: Modifiera utskriften så den blir på formen "Klöver 5." Alltså färg + value.
Du vet att klöver = 1, ruter = 2, hjärter = 3. spader = 4 (om du använder värdena från klassens kod).

System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].färg + " " ); System.out.println(kb.bunten[1 + (int)(Math.random() * 52)].valör + " " );

Detta kommer ju som sagt att skriva ut färgen (siffran) för ett slumpmässigt kort, och sedan värdet på ett annat (antagligen, 1/52 chans att den skriver ut samma kort)

Som jag förstår det vill du skriva ut färg + värde för ett kort.
Uppgiften i sig ligger i att förstå att den skriver ut olika kort vid utskriften eftersom den använder sig av random metoden två gånger.

Kort utskriftsKort = kb.bunten[1 + (int)(Math.random() * 52)] /*Nu har vi ett slumpmässigt kort, hur går vi tillväga för att skriva ut på formen färg(bokstäver) + värde?*/

Hur tror du vi kan gå tillväga för att omvandla 1,2,3,4 till dess respektive värde?
Fortsätt på uppgiften och fråga mer om du kör fast. Har inte kört detta i någon kompilator så vet inte om allt stämmer

Har läst din snäll svar, men jag har ingen aning vad skulle jag göra..

for(f = Kort.KLÖVER; f<=Kort.SPADER; f++){

Du har skrivit att här finns fel, så tänkte jag att byta <= till > (eftersom Klöver blir 5 och andra blir 1~4) Men det gick inte bra. Och, varför då min lärare har skrivit felaktig klass kortbunt om for-sats finns i main-metod? Jag har bara två dagar kvar, så kan du förklara mig "super enkelt" vad var fel och vad skulle man göra för att fixa problem om du kan?

Trädvy Permalänk
Moderator
Registrerad
Aug 2007
Skrivet av ProgrammeringElev:

Har läst din snäll svar, men jag har ingen aning vad skulle jag göra..

for(f = Kort.KLÖVER; f<=Kort.SPADER; f++){

Du har skrivit att här finns fel, så tänkte jag att byta <= till > (eftersom Klöver blir 5 och andra blir 1~4) Men det gick inte bra. Och, varför då min lärare har skrivit felaktig klass kortbunt om for-sats finns i main-metod? Jag har bara två dagar kvar, så kan du förklara mig "super enkelt" vad var fel och vad skulle man göra för att fixa problem om du kan?

Du har fullständigt missuppfattat uppgiften. Du ska inte sätta klöver till 5 utan du ska skriva ut Klöver med bokstäver när kortet är ett klöver och inte siffran som motsvarar klöver. Gå tillbaka till koden som ni skrev gemensamt och lös uppgiften därifrån, dvs

Citat:

Vid utskriften så var en 1 färgen klöver. Modifiera utskriften så att den blir på formen Klöver 5. Byt alltså ut 1-4 mot Klöver, Ruter, Hjärter och Spader.

Det är alltså bara utskriften som du behöver pilla på.

Edit: Kan ge dig lite mer hjälp. Du kan modifiera utskriften på två sätt. Antingen går du in på raden där den sker och skriver ut olika saker beroende på värdet, eller så går du in i klassen Kort och låter den returnera en färg som text istället. Den senare lösningen skulle jag säga är mer korrekt när man utvecklar objektorienterat, men er kod ser ganska enkel ut så jag blir inte klok på om ni kommit så långt ännu.

Använd gilla för att markera nyttiga inlägg!

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av giplet:

Du har fullständigt missuppfattat uppgiften. Du ska inte sätta klöver till 5 utan du ska skriva ut Klöver med bokstäver när kortet är ett klöver och inte siffran som motsvarar klöver. Gå tillbaka till koden som ni skrev gemensamt och lös uppgiften därifrån, dvs Det är alltså bara utskriften som du behöver pilla på.

Edit: Kan ge dig lite mer hjälp. Du kan modifiera utskriften på två sätt. Antingen går du in på raden där den sker och skriver ut olika saker beroende på värdet, eller så går du in i klassen Kort och låter den returnera en färg som text istället. Den senare lösningen skulle jag säga är mer korrekt när man utvecklar objektorienterat, men er kod ser ganska enkel ut så jag blir inte klok på om ni kommit så långt ännu.

Tack så mycket!