Ziffer in der Mitte ausgeben

Diskutiere Ziffer in der Mitte ausgeben im Java Basics - Anfänger-Themen Bereich.
P

Px10

Hi, ich möchte gerne eine Methode erstellen, in der ich von einer Zahl die mittlere Ziffer ausgebe.
z.B.:
3 -> 3
13 -> 1
123456 -> 3
1234567 -> 4
555596666-> 9
(also quasi die mittlere, oder die mittlere linke Ziffer)

Dabei soll es egal sein wie lang die Zahl ist. Ich habe es mit Zahl / 100 und % 100 usw versucht, jedoch klappt es nicht, da nicht alle Zahlen gleich lang sind.
Bin noch Anfänger und freue mich auf eure Tipps/Lösungen.
 
X

Xyz1

Hier mal etwas Rekursives, das passt bestimmt:
Java:
	public static void mid(String l, String m, String r) {
		if (l.length() <= r.length()) {
			System.out.println(m);
		} else {
			r += m;
			m = String.valueOf(l.charAt(0));
			l = l.substring(1);
			mid(l, m, r);
		}
	}

	// TEST
	public static void main(String[] args) {
		mid("", "", "");
		mid("1", "", "");
		mid("1234", "", "");
		mid("12345", "", "");
	}
 
Robat

Robat

Wenn man es ohne String machen möchte dann so:
Java:
public class MyClass {
     public static void main(String []args){
        for(int number : new int[]{3, 13, 123456, 1234567, 555596666 }) {
         System.out.println(number + " -> " + getMiddleNumber(number));
        }
     }
     
     private static int getMiddleNumber(int number) {
         int length = (int) (Math.log10(number) + 1);
         int offset = (int) Math.pow(10, length / 2);
         return (number / offset ) % 10;
     }
}
 
P

Px10

Erstmal danke. Ich habe es bei Java eingefügt, an sich passt alles. Nur wollte im Fall 1234 die 2 ausgeben also die linkere Zahl in der Mitte :D
 
P

Px10

Eine Frage hätte ich da noch undzwar was passiert bei (Math.log10(number) +1) ? Zb bei 55559666, rechnet er den logarithmus davon aber wieso +1?
 
Robat

Robat

Der Logarithmus zur Basis 10 auf eine Zahl y angewendet gibt dir eine Zahl x für die gilt 10^x = y. Weiterhin entspricht x + 1 immer der Anzahl der Ziffern in deiner Zahl y. Wieso das so ist wird schön auf der Seite verdeutlicht ( https://www.coders-online.net/40 )
 
P

Px10

Der Logarithmus zur Basis 10 auf eine Zahl y angewendet gibt dir eine Zahl x für die gilt 10^x = y. Weiterhin entspricht x + 1 immer der Anzahl der Ziffern in deiner Zahl y. Wieso das so ist wird schön auf der Seite verdeutlicht ( https://www.coders-online.net/40 )
weils bei 0 beginnt, logisch.. aber auf int offset = (int) Math.pow(10, length / 2); würde ich nicht kommen ehrlich gesagt. Jz weiß ich aber bescheid, danke dir :)
 
H

httpdigest

Noch was rekursives:
Java:
public class MiddleDigit {
  public static int middleDigit(int number) {
    return middleDigit(number, 10);
  }
  private static int middleDigit(int rem, int acc) {
    return rem <= acc ? rem % 10 : middleDigit(rem / 10, acc * 10 + rem % 10);
  }
  public static void main(String[] args) {
    System.out.println(middleDigit(3)); // <- 3
    System.out.println(middleDigit(13)); // <- 1
    System.out.println(middleDigit(123456)); // <- 3
    System.out.println(middleDigit(1234567)); // <- 4
    System.out.println(middleDigit(555596666)); // <- 9
  }
}
 
P

Px10

Noch was rekursives:
Java:
public class MiddleDigit {
  public static int middleDigit(int number) {
    return middleDigit(number, 10);
  }
  private static int middleDigit(int rem, int acc) {
    return rem <= acc ? rem % 10 : middleDigit(rem / 10, acc * 10 + rem % 10);
  }
  public static void main(String[] args) {
    System.out.println(middleDigit(3)); // <- 3
    System.out.println(middleDigit(13)); // <- 1
    System.out.println(middleDigit(123456)); // <- 3
    System.out.println(middleDigit(1234567)); // <- 4
    System.out.println(middleDigit(555596666)); // <- 9
  }
}
Ich weiß zwar nicht wofür rem und acc stehen aber ich kann es ja bennen wie ich es mag.
Das war auch eher danach was ich gesucht habe :D. So komme ich besser klar als mit den Formeln math.pow usw..
Dennoch danke an alle, es ist interessant die unterschiedlichen Methoden zu sehen.
 
H

httpdigest

Ich weiß zwar nicht wofür rem und acc stehen [...]
rem = remainder (also das, was noch übrig bleibt nach der Division durch 10)
acc = accumulator (einfach ein Begriff, der bei Rekursion häufig vorkommt, wenn man einen zusätzlichen Parameter benötigt, der Werte zwischen zwei rekursiven Aufrufen "akkumuliert" (aufsammelt), wie es hier der Fall ist, da es die ursprünglichen Ziffern der Zahl von rechts wieder "aufsammelt")
 
Thema: 

Ziffer in der Mitte ausgeben

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben