2015-03-31 67 views
0

我正在嘗試寫這個Java程序,要求用戶輸入一個數字並計算一個數字的位數,並將每個數字乘以它的十進制值。例如我輸入546:程序應該說這數目有3個位數,應乘以:
5 * 100 = 500
4 * 10 = 40
1 * 6 = 6需要幫助編寫一個添加多個數字的Java程序?

到目前爲止,這是我的代碼:我用這段代碼遇到的問題是它沒有計算正確的數字量。如果我輸入545它說只有一個數字,並且當它分開時它不會給出正確的答案。

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Please enter a number: "); 
    int n = keyboard.nextInt(); 
    int i; 
    for (i = 0; n > 0; i++) { 
     n /= 10; 
     for (i = 0; n > 0; i++) { 
      n /= 10; 
      System.out.println((n%100000)/10000); 
      System.out.println((n%10000)/1000);     
      System.out.println((n%1000)/100); 
      System.out.println((n%100)/10); 
      System.out.println(n%10); 
     } 
     System.out.println("Number of digits: " + i); 
    } 
} 
+0

當你調用nextInt()時,你會看到如何將545讀作一個值爲545的單個整數。你想要查找輸入的長度(可能是字符串),然後分離出來:如果有3位數字,第一位數字是數字,第二位數字是數字,第三位數字是1。 – Mathemats 2015-03-31 01:38:19

回答

0

要獲得用戶輸入值的位數,您可以獲取該值並在將其轉換爲字符串後檢查該值的長度。這會給你數字的確切長度。例如,如果下面代碼段中的變量「uservalue」是用戶輸入的值,執行代碼片段後的輸出,它將numberOfDigit打印爲「3」。

public static void main (String args[]){ 
    int uservalue=546; 
    int numberOfDigit=0; 
    String userValueinStr=String.valueOf(uservalue); 
    numberOfDigit=userValueinStr.length(); 
    System.out.println("Number of digits in user entered value is::"+numberOfDigit); 

    //Now as you got the no. of digits, you can go ahead and add the your logic of multiplication 
} 
0

的問題是,你有一組嵌套的for循環,這兩個電話N/= 10,這是比較容易看到,如果你縮進的一切:

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 

    System.out.print("Please enter a number: "); 
    int n = keyboard.nextInt(); 
    int i; 
    for (i = 0; n > 0; i++) { 
     n /= 10; 

     for (i = 0; n > 0; i++) { 
      n /= 10; 
      System.out.println((n%100000)/10000); 
      System.out.println((n%10000)/1000);     
      System.out.println((n%1000)/100); 
      System.out.println((n%100)/10); 
      System.out.println(n%10); 
     } 
     System.out.println("Number of digits: " + i); 
    } 
} 

除去這一點,代碼之後似乎按預期工作,並告訴你,545確實有3位數字。這裏是修改後的代碼:

public static void main(String[] args) { 

    Scanner keyboard = new Scanner(System.in); 

    System.out.print("Please enter a number: "); 
    int n = keyboard.nextInt(); 
    int i; 

    for (i = 0; n > 0; i++) { 
     n /= 10; 
     System.out.println((n%100000)/10000); 
     System.out.println((n%10000)/1000);     
     System.out.println((n%1000)/100); 
     System.out.println((n%100)/10); 
     System.out.println(n%10); 
    } 

    System.out.println("Number of digits: " + i); 

} 
0

看起來像你試圖通過使用任意值執行相同的任務。而是嘗試合併一些通用的算法。上的這個線Somethingy張貼例如:

public class CountDigits { 

    private void performTask() { 
     int number = 546; 
     int temp = number; 
     int digit = 0; 
     int counter = 1; 
     while (temp != 0) { 
      digit = temp % 10; 
      System.out.println (digit + " * " + getMultiplier (counter) + " = " + (digit * getMultiplier (counter))); 
      ++counter; 
      temp /= 10; 
     } 
    } 

    private int getMultiplier (int power) { 
     int value = 1; 
     for (int i = 1; i < power; ++i) { 
      value *= 10; 
     } 

     return value; 
    } 

    public static void main (String[] args) { 
     new CountDigits().performTask(); 
    } 

} 

OUTPUT:

C:\Mine\java\bin>java CountDigits 
9 * 1 = 9 
1 * 10 = 10 
1 * 100 = 100 
1 * 1000 = 1000 


C:\Mine\java\bin>java CountDigits 
6 * 1 = 6 
4 * 10 = 40 
5 * 100 = 500 
0
int n = 546; 
for(int i = 0, dig = (int) Math.log10(n) + 1; i < dig; ++i) 
{ 
    int mult = (int) Math.pow(10, dig - i - 1); 
    int a = (n/mult) % 10; 
    System.out.println(a + " * " + mult + " = " + (a * mult)); 
} 

結果:

5 * 100 = 500 
4 * 10 = 40 
6 * 1 = 6 
0
int n = 546; 
int exponent = (int) (Math.log10(n)); 

for (int i = exponent; i >= 0; i--) { 
    int displayNum = (n/(int) Math.pow(10, i)) * (int) Math.pow(10, i); 
    System.out.println(displayNum); 
    n = n - displayNum; 
} 

輸出

System.out﹕ 500 
System.out﹕ 40 
System.out﹕ 6 
相關問題