Java: Integer division de la tour
Je suis en train d'écrire un programme qui demande à l'utilisateur d'entrer le montant total de la étages dans un hôtel, le nombre de chambres à chaque étage, et le nombre de occupé chambres. À la fin, il doit afficher le nombre total de chambres, nombre total de chambres occupées et le pourcentage de chambres occupées. Je vais avoir des problèmes avec l'affichage du pourcentage de chambres occupées. Je suis l'aide de tous les int des nombres.
C'est l'équation que j'ai mis:
roomsOccPercentage = (totalRoomsOccupied * 100) / totalRooms ;
Quand je soumettre le programme à mon professeur de Java runner il affiche:
65 % of the Rooms are occupied.
Mais l'un de mes professeur fourni en sortie la réponse de 66% au lieu de sorte que le programme n'accepte pas mon fichier.
Personne ne sait ce que je fais mal? Est-il un DecimalFormat erreur?
Edit: Voici le code entier
import java.util.Scanner;
import java.text.DecimalFormat;
public class hw7_1 {
public static void main(String[]args) {
Scanner keyboard = new Scanner(System.in);
DecimalFormat formatter = new DecimalFormat("#0");
int totalFloors;
int totalRooms = 0;
int numFloors;
int numRooms;
int roomsOccupied;
int totalRoomsOccupied = 0;
int roomsOccPercentage = 0;
//prompting users to input # of floors, no inputs below 1 floor
do {
System.out.println("Please enter the number of floors in the hotel: ");
numFloors = keyboard.nextInt();
if (numFloors < 1) {
System.out.println("You have entered an invalid number of floors. ");
}
}
while (numFloors < 1);
//for loops on how many rooms on each hotel floors
for ( int Floors = 1; Floors <= numFloors; Floors++) {
if (Floors == 13 ) {
continue;
}
do {
System.out.println("Please enter the number of rooms on floor #: " + Floors );
numRooms = keyboard.nextInt();
if (numRooms < 10) {
System.out.println("You have entered an invalid number of rooms. ");
}
} while (numRooms < 10);
System.out.println("Please enter the number of occupied rooms on floor #: " + Floors);
roomsOccupied = keyboard.nextInt();
totalRooms = totalRooms + numRooms;
totalRoomsOccupied = totalRoomsOccupied + roomsOccupied;
roomsOccPercentage = (totalRoomsOccupied * 100) / totalRooms ;
}
System.out.println("\nThe hotel has a total of " + totalRooms + " rooms.");
System.out.println(totalRoomsOccupied + " of the rooms are occupied.");
System.out.println(formatter.format(roomsOccPercentage) + "% of the rooms are occupied.");
}
}
roomsOccPercentage = ((float)totalRoomsOccupied * 100) / totalRooms;
commentaire devrait résoudre votre problème.
Le truc, c'est que nous n'avons pas à apprendre cette méthode dans la classe encore. Est-il plus du débutant?
Vous n'avez pas utilisé le
double
ou float
type de données?nous avons. Je voulais dire nous n'avons généralement pas utilisé l'opérateur de coulée sur nos calculs encore. Je ne sais à partir de la lecture sur la programmation. Les Mathématiques.ceil semblait avoir travaillé, mais QUE nous n'avons pas allé plus en classe encore à tous. Merci!!!!
OriginalL'auteur Sam Young | 2013-11-18
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour faire de votre
roomsOccPercentage
une double première.et puis, exprimés soit des opérandes afin d'éviter une division entière.
Vous pouvez soit utiliser un cast explicite comme
(double)totalRoomsOccupied
ou tout simplement faire100
comme100.0
qui est un nombre à virgule flottante, ce qui rend la division de trop, un flottant et non pas une division entière.OriginalL'auteur SudoRahul
Noter que java joue avec sa propre règle, Vous devez leur obéir. Décidez si vous voulez de plancher ou de plafond de la suite, Suivre l'exemple donné ci-dessous.
J'espère que vous pouvez maintenant trouver java intéressant
OriginalL'auteur surya
a /b + a % b /(b/2)
??1 diviser par 3, il devrait être 0
1 /3 + 1 % 3 /(3/2) = 0 + 1 /1 = 1
qui n'est PAS 0Je recommande ce:
OriginalL'auteur user5119722
Il n'y a rien qui s'appelle arrondi au nombre entier divisant car il va prendre la partie entière uniquement à diviser le résultat. utilisation
double
de la valeur pour vos calculs et l'utilisationMath.round()
.OriginalL'auteur Ruchira Gayan Ranaweera
Heres un moyen simple de round up:
Si ce n'est pas déjà un entier, il ajoute un, et il jette vers le bas. Si c'est un entier, il le lance comme un entier.
OriginalL'auteur abrahimladha
Donné
a/b
, si vous le souhaitez arrondir à l'entier le plus proche, vous avez besoin pour ajouter 1 si le reste est la moitié ou plus de la moitié de b, donc:Fera l'affaire.
peut-être
a / b + (a % b) * 2 / b
, de cette façon, vous ne perdez pas de précision dans la division entière par 2OriginalL'auteur Matthew Mitchell
Si vous préférez aller en double pour faire une division d'entier qui arrondit, vous pouvez le faire. Si vous préférez ne pas, vous n'avez pas besoin, c'est juste une très légère peu difficile:
Essayons:
Cette affiche:
Si il n'y a pas de reste, comme dans 118 /2, vous obtenez le résultat normal. Dans d'autres cas, le résultat est arrondi vers le haut. Comment gérer les négatifs dénominateur et/ou diviseur est laissé comme exercice pour le lecteur.
À l'école, beaucoup d'entre nous ont appris que 65.5 et plus doit être arrondi à 66, où, comme les numéros entre 65.0 et de 65,5 doit être arrondi à la baisse à 65 ans. Si vous voulez cela, la méthode est un peu différente:
Démonstration:
De sortie:
OriginalL'auteur Ole V.V.