» Poradna » Programy

Rada s kódem - C#

 |   |  Microsoft Windows 8.1 Chrome 40.0.2214.94

Zdravím všechny, mám za úkol vypracovat jednoduchou kalkulačku s použitím tříd, konstruktorů a metod. Problém v kódu však nemám, ale... když zadám požadovaný počet čísel, které budu chtít sečíst a jednotlivě je zadám, tak se zobrazí >>> Součet Vámi zadaných čísel: číslo1 + číslo2 + čísloN + = součet A ZDE NASTÁVÁ PROBLÉM.Nevím si rady, jak před = odstranit to poslední +. Poradíte prosím?ZDE KÓD:namespace ConsoleApplication1{ class Program { public static List<double> SeznamS = new List<double>(); public static Scitat ScitatM; static void Main(string[] args) { double cisloS; Console.Write("Kolik čísel budete chtít sečíst?: "); cisloS = double.Parse(Console.ReadLine()); ScitatM = new Scitat(cisloS); Console.Write("= {0}.", ScitatM.OpScitat()); Console.ReadLine(); } public class Scitat { double cisloS, vstupS, tmpS; public Scitat(double cisloS) { this.cisloS = cisloS; } public double OpScitat() { for (int iOpS = 1; iOpS <= cisloS; iOpS++) { Console.Write("Zadejte {0}. číslo: ", iOpS); vstupS = double.Parse(Console.ReadLine()); SeznamS.Add(vstupS); tmpS = tmpS + vstupS; } Console.Write("Součet Vámi zadaných čísel: "); foreach (double feS in SeznamS) { if (feS Ukázat celý příspěvek

Odpovědi na otázku

 |   |  Microsoft Windows 8.1 Chrome 40.0.2214.94

Jsem si vědom, že tato iterace:foreach (double feS in SeznamS){if (feS == SeznamS.Count){Console.Write("{0} ", feS);}else{Console.Write("{0} + ", feS);}mi nefunguje, jelikož count není jako length, ale předtím jsem zkoušel i nacpat ten List do double[], ale to mi opět nefungovalo a přes for a do toho vnořit foreach mi to zase opakovalo několikrát....

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 35.0

Tak nejednodušší by asi bylo použít obyčejný for. Něco jako for(int i =0; i< SeznamS.Count;++i){ var feS = SeznamS[i]; if(i == SeznamS.Count-1).....(tak jak to máš) Nebo vypsat prvně s + a pak ten poslednífor(int i =0; i< SeznamS.Count -1;++i){ var feS = SeznamS[i];//Výpis s + pro feS}var last = SeznamS.Last();//Výpis bez + pro lastTen tvůj kód má několik problémů:1) feS je hodnota prvku ne pozice v poli. Proto je absolutní blbost to porovnávat proti délce pole(listu)2) v c# se čítá od 0. tudíž s.Count je počet a proto prvek s nejvyšším indexem je s[s.Count -1]3) for a uvnitř foreach -- však se to chovalo jak jsi napsal. Provádělo se to tolikrát, kolikrát to provedl for.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 35.0

Ale celkově ten tvůj kód je takový.... naivní. Neošetřuješ chybné vstupy. Nevhodné použití statických proměnných, členů tříd a lokálních proměnných. Divně pojmenované proměnné.....

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 8.1 Chrome 40.0.2214.94

Mockrát děkuji za radu!!!! Nenapadlo mě použít samostatné for + var, jsem hlupák. 1) Byl jsem si toho vědom, proto jsem hned pod příspěvkem napsal, že to je blbost a že to není jako Length. 2) To vím také, ale nedokázal jsem to využít v tom for + Count-1... nenapadlo mě to.3) Ano ano, byla blbost dát do iterace iteraci. 4) Vstupy ošetřím pomocí while, až napíšu tu kalkulačku, nebojte. 5) Nevhodné použití statických proměnných, členů tříd a lokálních proměnných... teprve začínám, nějaké nápady na zlepšení ? 6) No nejste jediný, kdo mi říká, že si divně jmenuji proměnné, ale mě to tak opravdu vyhovuje.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 8.1 Chrome 40.0.2214.94

PS: Myslíte, že nejlepší řešení by bylo menu udělat pomocí switch ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 40.0.2214.94

Třeba takto:for (int i = 0; i < SeznamS.Count; i++){ Console.Write("{0} ", SeznamS[i]); if (i < SeznamS.Count - 1) Console.Write("+ ");}

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 7 IE 11.0

[code]for (int counter = 0; counter < SeznamS.Count; counter++) { if (counter == SeznamS.Count - 1) { Console.Write("{0} ", SeznamS[counter]); } else { Console.Write("{0} + ", SeznamS[counter]); } }[/code]

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 7 IE 11.0

Případně celý ten cyklus nahradit za totoConsole.Write("{0} ",string.Join(" + ", SeznamS));

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Console, Double, IOPS, Public, Součet, Parse


Určitě si přečtěte

WindowsFX: Nainstalujte to mamce a taťkovi. Ani nepoznají, že to je Linux

WindowsFX: Nainstalujte to mamce a taťkovi. Ani nepoznají, že to je Linux

** Po dvou měsících tu máme další linuxovou kopii ** Tentokrát jde o imitaci Desítek ** Sestavili ji brazilští geekové nad Ubuntu

Jakub Čížek | 135

Je lepší hrát na PC, či na konzolích? Nebo jsou i jiné možnosti?

Je lepší hrát na PC, či na konzolích? Nebo jsou i jiné možnosti?

** Jaké jsou výhody a nevýhody hraní na počítači? ** Co mají společného a v čem se liší Xbox One, PS4 a Switch? ** Na čem hrát, když nemáte výkonné PC ani konzoli?

Lukáš Václavík | 123

Nejlepší programy z roku 2000: Podívejte se, bez čeho jste tehdy vůbec nemohli fungovat!

Nejlepší programy z roku 2000: Podívejte se, bez čeho jste tehdy vůbec nemohli fungovat!

** Dnes už skoro všechno uděláte ve webovém prohlížeči a na mobilu ** Před dvaceti lety to ale bylo jiné ** Zavzpomínejte na legendy, které jste pravděpodobně také používali

Jakub Čížek | 126

12 netradičních map České republiky, které jste ještě nikdy neviděli

12 netradičních map České republiky, které jste ještě nikdy neviděli

** Tušíte, kolik je u nás hřbitovů a jak jsou velké? ** Dokážete si představit mapu českých řek a potoků? ** Udělali jsme to všechno za vás nad daty ČÚZK

Jakub Čížek | 10


Aktuální číslo časopisu Computer

Megatest: nejlepší notebooky do 20 000 Kč

Test 8 levných IP kamer

Jak vybrat bezdrátová sluchátka

Testujeme Android 11