2014-03-31 68 views
0

我有一個分配將整數分解爲它的個別數字,報告給用戶,並添加它們。我可以這樣做,但我正在努力支持負整數。這裏是我的代碼,它的工作原理正是我希望它的方式,但只爲正整數:分離一個整數並添加值支持一個負整數

import java.util.*; 
public class Module4e 
{ 
    static Scanner console=new Scanner(System.in); 
    public static void main(String[] args) 
    { 
     System.out.print("Enter an integer: "); 
     String myNum=console.nextLine(); //Collects the number as a string 
     int[] asNumber=new int[myNum.length()]; 
     String []upNum=new String[myNum.length()]; //updated 
     int sum=0; //sum starts at 0 
     System.out.println("\n"); 
     System.out.print("The digits of the number are: "); 

     for (int i=0;i<myNum.length();i++) 
     { 
      upNum[i]=myNum.substring(i,i+1); 
      System.out.print(upNum[i]); 
      System.out.print(" "); 
      sum=sum+Integer.parseInt(upNum[i]); 
     } 

     System.out.println("\n"); 
     System.out.print("The sum of the digits is: "); 
     System.out.println(sum); 
    } 
} 

我發現很多的提示獲得此與積極整數工作,但沒有爲陰性。

+0

提示:想想你會如何否定的整數。 – jdigital

+1

['Math.abs(n)'](http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#abs(int))?我無法想象,負數整數的答案與絕對值的答案是不同的。 – ajb

+0

'boolean negative = myNum.startsWith(「 - 」); if(negative){myNum = myNum.substring(1); }' –

回答

0

使用正則表達式

import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TestDigits { 

    static Scanner console = new Scanner(System.in); 

    public static void main(String[] args) { 
     // Validate Input 
     String number = console.nextLine(); 
     Pattern p = Pattern.compile("(-?[0-9]{1})+"); 
     Matcher m = p.matcher(number); 
     if (!m.matches()) { 
      throw new IllegalArgumentException("Invalid Numbers"); 
     } 
     // Calculate 
     p = Pattern.compile("-?[0-9]{1}+"); 
     m = p.matcher(number); 
     int result = 0; 
     System.out.print("The digits of the number are: "); 
     while (m.find()) { 
      System.out.print(m.group() + " "); 
      result += Integer.valueOf(m.group()); 
     } 
     System.out.println(""); 
     System.out.println("Result " + result); 

    } 

} 
+0

太棒了!最後一個按預期工作。謝謝大家的幫助。 – trickabug

0
// I think you can use this code //also you can multiply the number by -1 
int positive = 0; 
//positive give you information about the number introduced by the user 
if (myNum.charAt(0)=='-'){ 
    positive=1; 
}else{ 
    positive=0; 
for (int i=positive; i<myNum.length(); i++){ 
    //be carefull with index out of bound exception 
    if ((i+1)<myNum.length()){ 
     upNum[i]=myNum.substring(i,i+1); 
    } 
} 
+0

謝謝!這個仍然給了我絕對的價值,但是這裏有一些東西,我一定會再次參考! – trickabug

0

變化語句字符串myNum的= console.nextLine()以字符串的myNum =將String.valueOf(Math.abs(Integer.valueOf(console.nextLine())));

+0

這一個執行絕對值的加法 - 但我有另一個程序,這條線將是有用的。非常感謝您的幫助! – trickabug

0

您不必使用String來解決此問題。這是我的想法。

import java.util.*; 
public class Module4e throws IllegalArgumentException { 
    static Scanner console=new Scanner(System.in); 
    public static void main(String[] args) { 
     System.out.print("Enter an integer: "); 
     if (!console.hasNextInt()) throw new IllegalArgumentException(); 
     int myNum=console.nextInt(); 
     myNum = Math.abs(myNum); 
     int sum=0; 
     System.out.println("\n"); 
     System.out.print("The digits of the number are: "); 
     While (myNum > 10) { 
      System.out.print(myNum % 10); 
      System.out.print(" "); 
      sum += myNum % 10; 
      myNum /= 10; 
     } 
     System.out.println(myNum); 
     System.out.print("The sum of the digits is: "); 
     System.out.println(sum); 
    } 
} 
+0

謝謝!我最初嘗試使用%和/方法,並且遇到了麻煩。這是一個有用的參考! – trickabug

0

試試這個。我給了-51作爲輸入,得到-6作爲輸出。這是你在找什麼?

import java.util.*; 
public class LoggingApp 
{ 
    static Scanner console=new Scanner(System.in); 
    public static void main(String[] args) 
    { 
     int multiple = 1;  
     System.out.print("Enter an integer: "); 
     String myNum=console.nextLine(); //Collects the number as a string 
     Integer myNumInt = Integer.parseInt(myNum); 
     if (myNumInt < 1){ 
      multiple = -1; 
      myNum = Integer.toString(myNumInt*-1); 
     } 
     int[] asNumber=new int[myNum.length()]; 
     String []upNum=new String[myNum.length()]; //updated 
     int sum=0; //sum starts at 0 
     System.out.println("\n"); 
     System.out.print("The digits of the number are: "); 
     for (int i=0;i<myNum.length();i++) 
     { 
      upNum[i]=myNum.substring(i,i+1); 
      System.out.print(upNum[i]); 
      System.out.print(" "); 
      sum=sum+Integer.parseInt(upNum[i])*multiple; 
     } 
     System.out.println("\n"); 
     System.out.print("The sum of the digits is: "); 
     System.out.println(sum); 
    } 
} 
+0

關閉!當我放入-12345時,我得到了-15而不是13.非常感謝您的幫助,不過!我從所有發佈的課程中學到了更多。 – trickabug