Java Zahl mit 'X' auffüllen

Status
Nicht offen für weitere Antworten.

guni

Bekanntes Mitglied
Hallo,

mir fällt einfach kein Algorithmus ein, der mir für eine beliebige Zahl die Nullen am Ende durch 'X' ersetzt ...
kann mir da wer weiterhelfen.
(Dass ich die Zahl in einen String umwandeln muss is mir klar ;-)

lg, guni
 
Hm wie wäre es die Zahlen einfach von rechts nach links prüfen und sobald das erste Zeichen != 0 auftaucht abschneiden und die Nullen zählen. Dann einfach den vorderen Teil des Strings nehmen und die X-Zeichen anhängen.
 
das hab ich probiert; funktioniert aber nicht!
... habe den code wieder gelöscht, aber ich schreib es schnell nochmal und poste es dann!

lg, guni
 
Code:
public static String nullDigitsToX(int number){
	String snumber = ((Integer)(number)).toString();
	int nullDigits = 0;
	while (snumber.substring(snumber.length()-1) == "0"){
		nullDigits++;
		snumber = snumber.substring(1,snumber.length()-1);
	}
	for (int i = 0; i<nullDigits; i++){
		snumber += "x";
	}
	return snumber;
}

gibt für "123000" "122980" zurück ...
 
Code:
String string = "1234000";
for (int i = string.length()-1; i >= 0; i--)
{
	if (string.substring(i, i+1).equals("0"))
	{
		String newS = string.substring(0, i) + "X" + string.substring(i+1, string.length());
		string = newS;
	}
	else
	{
		break;
	}
}
System.out.println(string);

würde dein Problem glaube lösen
 
mit einer while Schleife gehts natürlich auch :wink:

Code:
string = "1234000";
int i = string.length()-1;
while (string.substring(i, i+1).equals("0"))
{
	string = string.substring(0, i) + "X" + string.substring(i+1, string.length());
	i--;
}
System.out.println(string);
 
in der guni-Variante sind zwei Fehler:
String mit equals vergleichen und substring bei 0 beginnen,
wie soll da aber 122980 rauskommen? Quark

generell gilt, dass man zumindest sowas wie
if (string.substring(i, i+1).equals("0"))
durch
if (string.charAt(i) == '0')
vereinfachen kann
 
hmm ... ja ... scheint zu passen ;-)
hab da glaub ich in einer anderen Methode, in der ich das Ganze aufruf irgendwo "den Hund begraben" ;-)
 
guni hat gesagt.:
Code:
public static String nullDigitsToX(int number){
	String snumber = ((Integer)(number)).toString();
	int nullDigits = 0;
	while (snumber.substring(snumber.length()-1) == "0"){
		nullDigits++;
		snumber = snumber.substring(1,snumber.length()-1);
	}
	for (int i = 0; i<nullDigits; i++){
		snumber += "x";
	}
	return snumber;
}

gibt für "123000" "122980" zurück ...
Hm wie soll das 122980 zurückgeben? Hab den Code jetzt nicht getestet aber ich wüsste nicht wie dadurch aus 123000 122980 werden soll ???:L
 
hmm ... gibt es in Java so eine Short form für's IF wie in anderen Programmiersprachen (Bedingung):TRUE-COMMAND?FALSE-COMMAND ... oder so ähnlich?
 
@HeRaider:
wie gesagt: der Hund lag in einer anderen Methode begraben:

ich will nämlich eine Funktion schreiben, die mir für eine beliebige Zahl bei gegebenem Intervall so einen String mit 'X'en am Ende zurückgibt; z.B. für

Intervall = 10
Zahl = 25 -> 2X
Zahl = 145 -> 14X

Intervall = 100
Zahl = 25 -> 0XX
Zahl = 145 -> 1XX

na ja - derwil schaut das ca so aus ...


Code:
public static String makeInterval(int zahl, int Intervall){
	Integer upper;
	for (upper = 0; upper < (Integer.parseInt(dn_nr)); upper += Interval);
	return nullDigitsToX(upper-Interval,10);
}

und da is halt noch ein Fehler drin ... werd gleich schaun, ob ich ihn find; wenn euch was auffällt: bitte posten!

lg, guni
 
guni hat gesagt.:
hmm ... gibt es in Java so eine Short form für's IF wie in anderen Programmiersprachen (Bedingung):TRUE-COMMAND?FALSE-COMMAND ... oder so ähnlich?
ja das gibt es

sieht dann so aus:

Code:
int x = 5;
int y = 6;
int kleinsteZahl = x < y ? x : y;
 
Was soll der Code bitte bezwecken?

Du hast am Ende deine for Schleife ein Semikolon das führt dazu das er die ganze Schleife lang nicht ausführt

For-Schleife:

Code:
for (variable; bedingung; zählen)
{
   ...
}

Des Weiteren wenn das return in die for-Schleife soll dann spring er schon beim ersten Mal wieder auf der Schleife raus und verlässt die ganze Methode
 
guni hat gesagt.:
@HeRaider:
wie gesagt: der Hund lag in einer anderen Methode begraben:

ich will nämlich eine Funktion schreiben, die mir für eine beliebige Zahl bei gegebenem Intervall so einen String mit 'X'en am Ende zurückgibt; z.B. für

Intervall = 10
Zahl = 25 -> 2X
Zahl = 145 -> 14X

Intervall = 100
Zahl = 25 -> 0XX
Zahl = 145 -> 1XX
...
OK hatte ich nicht gelesen irgendwie bin ich heute etwas langsam. Ich glaub ich mach mir mal nen Kaffee :roll:
 
genau!
deswegen is das semikolon ganz bewusst gesetzt!
die schleife dient nur dazu rauszufinden, was die untere Intervallgrenze meiner Zahl ist; deswegen auch upper+=Intervall: genial oder (y)
 
ich habe wohl übersehen das die Variabel außerhalb deiner for-Schleife deklariert hast 😳
Naja is ja auch Montag :wink:
 
guni hat gesagt.:
Intervall = 10
Zahl = 25 -> 2X
Zahl = 145 -> 14X

Intervall = 100
Zahl = 25 -> 0XX
Zahl = 145 -> 1XX

Wenn ich das richtig verstanden habe willst du je nach Intervall die letzten Stellen ersetzen warum Schneidest du nicht einfach deinen String hinten ab?
und Umgehst den Umweg über die 0 Ersetzung?

Beispiel
bei Intervall = 10

String s = "12345";
s = s.substring(0,s.lengt()-1) + "X";

bei Intervall = 100

String s = "12345";
s = s.substring(0,s.lengt()-2) + "XX";

... usw.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben