![](/img/trans.png)
[英]Recursive Sum of digits of number(until digit is less than 10) java 8 lambdas only
[英]Recursive method that prints all of the digits in a number that or greater than the first digit and lower than the last digit
問題:
我正在嘗試編寫一個遞歸方法,該方法打印的數字大於或等於第一個數字並且低於最后一個數字。 我完成了寫一個遞歸方法,打印所有數字或低於最后一位數字。 我無法弄清楚如何檢查數字是否比第一個數字更重要。
例子:
對於打印(325648),它將打印5,6,4。
對於打印(237),它將打印3。
對於打印(925648),它不會打印任何數字。
這是我的代碼:
public static void print(int n) {
print(n,n%10);
}
private static void print(int n,int lastDigit) {
if(n==0)
return;
if(n%10<lastDigit)
System.out.println(n%10);
print(n/10,lastDigit);
}
這種方法的要求:
請注意:這不是家庭作業! 我正在寫這種方法作為我明天在說的考試的練習。
這里的想法是通過除以10遞歸,直到數字減少到第一個數字。 在返回所有遞歸時,您將第一個數字作為返回值並進行比較。
private static void print( int n ){
print( n/10, n%10 );
}
private static int print( int n, int ld ){
if( n < 10 ) return n;
int digit = n % 10;
int first = print( n/10, ld );
if( digit < ld && digit > first )
System.out.println( digit );
return first;
}
public static int firstDigit(int n) {
if(n == 0) {
return 0;
}
if(n != 0 && n / 10 == 0) {
return n;
}
return firstDigit(n/10);
}
public static void print(int n) {
print(n, firstDigit(n), n%10);
}
private static void print(int n, int firstDigit, int lastDigit) {
if(n == 0)
return;
if(n % 10 < lastDigit && n % 10 > firstDigit)
System.out.println(n%10);
print(n/10, firstDigit, lastDigit);
}
將第一個數字作為參數傳遞。
public static int firstDigit(int n) {
return (int) (n / Math.pow(10, Math.floor(Math.log10(n))));
}
public static void print(int n) {
print(n, firstDigit(n), n%10);
}
private static void print(int n, int firstDigit, int lastDigit) {
if(n == 0)
return;
if(n % 10 < lastDigit && n % 10 > firstDigit)
System.out.println(n%10);
print(n/10, lastDigit);
}
編輯:您也可以通過遞歸計算第一個數字:
public static int firstDigit(int n) {
if (n / 10 == 0) {
return n;
} else {
return firstDigit(n / 10);
}
}
非常簡單,幾乎是你的代碼
public static void print(int n) {
int first = Integer.parseInt(Integer.toString(n).substring(0, 1));
print(n, first, n%10);
}
private static void print(int n, int first, int lastDigit) {
if(n==0)
return;
if(n%10<lastDigit && n%10 > first)
System.out.println(n%10);
print(n/10, first, lastDigit);
}
另一種解決方案是將要檢查的數字表示為字符串:
public static void main(String[] args) throws IOException {
int n = 325648;
print(n);
}
private static void print(int n) {
String intAsString = String.valueOf(n);
int numberLength = intAsString.length();
if( numberLength < 3) {
System.out.println("Can't do with ints shorted than 3 digits");
}
int firstDigit = Integer.valueOf(intAsString.substring(0,1));
int lastDigit = Integer.valueOf(intAsString.substring(numberLength-1,numberLength));
print(intAsString, 0, firstDigit, lastDigit );
}
private static void print(String intAsString,int index, int firstDigit, int lastDigit) {
int digit = Integer.valueOf(intAsString.substring(index,index+1));
if((digit > firstDigit) && (digit < lastDigit)) {
System.out.print(digit);
}
if((index +1) < intAsString.length()) {
print(intAsString,++index, firstDigit, lastDigit);
}
}
我只是嘗試使用字符串和數組比較,我使用字符串,因為我希望代碼有點靈活。
public class Data {
public static void main(String[] args) {
// TODO Auto-generated method stub
print(3245);
}
static void print(int n){
String s = n+"";
String[] s1 = s.split("");
printF(Integer.valueOf(s1[0]),Integer.valueOf(s1[s1.length-1]),s1,0);
}
static void printF(int lst,int end, String[] ar,int index){
if(Integer.valueOf(ar[index])>lst && Integer.valueOf(ar[index])<end){
System.out.println(ar[index]);
}
if(index < ar.length-1){
index = index+1;
Data.printF(lst,end, ar,index);
}
}
}
按照上面編寫的代碼的測試輸出:
Input: 3245
output: 4
Input:1234567
output:23456
Input:58697
output:8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.