Ezt a feladatot meg lehet oldani egyszerűbben mert úgy érzem túl van variálva? C#
//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5
using System;
using System.Text;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
//Your code goes here
int tablePerLine = 10;
int multiplyTableTo = 17;
int InATableTo = 8;
int columns = multiplyTableTo/tablePerLine;
int firstInLine = -(tablePerLine-1), lastInLine = 0;
bool columnsIsRounded = multiplyTableTo%tablePerLine==0;
string space7 = " ";
StringBuilder spaces = new StringBuilder(space7, space7.Length);
if(!columnsIsRounded) ++columns;
for(int i = 0; i < columns; ++i) {
if(i==columns-1 && !columnsIsRounded) {
firstInLine+= tablePerLine;
lastInLine+=multiplyTableTo%tablePerLine;
}
else {
lastInLine+=tablePerLine;
firstInLine+= tablePerLine;
}
for(int j = 1; j <= InATableTo; ++j) {
for(int k = firstInLine; k <= lastInLine; ++k) {
int product = j*k;
int productLength = product.ToString().Length;
int startIndexForRemove = (spaces.Length-1) - (productLength-1);
spaces.Remove(startIndexForRemove, productLength-1);
Console.Write("{0}*{1}={2}" + spaces, k,j,product);
spaces.Replace(spaces.ToString(), space7);
}
Console.WriteLine();
}
Console.WriteLine();
}
}
}
}
Lemaradt a link, bocs:)
Illetve a többi feleslegesnek tűnő dolgot is töröltem, sztem így lenne jóval egyszerűbb:
"Amúgy az direkt van, hogy a második sornyi táblázatban más az oszlopszélesség"
Igen direkt van és azért mert azt akarom,hogy szépen egymás alá illeszkedjenek ne legyen az egyik sor odébb mint a másik.
És mit tehetek azért hogy én is ilyen letisztult megoldásokat tudjak kitalálni?
Egyébként a kódomon 1 óráig szenvedtem úgy,hogy nem kelet a keresőt használnom.
Ismerni kell a nyelvet és framework-öt minél jobban, minél mélyebben.
Tipikusan akkor születnek ilyen gányoló megoldások, mikor valaki nem ismeri a pofon egyszerű lehetőségeket, hanem megpróbálja "ügyesen", "trükkösen" megoldani helyette.
Nagyon tipikus példája, amikor valaki vesszővel elválasztva akar kiírni valamit.
Mi a naív megoldás?
var builder = new StringBuilder();
foreach (var value in myCollection)
{
builder.Append(value);
builder.Append(", ");
}
builder.Remove(builder.Length - 2, 2);
var str = builder.ToString();
Működik? Igen. Ocsmány? Igen. Elromlik ha üres a kollekció? Igen.
Mi a szép megoldás?
var str = String.Join(", ", myCollection);
De ehhez ismerni kell, hogy milyen műveletei vannak a String osztálynak.
Ezerszer láttam az előbbi megoldást, profi fejlesztőktől production kódban.
És még szebb kis s-sel a string:) Sosem értettem azokat akik azt írják, hogy Int32.Parse az int.Parse helyett.
Én mindenhol az aliasokat használom, amire létezik. Van is rá stylecop szabály. Illetve lehet nagy S, csak akkor Int32 legyen int helyett, de sztem ez csúnya, de a lényeg, hogy egységes legyen.
Egyébként azt is javaslom, hogy ugyanazt a stílust használd a kód formázására mindenhol. Pl. most néhol külön sorban van a kezdő kapcsos zárójel, néhol a sor végén. Néhol raktál szóközt a függvény paraméter listájában a vessző után, néhol nem, stb...
Sőt ami még ezeknél is fontosabb az sztem a változó nevek. 1 kivétellel a lokális változóid kis betűvel kezdődnek, de az "InATableTo" nagy I-vel, mért?:)
int és string ha változó, paraméter, adattag, tulajdonság.
Int32 és String ha statikus függvény vagy property hívás.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!