Minimum et maximum de l'algorithme à l'aide d'un tableau en Java
J'étais en train d'écrire une simple max et min de la méthode, comme je l'ai écrit je ne peux pas d'aider le sentiment qu'il ne devrait pas être si compliqué....peut-être Im mal?
Mon maximum code fonctionne comme ça, excuse mon pauvre pseudo-code:
Remplir un tableau de 10 nombres aléatoires.
Créer un max de variable initialisée à 0, car 0 est le plus bas max.
Comparer chaque élément contre le max
Si l'élément est supérieur à max, remplacez la valeur de max avec l'élément en question
Je n'aime pas le fait que j'ai initialiser le max à 0, je pense que cela pourrait être une meilleure façon que de cela?
Mon min code fonctionne de la même sauf que j'ai:
Comparer mon min est inférieur à l'élément de tableau.
Si l'élément est inférieur à remplacer min.
Ce que je n'aime vraiment pas à ce sujet est que je dois initialiser mon min au maximum de nombre aléatoire, dans ce cas, 50.
Mes questions sont les suivantes:
Est-il une meilleure façon de le faire?
Est-il un moyen plus efficace d'écrire ce code?
import java.util.Random;
public class Main {
public static void main(String[] args) {
//Declare min and max
int max=0;
int min;
//Array of 10 spaces
int[] ar=new int[10];
//fill an array with random numbers between 0 and 50
for(int i=0;i<10;i++)
{
ar[i]=new Random().nextInt(50);
}
//Test max algorithm
//loop trough elements in array
for(int i=0;i<10;i++)
{
//max is set to 0, there should always be a maximum of 0
//If there isnt 0 will be the maximum
//If element is greater then max
//replace max with that element
if(ar[i]>max)
{
max=ar[i];
}
}
System.out.println("The max is "+ max);
//Test min
//Initialising min to maximum Random number possible?
min=50;
for(int i=0;i<10;i++)
{
if(ar[i]<min){
min=ar[i];
}
}
System.out.println("The min is "+min);
}
}
Arrays.sort(ar)
puis prendre le premier et le dernier élément.Vous pourriez commencer par regrouper les max et min de calcul dans la même boucle.
Le tri serait plus lent: O(n log(n)) vs O(n) pour le min/max de la boucle.
OriginalL'auteur user1016950 | 2012-10-20
Vous devez vous connecter pour publier un commentaire.
Ok, alors que d'autres étaient déjà poster des réponses, j'ai pris le temps de modifier votre code dans quelque chose que je pense que ce serait plus utilisable.
min(5,3,8,4,1)
.La plupart de ce qui a été déjà mentionné par d'autres, mais de toute façon, voici le code:
Une remarque Pour vérifier que votre code fonctionne, vous devez imprimer les articles de - beaucoup le mieux serait d'écrire un texte simple de test de l'unité.
Oui, c'est certainement vrai.
Je pense qu'un meilleur moyen consiste à attribuer le premier numéro de la matrice comme maximum ou minimum, plutôt que de prendre la panique de trouver le plus grand ou le plus petit de ce type de données.
Nope. La façon qu'il le fait, il est plus idiomatique/ plus clair.
OriginalL'auteur Axel
Vous pouvez toujours prendre le premier élément du tableau (c'est à dire
numbers[0]
) comme la valeur initiale et le début de la boucle à partir du deuxième élément.min = Integer.MAX_VALUE
etmax = Integer.MIN_VALUE
.Si le tableau est vide, le maximum de ce tableau vide est
Integer.MIN_VALUE
? Qui n'est pas bonne pour moi 😉 je voudrais ajouter un personnalisable, mais obligatoire valeur par défaut, ou lever une exception.OriginalL'auteur Alexander
Quelques conseils:
Initialiser
min
avec le premier élément et le début de la seconde:...ou commencer à partir de:
cette approche est préférable si vous attendez de votre tableau peut être vide.
Utilisation
Math.min
pour éviter condition explicite (certains peuvent dire que c'est plus lent tout de même):OriginalL'auteur Tomasz Nurkiewicz
Initialiser max 0 & min à 50 ne fonctionne pas lorsque le nombre de changement. De plus approprié est:
1. initialiser le premier élément du tableau.
2. Utilisation
length
au lieu d'une constante.Même pour min:
OriginalL'auteur P.P.
OriginalL'auteur Pankaj
OriginalL'auteur anonymous
En fonction de si vous voulez le max et le min-fonctions dans la même méthode, vous devez également considérer le type de retour.
Jusqu'à présent la plupart des suggestions ont gardé les deux sens c'est bien de retourner un int. Cependant, si vous mettez le max et le min-fonctions dans un findLargestDifference-la méthode que vous auriez à revenir d'un long voir que la plus grande différence entre tous les chiffres donnés dans le tableau int peut être la taille de 2 ints. Il faudrait aussi se débarrasser de l'avoir à boucle sur le tableau int deux fois.
En outre, je recommande d'écrire des tests unitaires pour les coins et les bords des cas, au lieu de l'impression dans la principale méthode. Il permet de tester votre logique au début, quand la mise en œuvre et donc souvent rend le code plus propre.
Voir l'exemple de code ci-dessous.
OriginalL'auteur IsolaMonte