Just nu i M3-nätverket
Gå till innehåll

Java-problem. Flera klass-filer (skall hänvisa till varandra).


m00nie

Rekommendera Poster

Nu har jag stött på rejäla problem igen. Jag har skall ha tre filer, varav två är klassfiler och en är main-filen som skall köra de andra två.

 

TestDice.java - klassfil

SpecialDice.java - klassfil

Uppgift4.java - main

 

Uppgiften är att man skall skapa en klass TestDice som innehåller en metod

public static int[] roll(SpecialDice theDice, int nrRoll)

som får en tärning theDice av klassen SpecialDice, kastar denna tärning nrRoll antal gånger och returnerar ett heltalsfält som innehåller hur många gånger var och en av valörerna på tärningen kommit upp.

Skriv också en main-metod som använder metoden roll för att göra 100 kast med en 6-sidig tärning och skriver ut resultatet av dessa kast.

 

Problemet är att jag inte tror att jag hänvisar mellan filerna på rätt sätt (framförallt mellan klassfilerna).

Det är frustrerande när man har suttit hela dagen utan att få till det på rätt sätt. Uppgiften som sådan känns ju inte så extremt komplicerad. Men det blir den efter ett tag om inte annat.

 

Mina filer ser ut som följer:

 

[b]TestDice.java[/b]

public class TestDice {
   public static int[] roll(SpecialDice theDice, int nrRoll){
       theDice = new SpecialDice(6);
       int ones = 0;
       int twos = 0;
       int threes = 0;
       int fours = 0;
       int fives = 0;
       int sixes = 0;
       int[]test = new int[theDice.getSides()];
           for (int n=0;n<nrRoll;n++){           
               theDice.roll();
               if (theDice.getDots()==1){
                   ones = ones + 1;
                   test[0] = ones;
               }
               else if (theDice.getDots()==2){
                   twos = twos + 1;
                   test[1] = twos;
               }
               else if (theDice.getDots()==3){
                   threes = threes + 1;
                   test[2] = threes;
               }
               else if (theDice.getDots()==4){
                   fours = fours + 1;
                   test[3] = fours;
               }
               else if (theDice.getDots()==5){
                   fives = fives + 1;
                   test[4] = fives;
               }
               else if (theDice.getDots()==6){
                   sixes = sixes + 1;
                   test[5] = sixes;
               }

       }//for
         return test;
   }


} //TestDice


[b]SpecialDice.java[/b]

import java.util.*;
public class SpecialDice {
   private int dots;
   private int sides;
   private int turns = 0;
   private static Random diceRandom  = new Random();

   public SpecialDice(int sides) {
       this.sides = sides;
       dots = sides;
   }
   public SpecialDice(int sides, int dots) {
       this.sides = sides;

       if (dots > sides || dots < 1)
           this.dots = sides;
       else
           this.dots = dots;
   }//konstruktor

   public int getSides() {
       return sides;
   }

   public int getDots() {
       return dots;
   } //getDots

   public int getTurns() {
       return turns;
   } //getTurns

   public void roll() {
       dots = diceRandom.nextInt(sides) + 1;
       turns = turns + 1;
   } //roll

} //SpecialDice


[b]Uppgift4.java[/b]

public class Uppgift4 {
   public static void main(String[] arg) {
       int kast = 100;
       int[]lista = new int[kast];
       TestDice theDice = new roll(new SpecialDice(6),kast);
       theDice.roll(6,kast);

       System.out.println(theDice);

   }//main
}//Uppgift4

Länk till kommentar
Dela på andra webbplatser

Nu har jag stött på rejäla problem igen. Jag har skall ha tre filer, varav två är klassfiler och en är main-filen som skall köra de andra två.

 

TestDice.java - klassfil

SpecialDice.java - klassfil

Uppgift4.java - main

 

Uppgiften är att man skall skapa en klass TestDice som innehåller en metod

public static int[] roll(SpecialDice theDice, int nrRoll)

som får en tärning theDice av klassen SpecialDice, kastar denna tärning nrRoll antal gånger och returnerar ett heltalsfält som innehåller hur många gånger var och en av valörerna på tärningen kommit upp.

Skriv också en main-metod som använder metoden roll för att göra 100 kast med en 6-sidig tärning och skriver ut resultatet av dessa kast.

 

Problemet är att jag inte tror att jag hänvisar mellan filerna på rätt sätt (framförallt mellan klassfilerna).

Det är frustrerande när man har suttit hela dagen utan att få till det på rätt sätt. Uppgiften som sådan känns ju inte så extremt komplicerad. Men det blir den efter ett tag om inte annat.

 

Mina filer ser ut som följer:

 

[b]TestDice.java[/b]

public class TestDice {
public static int[] roll(SpecialDice theDice, int nrRoll){
theDice = new SpecialDice(6);
int ones = 0;
int twos = 0;
int threes = 0;
int fours = 0;
int fives = 0;
int sixes = 0;
int[]test = new int[theDice.getSides()];
for (int n=0;n<nrRoll;n++){ 
theDice.roll();
if (theDice.getDots()==1){
ones = ones + 1;
test[0] = ones;
}
else if (theDice.getDots()==2){
twos = twos + 1;
test[1] = twos;
}
else if (theDice.getDots()==3){
threes = threes + 1;
test[2] = threes;
}
else if (theDice.getDots()==4){
fours = fours + 1;
test[3] = fours;
}
else if (theDice.getDots()==5){
fives = fives + 1;
test[4] = fives;
}
else if (theDice.getDots()==6){
sixes = sixes + 1;
test[5] = sixes;
}

}//for
return test;
}


} //TestDice


[b]SpecialDice.java[/b]

import java.util.*;
public class SpecialDice {
private int dots;
private int sides;
private int turns = 0;
private static Random diceRandom = new Random();

public SpecialDice(int sides) {
this.sides = sides;
dots = sides;
}
public SpecialDice(int sides, int dots) {
this.sides = sides;

if (dots > sides || dots < 1)
this.dots = sides;
else
this.dots = dots;
}//konstruktor

public int getSides() {
return sides;
}

public int getDots() {
return dots;
} //getDots

public int getTurns() {
return turns;
} //getTurns

public void roll() {
dots = diceRandom.nextInt(sides) + 1;
turns = turns + 1;
} //roll

} //SpecialDice


[b]Uppgift4.java[/b]

public class Uppgift4 {
public static void main(String[] arg) {
int kast = 100;
int[]lista = new int[kast];
TestDice theDice = new roll(new SpecialDice(6),kast);
theDice.roll(6,kast);

System.out.println(theDice);

}//main
}//Uppgift4

 

Skriv om Uppgift4 enligt:

public class Uppgift4 {
public static void main(String[] arg) {
	int kast = 100;
	int[]lista = TestDice.roll(new SpecialDice(6),kast);

	for(int i = 0; i < lista.length; i++) { 
	System.out.println(lista[i]);
}

}//main
}//Uppgift4

 

Eftersom du i Uppgift4 skapar en SpecialDice och skickar in den till roll så behöver du inte skapa en ny SpecialDice i TestDice.roll.

Länk till kommentar
Dela på andra webbplatser

Dessa två är alltid lika:

ones = ones + 1;

test[0] = ones;

Då är det ju onödigt att ha båda två.

 

Vad händer med din kod om man byter ut 6 mot 7 i anropet (new SpecialDice(6),kast) ?

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...