Java: Jobba med arrayer?

Tråden skapades och har fått 8 svar. Det senaste inlägget skrevs .
1

Jag håller på med en a-kurs i java och har förmodligen gått för långt i en övninguppgift men men.
Jag har dykt på arrayer och har lite svårt att få till det...
Titta på koden och berätta vad det är för fel, tack gärna.

import static javax.swing.JOptionPane.*;
import java.util.*;

public class hopp {

	public static void main(String[] arg) {
		Double judgePoints;
		int[] judgePointsArray = new int[6];
		String inJumpGrade = showInputDialog("Hoppets svårgihetsgrad?");
		int jumpGrade = Integer.parseInt(inJumpGrade);
		
		int d;
		for(d=1; d<8; d++) {
			String inJudge = showInputDialog("Domarpoäng "+d+":");
			int judge = Integer.parseInt(inJudge);
			judgePointsArray[d] = judge;
		}
		Arrays.sort(judgePointsArray, Collections.reverseOrder());
		
		int r;
		for(r=3; r<judgePointsArray.length; r++) {
			int sumJudgePoints =+ judgePointsArray[r];
			showMessageDialog(null, sumJudgePoints);			
			//judgePoints = (sumJudgePoints/5);
		}
		showMessageDialog(null, "Slutresultat: "+judgePoints);
	}

}

Du får alltså en ArrayIndexOutOfBoundsException för värdet "6", för så lång är inte din vektor vid namn judgePointsArray. Den är bara 6 lång, alltså slutindex 5.
Vektorn måste vara av längd 8 som minst för att hantera index 7, vilket är det mesta ditt program kommer till.

Sen kanske det är lite skumt att deklarera variabeln sumJudgePoints i varje varv i andra for-loopen. Lägg hellre deklarationen av den utanför loopen, och låt sedan loopen summera alla poängen med +=, såhär:

int sumJudgePoints = 0;
for(....) {
    sumJudgePoints += judgePointsArray[r];
    ...
}
Double judgePoints = sumJudgePoints / 5;  
 // Fast du har ju 7 olika poäng i vektorn??

Det felet får jag inte än i alla fall.
Jag får fel redan vid kompeleringen, det hann jag inte hann skriva innan, här har du det felet:

hopp.java:18: cannot find symbol
symbol  : method sort(int[],java.util.Comparator<java.lang.Object>)
location: class java.util.Arrays
		Arrays.sort(judgePointsArray, Collections.reverseOrder());
                      ^
1 error

Har jag glömt importera något som behövs?

Det handlar om simhopp, 7 domare resultatet för hoppet är medelvärdet av de fem som låg mellan den högsta och lägsta poängen. Därav 5.

Senast redigerat 2007-11-18 18:48
  • Medlem
  • Stockholm
  • 2007-11-18 20:19

du har antagligen redan listat ut det men int är en primitv, inget object i java.

i din for loop börjar du dessutom på 1, men arrayer i java är noll indexerade.

Ursprungligen av mry:

du har antagligen redan listat ut det men int är en primitv, inget object i java.

Japp, det är problemet! Arrays.sort() tar som argument en lista av objekt, samt en Comparator (till exempel Comparator.reverseOrder()).

Det enklaste borde vara att spara indatan med hjälp av wrapper-klassen Integer; alltså:

Integer[] judgePointsArray = new Integer[8];

Sen kan ju konstruktorn till objektet Integer hantera en String, så när du får ett värde från dialogrutan, så blir det:

judgePointsArray[d] = new Integer(showInputDialog("Domarpoäng "+d+":"));

Där du alltså skapar en ny instans av klassen Intger, genom Integer(String s). Den nya Integer har det värde som parsas från input-strängen.

  • Medlem
  • Mölndal
  • 2007-11-18 21:09

Och nollindexerad betyder att första elementet har index noll.

Det jag funderar på är varför poängen ska sorteras över huvud taget. Klart, det är väl en bra övning.

Tack för all hjälp!
Nu ska jag bara förstå vad ni säger.
Att arrayer är nollindexerade är jag fullt medveten om och erkänner villigt mitt fel i den första for-satsen. Men inte den andra vilket jag snart ska förklara.

Anledningen till att poängen ska sorteras är min lösning på problemet.
Som sagt uppgiften handlar om att räkna fram simhoppspoängen för ett hopp.
Poängen blir medelvärdet av domarnas poäng förutom det högsta och det lägsta därför sorterar jag arrayen och börjar senare i den sorterade arrayen i for-loop 2.
Kanske har jag tänkt fel i min lösning.

Jag ska titta på vad ni säger och jag kommer säkerligen återkomma.

  • Medlem
  • Stockholm
  • 2007-11-19 21:34

ah det var en bra ide att sortera arrayen!

Det finns säkert lika många "korrekta" lösningar som det finns utvecklare men jag hade nog funderat i nedan banor:

Dock behöver du inte arrayer, bara för att räkna ut medelvärdet. Nu vet jag inte vad syftet med labben är, men du klarar dig bra med ett par if satser.

Det du behöver göra är att hålla reda på max och min värdena. Sedan jämför du bara med inmatade värden och kollar om de skulle kunna ersätta dina nuvarande max och/eller min värden. Totalen är ju alla betyg ihopsummerat minus max och min värdena.

Tänk även på att du måste kunna hantera noll värden (betyget 0) samt nog även flyttal för halva poäng.

Sist behöver du multiplicera svårighetsgraden och sedan skall du eventuellt avrunda.

Flyttal och avrundning är "roliga" kapitel i java världen...

Lycka till!

1
Bevaka tråden