Java :: Aufgabe #13
3 Lösungen
Zahlenfolge berechnen und fortsetzen
Anfänger - Java
von pocki
- 24.11.2012 um 19:50 Uhr
Es soll eine Zahlenfolge wiefolgt berechnet werden:
Die nacheinander folgenden gleichen Zahlen werden gezählt und zusammen mit der Zahl ausgegeben.
Aus der neu berechneten Zahlenfolge errechnet sich die nächste.
Beispiel:
1. Folge: 112
2. Folge: 2112 (2 Einser und 1 Zweier)
3. Folge: 122112 (1 Zweier, 2 Einser, und 1 Zweier)
usw.
Es soll nun mit dieser ersten Folge startend die 15. Folge berechnet und ausgegeben werden.
Wenn mehrstellige Zahlen vorkommen sind diese gleich auszugeben. Bsp: 12 Einser = 121
Die nacheinander folgenden gleichen Zahlen werden gezählt und zusammen mit der Zahl ausgegeben.
Aus der neu berechneten Zahlenfolge errechnet sich die nächste.
Beispiel:
1. Folge: 112
2. Folge: 2112 (2 Einser und 1 Zweier)
3. Folge: 122112 (1 Zweier, 2 Einser, und 1 Zweier)
usw.
Es soll nun mit dieser ersten Folge startend die 15. Folge berechnet und ausgegeben werden.
Wenn mehrstellige Zahlen vorkommen sind diese gleich auszugeben. Bsp: 12 Einser = 121
Lösungen:
Main.java
Java-Code
package de.trainyourprogrammer.java13;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Calculate the 15th step with the following pattern:
*
* 1.) 112 2.) 2112 3.) 122112 ...
*
* @author jsb
*/
public class Main {
/**
* Execute the program.
*
* @param args
* Is ignored in our case.
*/
public static void main(String[] args) {
String input = "";
System.out.println("Geben Sie eine Folge ein:"); // print the request
BufferedReader buffer = new BufferedReader(new InputStreamReader(
System.in)); // start reading from the default input
try { // try to...
input = buffer.readLine();
} catch (IOException e) { // ignore occurring IOExceptions
} finally { // on quit...
try { // try to...
buffer.close(); // stop reading the input
} catch (IOException e) { // again ignore occurring IOExceptions
}
}
String out = getNext(input); // get the row for the input
for (int counter = 0; counter < 15; counter++) {
System.out.println(out); // print the row
out = getNext(out); // get the next row
}
}
/**
* Helper method to get the next row of a given String.
*
* @param row
* The String to get the row from.
*
* @return The next row.
*/
private static String getNext(String row) {
String result = ""; // initialise the result
char current; // initialise the char storing the currently counted digit
try {
current = row.toCharArray()[0]; // set the current digit to the
// first
// digit of the former row
} catch (ArrayIndexOutOfBoundsException e) {
current = 0; // if that fails set the current digit to null
}
int counter = 0; // initialise the counter
for (char digit : row.toCharArray()) { // for every char in the row...
if (digit != current) { // check if the digit is still the same
result = result + Integer.toString(counter) + current; // append
// to
// result
current = digit; // set the next digit
counter = 1; // reset the counter
} else { // else...
counter++; // increase the counter
}
}
return result + Integer.toString(counter) + current; // return the
// result
}
}
/**
* @author ElPapito
* @date 05.05.2015
*/
public class ZahlenfolgeBerechnenUndFortsetzen {
public static void main(String[] args) {
String test = "112";
for (int i = 1; i <= 15; i++) {
System.out.println(i + ". Folge: " + test);
test = next(test);
}
}
public static String next(String string) {
String newString = "";
char digit = string.charAt(0);
int counter = 1;
for (int i = 1; i < string.length(); i++) {
if (string.charAt(i) == digit) {
counter++;
} else {
newString = newString + counter + digit;
digit = string.charAt(i);
counter = 1;
}
}
newString = newString + counter + digit;
return newString;
}
}
package de.patrick260.trainYourProgrammer.exercise_13;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class ZahlenfolgeBerechnenUndFortsetzen {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Bitte gebe eine Zahlenfolge ein: ");
String input = "";
try {
input = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
while (!isNumber(input)) {
System.out.println("Invalid input!");
System.out.print("Bitte gebe eine Zahlenfolge ein: ");
try {
input = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 15; i++) {
input = getNext(input);
System.out.println((i + 1) + ". Folge: " + input);
}
}
public static String getNext(String s) {
String ss = "";
char last = s.charAt(0);
int count = 1;
for (int i = 1; i < s.length(); i++) {
if (last == s.charAt(i)) {
count++;
} else {
ss = ss + count + last;
count = 1;
last = s.charAt(i);
}
}
ss = ss + count + last;
return ss;
}
public static boolean isNumber(String s) {
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != '1' && s.charAt(i) != '2' && s.charAt(i) != '3' && s.charAt(i) != '4' && s.charAt(i) != '5' && s.charAt(i) != '6' && s.charAt(i) != '7' && s.charAt(i) != '8' && s.charAt(i) != '9' && s.charAt(i) != '0') {
return false;
}
}
return true;
}
}
package de.patrick260.trainYourProgrammer.exercise_13;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class ZahlenfolgeBerechnenUndFortsetzen {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Bitte gebe eine Zahlenfolge ein: ");
String input = "";
try {
input = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
while (!isNumber(input)) {
System.out.println("Invalid input!");
System.out.print("Bitte gebe eine Zahlenfolge ein: ");
try {
input = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 15; i++) {
input = getNext(input);
System.out.println((i + 1) + ". Folge: " + input);
}
}
public static String getNext(String s) {
String ss = "";
char last = s.charAt(0);
int count = 1;
for (int i = 1; i < s.length(); i++) {
if (last == s.charAt(i)) {
count++;
} else {
ss = ss + count + last;
count = 1;
last = s.charAt(i);
}
}
ss = ss + count + last;
return ss;
}
public static boolean isNumber(String s) {
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != '1' && s.charAt(i) != '2' && s.charAt(i) != '3' && s.charAt(i) != '4' && s.charAt(i) != '5' && s.charAt(i) != '6' && s.charAt(i) != '7' && s.charAt(i) != '8' && s.charAt(i) != '9' && s.charAt(i) != '0') {
return false;
}
}
return true;
}
}
