2013-09-02 17 views
5

Ciao io sono un principiante in Java e aveva una domanda per quanto riguarda Loops,Loops, principianti

la questione nel libro chiede per la somma di tutte le cifre dispari di n. (Ad esempio, se n è 32677, la somma sarebbe 3 + 7 + 7 = 17.

Non riesco a capire come codificarlo, sto cercando qualcuno che mi aiuti. è questo codice, bene il primo passo, ma non so come completarla o se ce l'ho giusto o sbagliato.

Qualsiasi aiuto sarebbe apprezzato,

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

Non è male come un primo passo, ma dove è il numero definito? Dai un'occhiata al metodo charAt e considera l'utilizzo dell'operatore mod (%) per determinare se una cifra è pari o dispari. – JohnMark13

+0

Ach! Ho completamente letto male questa domanda. Ho pensato che stavi cercando di sommare ogni numero dispari da 1 a n! Oops! – Airhead

risposta

3

non ho intenzione per darti la soluzione completa, ma qui ci sono le cose che devi sapere per farlo correttamente e se le capisci, il problema diventa abbastanza semplice:

Se si dispone di un intero k, è possibile convertirlo in una stringa con:

String s = String.valueOf(k); 

Questo vi permetterà di più semplicemente un ciclo sui singoli caratteri della stringa, che rappresentano le cifre del numero. Poi si può iterare i caratteri uno per uno con

char c = s.charAt(0); 

Dove 0 può essere una variabile indice del ciclo che può loop dal primo carattere (indice 0) all'ultima (indice s.length - 1 per String s)

Quindi diventa una questione di conversione di questi in un numero intero, che è semplice, e quindi verificare se sono pari o dispari. Il modo standard per farlo è con un modulo.

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

Questo funziona perché qualsiasi numero mod 2 restituirà 0 solo se è un numero pari. In caso contrario verrà restituito 1.

+0

* puoi convertirlo in una stringa con * ...? –

+0

@LuiggiMendoza Risolto il problema, grazie per averlo notato. – 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

Questo codice potrebbe ha fatto il trucco senza l'utilizzo di qualsiasi stringa:

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

ho scritto commenti per una migliore comprensione, cercare di risolvere la logica da soli sarà più utile :)

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

Questo è ciò che mi si avvicinò con:

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); 




} 
} 

Innanzitutto, si ottiene il numero dall'utente, quindi il programma passa attraverso ciascun numero nella stringa (numero) e li separa. Questo è rappresentato dalla variabile "a". Ora puoi testare a per vedere se il numero è pari o no usando la divisione modulo (se a% 2 non è 0, a non è pari). Infine, aggiungi i numeri pari insieme alla variabile totale e visualizzerà la risposta!

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

questo non fa uso di archi e questo è ricorsiva (è C#, ma penso che funzionerà anche su Java dato che sono praticamente simile)

Aggiornamento:

 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

Come si salteranno le cifre pari? –

+0

@AnindyaDutta Ho postato un aggiornamento, ho un aspetto – David47

+0

sì, questo sembra buono. –

0

Un metodo leggermente efficiente potrebbe utilizzare l'operatore bit a bit invece di% per trovare se il numero è dispari.

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

nota tuttavia che questo metodo potrebbe funzionare solo in caso di ingresso n è un numero positivo.

1

Penso che l'approccio migliore sia l'utilizzo della soluzione numerica inviata da julien.

Se si vuole rimanere con lo spago, ecco un altro approccio:

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; 
}