2016-08-04 3 views
-3

Ich möchte ein Programm schreiben, das alle in einem Array eingegebenen Ganzzahlen umkehrt, aber mein hier angezeigter Code funktioniert nicht richtig. Hier ist mein Code:Ich möchte ein Programm schreiben, das alle in einem Array eingegebenen Ganzzahlen umkehrt

import java.util.*; 
import java.lang.*; 
import java.io.*; 

class GFG { 
    public static void main (String[] args) throws Exception { 
     //code 
      Scanner ss=new Scanner(System.in); 
     int[] arr = new int[31]; 
     int T=ss.nextInt(); 
     int rem,p=0; 

     for(int i=1;i<=T;i++){ 
      int a=ss.nextInt(); 
      if(a<=1000000000){ 
       while(a!=0){ 
        rem=a%10; 
        p=p*10+rem; 
        a=a/10;      
      } 
      System.out.println(p); 
     } else 
      System.out.println("wrong input"); 
     } 
    } 
} 

Eingang:

2 
56 
78 

erwartete Ausgabe:

65 
87 

tatsächliche Ausgabe:

65 
6578 

Was ist los?

+1

Ich sehe keine berechtigte Frage. – Li357

+0

Ich sehe keine Möglichkeit, die Ganzzahlen 2, 56 und 78 umzukehren und erwarten, 65 und 87 zu bekommen. –

+1

Es gibt einen Unterschied zwischen der Anforderung und der erwarteten Ausgabe. –

Antwort

0

könnte Mögliche Lösung

if(a<=1000000000){ 
       p=0; // reinitialize p 
       while(a!=0){ 
        rem=a%10; 
        p=p*10+rem; 
        a=a/10; 

       } 

Zum besseren Verständnis werden nur diese Zeile hinzufügen System.out.println("P is :"+ p);, wenn und Sie werden sehen, warum p=0; erforderlich war.

if(a<=1000000000){ 
       System.out.println("P is :"+ p); 
       while(a!=0){ 
        rem=a%10; 
        p=p*10+rem; 
        a=a/10; 
} 

OutPut:

2 
65 
P is :0 
56 
78 
P is :56 
5687 
0

Wahrscheinlich sind Sie nur zu lernen, wie die Dinge zu tun; Sie wollen dieses Problem also "mathematisch" lösen, aber es gibt hier eine andere Perspektive.

Es scheint, dass Sie einfach die Ziffern innerhalb einer beliebigen Zahl umkehren möchten; und du behandelst das als mathematisches Problem. Aber man kann dies als Problem der String-Manipulation sehen; die Sie erlaubt, bestehende Funktionen zu verwenden, um das Problem zu lösen:

int originalNumber = .... 
String originalNumberAsString = Integer.toString(originalNumber); 
String reversedNumberAsString = new StringBuilder(originalNumberAsString).reverse().toString(); 
int reversedNumber = Integer.parseInt(reversedNumberAsString); 

Bitte beachten Sie: Es gibt auch keine Notwendigkeit, dass die Größe Ihrer Eingabe zu überprüfen, hier; aber Sie sollten wahrscheinlich nach> = 0 suchen (oder tun, was in Ihrem Fall für negative Zahlen geeignet ist).

+0

Es scheitert für negative Zahlen. -51 würde in 15- – JavaHopper

+0

resultieren Sie aktualisiert Sie antworten! – JavaHopper

0

Es gibt einige Fehler in Ihrem Code (wohl), wenn von Peer überprüft. Sie versuchen, zu drucken, das nicht neu initialisiert wird. Viele ungenutzte Variablen in Ihrem Code werden in dieser Antwort entfernt.

  • Sie haben gerade ein Array deklariert, aber nie in Ihrem Programm verwendet. Nicht sicher, ob Sie die Benutzereingaben in dem Array speichern wollten und sobald alle Eingaben empfangen wurden, möchten Sie möglicherweise die Umkehrung berechnen und die Umkehrung anzeigen oder berechnen und sie direkt in Ihrem Array speichern. Also, ich habe es gerade
  • Die Überprüfung a <= 1000000000 Ich glaube, ist sicherzustellen, dass die eingegebenen Werte innerhalb int reichen. Java bietet Ihnen dafür eine Konstante in Integer Wrapper-Klasse, Integer.MAX_VALUE (2^31 - 1)
  • Der Code fehlte modularity. Daher habe ich es extrahiert, um die Methode reverse(int num), die sich um die Berechnung kümmert
  • Importieren aller Klassen aus dem Paket ist not recommended, lieber importieren Sie nur die Klassen, die in Ihrem Code verwendet werden.

    importieren java.util.Scanner;

    public class GFG {

    public static void main(String[] args) throws Exception { 
        Scanner ss = new Scanner(System.in); 
        int T = ss.nextInt(); 
    
        for (int i = 1; i <= T; i++) { 
         int a = ss.nextInt(); 
    
         if (a <= Integer.MAX_VALUE) { 
          a = reverse(a); 
          System.out.println(a); 
         } else { 
          System.out.println("wrong input"); 
         } 
        } 
    } 
    
    private static int reverse(int num) { 
        int reverse = 0; 
        while(num != 0) { 
         reverse = reverse * 10; 
         reverse = reverse + num % 10; 
         num = num/10; 
        } 
        return reverse; 
    } 
    

    }

Auf einer Seite beachten, wenn man sich GhostCat Antwort suchen, die Zahl zu String Umwandlung und Umkehrung es, schlägt der Ansatz für negativ Nummern.

Beispiel: Wenn Benutzereingaben -51 ist, wäre der Ausgang sein 15-

Es ist jedoch in der Industrie üblich zu speichern bestimmte long Werte als String. Ein solches Beispiel sind Kredit-/Debitkartennummern

+0

Was ist der Sinn zu fragen, ob ein int-Wert eq/less ist als Integer.MAX_VAUE? Dieser Test wird ** immer ** wahr zurückgeben ?! – GhostCat

+0

@GhostCat, ich zeigte gerade das OP, wie wir eingebaute Konstanten verwenden können, um solche Prüfungen zu stellen. Ich verstehe, dass es keinen Sinn ergibt, aber es ist nicht klar aus der Frage, warum das OP eine solche Überprüfung vorgenommen hat – JavaHopper

+0

Und Tipp: Ihre Code-Formatierung ist kaputt. Das ist in Ordnung für seine Eingabe; aber du solltest es besser machen! – GhostCat

Verwandte Themen