Just nu i M3-nätverket
Jump to content

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


m00nie

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...