2013-09-02 56 views
5

Xin chào tôi là người mới bắt đầu trong Java và có câu hỏi liên quan đến vòng lặp,Vòng lặp, người mới bắt đầu

câu hỏi trong sách yêu cầu Tổng của tất cả các chữ số lẻ của n. (Ví dụ: nếu n là 32677, tổng sẽ là 3 + 7 + 7 = 17.

Tôi không thể tìm ra cách viết mã đó, tôi đang tìm người giúp tôi. là mã này, cũng là bước đầu tiên, nhưng tôi không biết làm thế nào để hoàn thành nó hoặc cho dù tôi có nó đúng hay sai.

Bất kỳ trợ giúp sẽ được đánh giá cao,

public class sumOfOddsInNumber 
{ 
    public static void main(String[] args) 
    { 

     int n = 0; 
     String value = String.valueOf(number); 
     int length = value.length(); 

     while (n < length) 
     { 
      ... //Idk if this the right first step, how do I start it? where do i go? 
+0

Nó không xấu như một bước đầu tiên nhưng mà nó số được xác định? Hãy xem phương thức charAt và xem xét sử dụng toán tử mod (%) để xác định xem một chữ số là lẻ hay chẵn. – JohnMark13

+0

Ach! Tôi hoàn toàn hiểu sai câu hỏi này. Tôi nghĩ rằng bạn đang cố gắng để tổng hợp tất cả các số lẻ từ 1 đến n! Rất tiếc! – Airhead

Trả lời

3

tôi sẽ không để cung cấp cho bạn giải pháp đầy đủ, nhưng dưới đây là những điều bạn cần phải biết để làm điều đó một cách chính xác và nếu bạn hiểu chúng, vấn đề trở nên khá đơn giản:

Nếu bạn có một số nguyên k, bạn có thể chuyển nó sang một String với:

String s = String.valueOf(k); 

này sẽ cho phép bạn đơn giản hơn vòng lặp qua các nhân vật cá nhân của String, mà đại diện cho các chữ số của số. Sau đó, bạn có thể duyệt qua các nhân vật từng người một với

char c = s.charAt(0); 

đâu 0 có thể là một biến chỉ số vòng lặp mà có thể lặp từ ký tự đầu tiên (chỉ số 0) để cuối cùng (index s.length - 1 cho String s)

Sau đó, nó sẽ trở thành một vấn đề chuyển đổi này trở lại một số nguyên, đó là đơn giản, và sau đó kiểm tra xem họ là ngay cả hoặc lẻ. Cách tiêu chuẩn để làm điều này là với một mô đun.

int k = 7; 
if (k % 2 == 0) //k is even 
else //k is odd 

Điều này hoạt động vì bất kỳ số mod 2 nào sẽ trả về 0 chỉ khi đó là số chẵn. Nếu không nó sẽ trở lại 1.

+0

* bạn có thể chuyển đổi nó thành một chuỗi với * ...? –

+0

@LuiggiMendoza Đã sửa lỗi, cảm ơn vì đã chú ý đến nó. – Kon

2
public static int sumOfOddsInNumber(int n) 
{ 
    String valueString = String.valueOf(n); 
    int sum = 0; 

    for (int i = 0; i < valueString.length(); i++) 
    { 
     int value = Integer.parseInt(valueString.substring(i, i + 1)); 
     if (value % 2 != 0) 
      sum += value; 
    } 

    return sum; 
} 
4

Mã này có thể đã làm các trick mà không sử dụng bất kỳ String:

int sum= 0; 
int digit=0; 
int number= your_value; 
while (number > 0) 
{ 
    digit=number % 10; // we look at the "last" digit 
    if (digit %2 == 1) // odd digiti 
    { 
     sum+=digit; 
    } 
    number/=10; 
} 
2

Tôi đã viết bình luận cho sự hiểu biết tốt hơn, cố gắng giải quyết logic bởi bản thân nó sẽ có nhiều hữu ích :)

public class SumOddMain { 

    public static void main(String args[]) { 
     String s = "1234"; 

     //Find the length of String 
     int len = s.length(); 

     //Convert data type String into int 
     int num = Integer.parseInt(s); 

     int mod; //Modulus 
     int od = 0, even = 0; 

     for(int i = 0; i < len ; i++) { 
      //Separates each digit from given number 
      mod = num % 10; 
      num = num/10; 

      if(mod % 2 == 0) { //Determines if the number is odd or even 
       even = even + mod; //Addition of even numbers 
      } else { 
       od = od + mod; //Addition of odd numbers 
      } 
     } 
     System.out.println("Sum of even numbers is "+even); 
     System.out.println("Sum of odd numbers is " + od); 
    } 
} 
1

Đây là những gì tôi đã đưa ra:

package sum; 

import java.util.Scanner; 
public class Sum { 


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

    String number=""; 
    int a=0, total=0; 
    boolean even=false; 

    System.out.println("Enter a number"); number=input.nextLine(); 

    for (int counter=0; counter<number.length(); counter++){ 
    a=Integer.parseInt(number.substring(counter,counter+1)); 
    if (a%2!=0||a==1){ 
     even=false; 
     total+=a; 
    } 
    }System.out.println("The sum is "+total); 




} 
} 

Trước tiên, bạn lấy số từ người dùng, sau đó chương trình đi qua từng số trong chuỗi (số) và tách chúng. Điều này được biểu thị bằng biến "a". Bây giờ bạn có thể kiểm tra xem liệu số đó có hay không bằng cách sử dụng phép chia mô đun (nếu% 2 không phải là 0, thì không phải là số chẵn). Cuối cùng, bạn thêm các số chẵn cùng với tổng biến số và nó sẽ hiển thị câu trả lời!

0
public int SumOfDigits(int num) 
{ 
    if (num < 10) return num; 
    return num % 10 + SumOfDigits(num/10); 
} 

này không sử dụng chuỗi và đây là đệ quy (nó là C# nhưng tôi nghĩ rằng nó cũng sẽ làm việc trên java vì họ đang khá nhiều tương tự)

Cập nhật:

 public int SumOfOddDigits(int num) 
     { 
      int rem = num % 10; 
      if (num < 10) 
      { 
       if (rem % 2 != 0) 
        return num; 
       return 0; 
      } 
      if (rem % 2 != 0) 
       return rem + SumOfOddDigits(num/10); 
      return SumOfOddDigits(num/10); 
     } 
+0

Làm thế nào điều này sẽ bỏ qua các chữ số chẵn? –

+0

@AnindyaDutta Tôi đăng một bản cập nhật, có một cái nhìn – David47

+0

có điều này có vẻ tốt. –

0

Một phương pháp hơi hiệu quả có thể sử dụng toán tử bitwise thay vì% để tìm số liệu có lẻ không.

int sum(int n) { 
    int sum=0, rem; 
    while(n>0) { 
     rem = n%10; 
     if (rem&1 == 1) 
      sum+=rem; 
     n/=10; 
    } 
    return sum; 
} 

Lưu ý rằng phương pháp này chỉ hoạt động trong trường hợp đầu vào n là số dương.

1

Tôi nghĩ cách tiếp cận tốt nhất là sử dụng giải pháp số được đăng bởi julien.

Nếu bạn muốn ở lại với chuỗi, đây là cách tiếp cận khác:

String numString = String.valueOf(number); 
int tmp=0; 
int sum=0; 
for(int i; i< numString.length; i++) { 
    tmp = Character.getNumericValue(element.charAt(i)); 
    if (tmp %2 != 0) 
     sum+= tmp; 
}