Java-code débutant, ajout de fractions


J'ai un projet d'école prévu la semaine prochaine et j'essaie de trouver le moyen de résoudre cette question. Le problème était de développer un programme qui ajoute les fractions entrées par l'utilisateur jusqu'à ce qu'il tape -1.

  • l'entrée sera toujours en paires et en nombres positifs.
  • Ne doit utiliser que: int, for,while, if, scanner (donc pas de pause ou de tableaux)
  • De préférence avec l'utilisation de GCD car il est nécessaire d'imprimer somme réduite des fractions

Donc mes questions sont les suivantes:

  • puis-je utiliser une boucle while jusqu'à ce que l'utilisateur tape -1 à l'aide du scanner?
  • Est-il correct d'utiliser le 'while' pour laisser un utilisateur taper ' infinite '(je suis conscient qu'il n'y en a pas en java) nombre de nombre jusqu'à la fin?
  • dans le code de la question précédente, j'ai écrit le facteur commun pour l'équation, comment écrire un facteur commun pour un nombre inconnu de les variables

Modifier: voici mon code, le problème est qu'il ne fonctionne que pour 4 * n numéros, j'ai besoin il pour pouvoir courir pour 2 * n nombres: (comme 2/4 ou 2/4+1/3+1/2)

Scanner myScanner=new Scanner(System.in);
        int a;
        int b;
        int c;
        int d;
        int m = a*d + b*c;
        int n = b*d;
        int r = m%n;

        while((a = myScanner.nextInt()) != -1)
        {
            b = myScanner.nextInt();
            c = myScanner.nextInt();
            d = myScanner.nextInt(); 
            while (r != 0) {
                m=n;
                n=r; 
                r = m%n;
            }
            m = (a*d + b*c)/n;
            n = (b*d)/n;

            System.out.println(m);
            System.out.println(n);

        }

}
Author: phflack, 2017-11-01

1 answers

A.

Il est possible de continuer à lire l'entrée d'un scanner jusqu'à ce qu'un message défini (dans ce cas, des paires de nombres jusqu'à ce que -1 soit entré)

Scanner scanner = new Scanner(System.in);
int num1;
int num2;

while((num1 = scanner.nextInt()) != -1)
{
    num2 = scanner.nextInt();
    //do stuff with num1 and num2
}

B.

Le but de A. est d'autoriser des quantités variables d'entrée de l'utilisateur, donc à moins que vous n'ayez une raison pour une limite dure, il devrait en théorie prendre une entrée infinie


C.

Au lieu d'essayer de calculer le facteur commun avant d'avoir des nombres, il est plus facile de calculer le facteur commun lorsque vous obtenez les nombres

int newNumerator = numerator1 * denominator2 + numerator2 * denominator1;
int newDenominator = denominator1 * denominator2;

Suivi du numérateur et du dénominateur actuels, mise à jour à mesure que vous obtenez plus de paires

Cela peut alors avoir A. lui être appliqué pour une entrée infinie

Scanner scanner = new Scanner(System.in);
int numerator = 0;
int denominator = 0;
int tempNumer = 0;
int tempDenom = 0;

if((numerator = scanner.nextInt()) != -1)
{
    denominator = scanner.nextInt();
    while((tempNumer = scanner.nextInt()) != -1)
    {
        tempDenom = scanner.nextInt();
        numerator = numerator * tempDenom + tempNumer * denominator;
        denominator = denominator * tempDenom;
    }
}
 1
Author: phflack, 2017-11-01 19:03:11