damien
Enthusiast
Thread Starter
- Mitglied seit
- 08.12.2003
- Beiträge
- 3.955
- Laptop
- MBP16 BTO
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS Crosshair VIII Formula
- Kühler
- cuplex kryos NEXT, kryographics NEXT RTX 3090 Strix
- Speicher
- Crucial Ballistix DDR4-3600 CL16 32GB (2x16GB)
- Grafikprozessor
- ASUS ROG-STRIX-RTX3090-O24G-GAMING
- Display
- Samsung G9
- SSD
- 2x1TB Samsung 980 PRO
- Gehäuse
- PHANTEKS Enthoo 719 Tempered Glass
- Netzteil
- be quiet! STRAIGHT POWER P11 PLATINUM 1200W
- Keyboard
- Logitech G710
- Mouse
- Razer Mamba
- Betriebssystem
- Windows 10
Hi,
könnte mir jemand bitte erklären, warum die Variable "arrayPointer" den Wert 1
hat, nachdem man die Methode "calculateCombinations(int arrayPointer, int input)" mit calculateCombinations(4,5); aufgerufen hat ? Nach dem das Ding durchläuft hat arrayPointer den Wert 0. Dann werden die Werte ausgegeben und die Methode wird rekursiv aufgerufen aber dann hat arrayPointer den Wert 1 und ich verstehe einfach nicht warum ! Wäre für Hilfe sehr dankbar !
könnte mir jemand bitte erklären, warum die Variable "arrayPointer" den Wert 1
hat, nachdem man die Methode "calculateCombinations(int arrayPointer, int input)" mit calculateCombinations(4,5); aufgerufen hat ? Nach dem das Ding durchläuft hat arrayPointer den Wert 0. Dann werden die Werte ausgegeben und die Methode wird rekursiv aufgerufen aber dann hat arrayPointer den Wert 1 und ich verstehe einfach nicht warum ! Wäre für Hilfe sehr dankbar !
Code:
using System;
namespace Hausaufgabe_1
{
//Diese Klasse soll globale Variablen "simulieren"
public static class GlobalMoneyChange
{
//Es wird ein Array erstellt, das die gueltigen Muenzen enthaelt
public static int[] arrayOfValidMoney = { 1, 2, 5, 10, 50 };
/*2 Variablen, die den Anfang und das Ende des Arrays darstellen
*zum besseren Rechnen und um einer ArrayIndexOutOfBoundsException vorzubeugen
*/
public static int aovmMin = 0;
public static int aovmMax = 4;
//Ein temproraeres Array der Groesse arrayOfValidMoney zum Rechnen
public static int[] arrayOfCalc = new int[5];
//Ein Counter, der die gesamten Wechselkombinationen zaehlt
public static int combinationCounter = 0;
}
class ChangeMoney
{
static void Main()
{
//Das Menue wird gestartet
printMenu();
}
static void printMenu()
{
//Das Menue wird ausgegeben
Console.WriteLine();
Console.WriteLine("Willkommen zum Geldwechselprogramm");
Console.WriteLine();
Console.WriteLine("Es sind die Muenzen 1, 2, 5, 10 und 50 verfuegbar");
Console.WriteLine("Geben Sie bitte den zu wechselnden Betrag ein: ");
Console.WriteLine("Die Eingabe von \"0\" beendet das Programm");
/*Die Eingabe von der Tastatur wird gestartet.
* Falls "0" eingegeben wird, dann wird das Programm beendet,
* andernfalls wird die Berechnung gestartet und alle Kombinationen
* werden ausgegeben.
*/
int input = keybInput();
if (input == 0)
{
Console.WriteLine("Programm beendet\n");
}
else
{
Console.Write("\n50 10 05 02 01\n");
Console.Write("-----------------\n");
calculateCombinations(GlobalMoneyChange.aovmMax, input);
printOnConsole();
Console.Write("-----------------");
Console.WriteLine("\nWechselkombinationen: " + GlobalMoneyChange.combinationCounter +"\n");
}
}
static int keybInput()
{
/* Die Eingabe erfolgt hier,
* falls eine Exception auftritt wird sie aufgefangen und behandelt.
* Der Benutzer wird zu einer erneuten Aufgabe aufgefordert
*/
int input;
try
{
input = Convert.ToInt32(Console.ReadLine());
return input;
}
catch
{
Console.WriteLine("Falsche Eingabe, bitte noch ein mal: ");
keybInput();
return 0;
}
}
static void calculateCombinations(int helpVar, int input)
{
if (helpVar == GlobalMoneyChange.aovmMin)
{
GlobalMoneyChange.arrayOfCalc[helpVar] = input;
printOnConsole();
GlobalMoneyChange.combinationCounter++;
}
else
{
int value = (input / GlobalMoneyChange.arrayOfValidMoney[helpVar]);
for (int counter = value; counter >= 0; counter--)
{
GlobalMoneyChange.arrayOfCalc[helpVar] = counter;
int inputRest = (input - (counter * GlobalMoneyChange.arrayOfValidMoney[helpVar]));
calculateCombinations(helpVar - 1, inputRest);
}
}
}
static void printOnConsole()
{
/* Hier erfolgt die Ausgabe. Es wird eine Schleife durchlaufen,
* in der jede Position des "temporaeren" Arrays ausgegeben wird
*/
for (int counter = GlobalMoneyChange.aovmMax; counter >= GlobalMoneyChange.aovmMin; counter--)
{
Console.Write(" " + GlobalMoneyChange.arrayOfCalc[counter] + " ");
}
Console.Write("\n");
}
}
}
Zuletzt bearbeitet: