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

Permalänk

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??

Permalänk
Medlem

@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

Permalänk
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!

Permalänk
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?

Permalänk
Hedersmedlem
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.

Visa signatur

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

Permalänk
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!

Permalänk

hjölp klarar den fortfarande inte

Ursäkta, men jag har fått samma uppgift, men klarar fortfarande(med er hjälp) inte av uppgiften. Är någon villig att posta hela utsrkiften färdiglöst?

Permalänk
99:e percentilen
Skrivet av hjalpprogrammering0112:

Ursäkta, men jag har fått samma uppgift, men klarar fortfarande(med er hjälp) inte av uppgiften. Är någon villig att posta hela utsrkiften färdiglöst?

Nej. Detta forum är inte till för att dela färdiglösta skoluppgifter. Förutom att diskutera programmering brukar vi hjälpa folk som vill lära sig. Ofta sker lärandet med hjälp av skoluppgifter, och vi försöker då hjälpa personen att förstå. Vi postar inte bara en färdig lösning.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk

@Alling: okej, förlåt om jag gjort er upprörd. Men kunde ni isåfall vidar utveckla hur jag ska tänka för att lösa frågan. Jag förstår verkligen inte,

Permalänk
Medlem
Skrivet av hjalpprogrammering0112:

@Alling: okej, förlåt om jag gjort er upprörd. Men kunde ni isåfall vidar utveckla hur jag ska tänka för att lösa frågan. Jag förstår verkligen inte,

Du skriver ju inte ens vad du har problem med? Bara att du inte får det att fungera...
Utveckla mer vad det är som du tror felar

Visa signatur

CPU: I5 6600k @ 4.4ghz GPU: 1070 G1 MBD: Asus Ranger VIII PSU: Silver Power SP-SS500 RAM: HyperX Fury 16gb @ 2300mhz CHASSI: NZXT H440 White

Permalänk
99:e percentilen
Skrivet av hjalpprogrammering0112:

@Alling: okej, förlåt om jag gjort er upprörd.

Nej då, det är ingen fara så sett. Jag ville bara förklara hur det ligger till.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
Skrivet av hjalpprogrammering0112:

@Alling: okej, förlåt om jag gjort er upprörd. Men kunde ni isåfall vidar utveckla hur jag ska tänka för att lösa frågan. Jag förstår verkligen inte,

Det bästa sättet för dig att lösa uppgiften är att kartlägga vad som händer i koden rad för rad i exekveringsordning. Om du kan beskriva vad som händer vid utskrift och varför den ser ut såsom den gör kommer du ha betydligt lättare att begripa vad uppgiften går ut på

Skickades från m.sweclockers.com

Permalänk

package Kap14;

//Klassen korten anänds för att skapa 4 färer + 2st instansvariabler färg och valör
class Korten{
//Klassvariabler
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 52 st kort, 52 objekt av klassen korten
class Kortbunt {
Korten [] bunten = new Korten [52];
int antal;
}

public class Exempelgenomgång {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Kortbunt kb = new Kortbunt();
int f, i, val;
for(f= Korten.KLÖVER, i=0; f <=Korten.SPADER; f++){
for(val = 1; val<=13;val++,i++) {
kb.bunten[i]= new Korten();
kb.bunten[i].färg = f;
kb.bunten[i].valör = val;
kb.antal++;

}
}

//slumpa färg och valör, skriv ut
System.out.print(kb.bunten[1 + (int) (Math.random()* 52) ].färg + " ");
System.out.println(kb.bunten[1 + (int) (Math.random()* 13) ].valör);
System.out.flush();
}

Så här ser min uppgift ut, den är precis densamma, och jag läste dem tidigare svaren men, alltså är det endast utskriften jag ska ändra, och isåfall hur går jag tillväga?

Permalänk

@hjalpprogrammering0112: t.ex jag vet inte ens hur stor uppgiften är? Bör jag endast lägga till en rad eller en helt ny if-sats? Och vad ska jag börja med att tänka på, hur ska jag starta?

Permalänk

@hjalpprogrammering0112: {

if( kb.bunten[1 + (int) (Math.random()* 52) ].färg == 1)
System.out.println("Klöver" + kb.bunten[1 + (int) (Math.random()* 13) ].valör);
else
if(kb.bunten[1 + (int) (Math.random()* 52) ].färg == 2)
System.out.println("Ruter" +kb.bunten[1 + (int) (Math.random()* 13) ].valör );
else
if( kb.bunten[1 + (int) (Math.random()* 52) ].färg == 3)
System.out.println("Hjärter" + kb.bunten[1 + (int) (Math.random()* 13) ].valör);
else
if( kb.bunten[1 + (int) (Math.random()* 52) ].färg == 4)
System.out.println("Spader" +kb.bunten[1 + (int) (Math.random()* 13) ].valör);

System.out.flush();
}
Såhär försökte jag modifiera utskriften, men det blir fel när jag kör, vad är felet? finns de tnågotenklare sätt att lösa detta?

Permalänk
Medlem

@hjalpprogrammering0112: Problemet med din kod är att du slumpar fram ett kort, kollar om färgen är 1 och i så fall skriver du ut Klöver etc. Om färgen inte är 1 så slumpar du fram ett nytt kort, kollar om färgen på det är 2 och skriver i så fall ut Ruter, o.s.v. Din kod kommer alltså bara skriva ut något i ~68% av fallen om jag räknat rätt.

I själva utskriften så slumpar du sen fram ytterligare ett nytt kort, så valören som skrivs ut hör inte till kortet du kollat färgen på. I de fall där du faktiskt får en utskrift så kommer alltså färgen vara för ett kort, medan valören är för ett annat.

Vad du troligtvis vill göra är att slumpa fram ett kort, och sen använda det kortet överallt i if-satsen istället för att slumpa fram nya kort överallt. Och istället för en if-sats så kan du med fördel använda en switch-sats istället, en if-sats fungerar men det blir mer kod.

Sen är din array-indexering fel eftersom du lägger till 1 till det slumpade värdet. Det första elementet i en array har index 0 i Java, men du använder istället 1. D.v.s. du kommer ibland försöka komma åt det 53:e elementet i din array, vilket kommer resultera i att programmet kraschar.

Permalänk

@perost: oh okej, Tack!