2017-06-22 7 views
-1

Ich akzeptiere eine Nummer vom Benutzer, genannt originally_entered_number_inString, die n Ziffern lang ist. Wenn diese Zahl positiv ist, wird diese Zahl in aufsteigender Reihenfolge ausgegeben. Wenn negativ, absteigend. Ich habe den positiven Teil für mich, aber der negative Teil ist wo ich stecke - es zeigt die negative Zahl in absteigender Reihenfolge, aber mit einem -1 daneben.C# - Probleme beim Drucken Array in absteigender Reihenfolge

Beispiel: Der Benutzer gibt 654568 ein. Also gibt es 6 Ziffern in dieser Zahl und positiv, also aufsteigend - Ergebnis: 455668. Aber wenn ich -584669 gebe, gibt es 986654-1 aus Wenn Sie sehen, ist das Ergebnis gültig, nur dass es einen Wert des Bindestrichs (- (minus)) als -1 oder etwas nimmt. Kannst du mir bitte helfen?

Hier ist der Code:

using System; 
using System.Linq; 

namespace nkhl 
{ 
    public class Program1 
    { 
     public static void Main(string[] args) 
     { 
      Console.WriteLine("Enter the number: "); 

      string originally_entered_number_inString = Console.ReadLine(); 
      int entered_number_inInt = Convert.ToInt32(originally_entered_number_inString); 
      Console.WriteLine("\nThe number you entered is {0}.", entered_number_inInt); 

      //Counting the number of digits in the entered number: 
      int n = originally_entered_number_inString.ToString().Count(); 

      //entered_number_inInt is added to the array called array_of_the_numbers 
      int[] array_of_the_numbers = entered_number_inInt.ToString().Select(o=> (int)char.GetNumericValue(o)).ToArray(); 

      if(originally_entered_number_inString.Contains("-")) 
      { 

       Console.WriteLine("\nThis is a negative number, so it will print the given number in Descending order."); 
       Array.Sort(array_of_the_numbers); 
       Array.Reverse(array_of_the_numbers); 

       Console.WriteLine("\nThe entered number has {0} digits.", n-1); //n-1 becuase it takes the minus (-) also as a character so it reads 4. 
       Console.WriteLine("\n{0}, in descending order is", entered_number_inInt); 

       foreach(var i in array_of_the_numbers) 
       { 
       Console.Write(i); 
       } 
      } 

      else 
      { 
       Console.WriteLine("\nThe entered number has {0} digits.", n); 
       Console.WriteLine("{0}, in ascending order is", entered_number_inInt); 
       Array.Sort(array_of_the_numbers); 
       foreach(var i in array_of_the_numbers) Console.Write(i); 
      } 
     } 
    } 
} 

Auch er das Minus als Ziffer zählt.

Vielen Dank im Voraus.

Antwort

1

Uhm, das funktioniert für Sie?

string value = Console.ReadLine(); 
var negative = value.StartsWith("-"); 

var newValue = value.Replace("-", string.Empty); 
var numbers = newValue 
    .Select(c => (int)char.GetNumericValue(c)) 
    .ToArray(); 

Array.Sort(numbers); 

if (negative) Array.Reverse(numbers); 

foreach (var item in numbers){ 
    Console.Write(item); 
} 
+0

OR, könnten Sie die Zeichenfolge in eine Zahl abbiegen, sehen, ob seine kleiner als Null ist, und nehmen Sie sein absoluter Wert – Amy

+0

@Amy _i_ ist 'int'. Was ich tun muss, ist, konvertieren Sie die endgültige Ausgabe in String und TrimEnd den letzten Teil. –

+0

Arbeitete wie erwartet. Vielen Dank. –

0

Multiply entered_number_inInt wenn es kleiner als 0 ist, so dass Sie nicht '-' in -1

(int)char.GetNumericValue('-') == -1 

analysieren zurück Andere Lösung ist '-' in der Zeichenfolge mit '' zu ersetzen.

+0

'-' ist für das negative Zeichen. Deshalb ist es da. Und wo geht '(int) char.GetNumericValue ('-') == -1'?Es wirft einen Fehler auf, der lautet

main.cs(24,15): error CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement Compilation failed: 1 error(s), 0 warnings exit status 1
Ich lege es direkt nach der ersten if-Anweisung ('if (ursprünglich_entered_number_inString.Contains (" - "))') –

1

Eine negative Zahl ist nicht nur eine Zahl, die "das Minuszeichen enthält" (12.0E-1 ist eine positive Zahl), sondern eine Zahl, die kleiner als 0 ist. Ich schlage vor, dass Sie eine einfachere Logik entwickeln für deinen Algorithmus.

One man könnte dies sein: Sie kopieren Sie zuerst Ihr Eingabestring in einer Integer-Variablen

int intNumber = int.Parse(inputNumber); 

prüfen, ob die eingegebene Nummer negativ ist

bool isNegative = (intNumber < 0); 

dann seinen Absolutwert nehmen (das ist nur die Nummer ohne Vorzeichen)

int absNumber = Math.Abs(intNumber); 

und legte die Ziffern in ein Array von ganzen Zahlen

int[] intArray = absNumber.ToString().Select(digit=>int.Parse(digit.ToString())).ToArray(); 

Jetzt können Sie sortieren einfach:

int[] sortedArray = Array.Sort(intArray); 
if (isNegative) 
    sortedArray = Array.Reverse(sortedArray); 
Verwandte Themen