Dies ist ein Programm zur Berechnung von Tipps. Ich brauche StundenArray [], um jede Zelle normal zu runden (Math.round() ist der beste Weg zu meinem Wissen). Das Problem ist, dass ich immer noch das unrounded hoursArray [] in totalHours [] speichern muss.Probleme beim Runden von Zellen in einem Array, während immer noch eine nicht gerundete Kopie davon angezeigt wird
Beispiel der gewünschten Ausgabe: Bob arbeitet 33,49 Stunden und Sara arbeitet 33,5 Stunden, die Spitzen für die Woche sind Stunden sollten bis 33 abrunden $ 200.00
So Bobs und Saras bis 34. aufrunden würde würden Sie in der Lage sein, den Unterschied in den Trinkgeldern zu sehen, wenn Sara mehr hat als Bob. Aber die Gesamtstunden für die Woche würden immer noch als 66,99 angezeigt werden.
Gerade jetzt dieses Programm ist alles andere es soll tun, ich kann einfach nicht herausfinden, wie jede Zelle von hoursArray abzurunden [] und halten immer noch die totalHours [] intakt.
Wie kann ich jede Zelle in hoursArray [] runden und die nicht gerundeten Werte weiterhin in totalHours [] speichern? Benutze ich einen Klon() von StundenArray? arrayCopy()? Ich bin fest ...
Der Problembereich markiert ist, und zwischen Linien 33 und 43. Math.floor() ist notwendig, weil ich das Programm brauche, um die Spitzen nach unten zu runden.
import java.util.Arrays;
import java.util.Scanner;
class Tips_Calculation2
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
float totalTips = 0;
float totalHours = 0;
System.out.print("How many employees worked for the week?: ");
int numberOfEmps = scan.nextInt();
System.out.println("\nEnter the names of all " + numberOfEmps + " employees");
String[] namesArray = new String[numberOfEmps];
for(int i = 0; i < numberOfEmps; i++)
{
namesArray[i] = scan.next();
}
System.out.println("\nEnter the amount of hours each person worked for the week: ");
//////////////////////////////////////////////////////**THIS IS WHERE IM STUCK**///////////////
int counter = 0;
float[] hoursArray = new float[namesArray.length];
for(int n = 0; n < namesArray.length; n++)
{
System.out.print(namesArray[n] + ": ");
hoursArray[n] = scan.nextFloat();
totalHours = totalHours + hoursArray[n];
counter++;
}
//////////////////////////////////////////////////////////////////////////////////
System.out.println("\nTotal hours: " + totalHours);
System.out.print("\nEnter the amount of money to be distributed as tips: $");
totalTips = scan.nextFloat();
System.out.println("---- OUTPUT ----");
System.out.println();
int x = 0;
for(int a = 0; a < namesArray.length; a++)
{
System.out.println(namesArray[a] + ": " + "$" + Math.floor(((hoursArray[x]/totalHours) * totalTips)));
x++;
System.out.println();
}
}
}
floor() wird immer auf die nächstkleinere Zahl abgerundet, die kleiner als Ihre Eingabe ist. Wenn Werte wie 33.5 auf 34 runden sollen, müssen Sie round() verwenden. Dein Problem ist in der Berechnung. Ich nehme an, du meinst so etwas: Math.round (StundenArray [x])/totalHours * totalTips. Dein Array totalHours ist davon nicht betroffen, solange du den gerundeten Wert nicht im angegebenen Array "cell" speicherst. – Supahupe
Ich muss den Math.floor() behalten, da er Tipps nach unten runden muss, habe ich dies in meiner Frage bearbeitet zukünftige Zuschauer. Danke für deinen Beitrag. –
Dann können Sie wie folgt vorgehen: Math.round (StundenArray [x])/totalHours * Math.floor (totalTips). Dies wird die Stunden am angegebenen Array-Index abrunden oder erhöhen, hat keinen Einfluss auf Ihre totalHours, die auf dem korrekten Wert bleiben und Ihren totalTip abrunden. – Supahupe