2016-03-25 16 views
2

Yapmaya çalıştığım şey: Kullanıcıdan iki giriş al ve onları doğrula. 1, 1 ile 20 arasında bir rastgele sayıdır, diğeri ise, kendisinin çarpma süresi (1 ile 10 arasında bir ifade ile ifade ettiğim bir sayıdır)math.pow java işlevini nasıl düzgün kullanırım?

ne anlamadığım - math.pow yalnızca çiftlerde? Ayrıca, kullanıcının "yanlış" değerler girmesi ve sona erdirmek yerine, program tekrar girdi ister?

bu var:

import java.util.Scanner; 

public class P01Multiplicador { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    System.out.println("insert number and how many times it will multiply itself over"); 
    Scanner in = new Scanner(System.in); 
    int n = in.nextInt(); 
    int nReps = in.nextInt(); 

    if(n<1 || n>20 || nReps<1 || nReps>10){ 
     System.out.println("values are not accepted, please insert again"); 
    } 
    else{ 
     do Math.pow(n, nReps); 
     while(n>1 && n<20 && nReps>1 && nReps<20); 

    } 
    in.close(); 

} 

o değerleri için sorar ama (veya hiç bu konuda), ben yanlış ifadeleri ya da yanlış kullanarak ya ben tahmin ediyorum düzgün çalışmaz değişken tip. java acemi burada. öneri?

+0

'Math.pow sadece çift ile çalışır?' evet 'kullanıcı girişi "yanlış" değerleri yerine sona erdirilmesini, program girişleri için sorar mümkündür again' yes –

+2

Math.pow'un iadesini atamıyorsunuz. Yani sanırım sonsuza dek koşacak. "double power = Math.pow (n, nReps);" gibi bir şey yapmalısınız ve while ifadesinde kullanın veya n ve nReps değerini güncelleştirin –

+2

Bu sonsuz bir döngüdür, çünkü hiçbir zaman 'n' ve' nReps' – QBrute

cevap

1

Math.pow çiftler kabul eder ve doc göre çift döner.

Hatalı sayılar girildiğinde kodunuzun yeni girişler alması için while(true) döngüsünü ekleyebilirsiniz.

while(true){ 
    if(n<1 || n>20 || nReps<1 || nReps>10){ 
     System.out.println("values are not accepted, please insert again"); 
     n = in.nextInt(); 
     nReps = in.nextInt(); 
    } 
    else{ 
     System.out.println(Math.pow(n, nReps)); 
     break; 
    } 
} 

Doğru değerler verildiğinde döngü sona erdirmek için break kullandık, ama (sizin kodundan göründüğü gibi) yerine kırma yeni girişler alabilir. Daha sonra başka bir kırılma şartına sahip olmanız gerekir, aksi takdirde tekrar sonsuz bir döngü olacaktır. ana yöntem içinde kodunun altına

+0

"while (true)" öneriyi sakladım, kendi tweakingimi yaptım ve işe yarıyor, çok teşekkürler. – TwistedMaze

3

Geçerli bir kod olması için kodunuzu düzeltmeniz gerekiyor.

Math.pow, girdilere bağlı olarak hem büyük hem de küçük sayılar ürettiğinden iki kat kullanır. Örneğin. Hatta 4^20, int'a sığmaz.

Eğer böyle Math.round(x)

3

şey kullanabileceği bir long sonucu yuvarlamak istiyorsanız:

boolean accepted = false; 
do{ 
System.out.println("insert number .... 

if(n<1 || n>20 || nReps<1 || nReps>10){ 
    System.out.println("values are not accepted, please insert again"); 
}else{ 
    accepted = true; 
} 
}while(!accepted) 
-1

Kullanım

System.out.println("insert number and how many times it will multiply itself over"); 
    Scanner in = new Scanner(System.in); 
    int n = in.nextInt(); 
    int nReps = in.nextInt(); 

    while (true) { 
     if (n < 1 || n > 20 || nReps < 1 || nReps > 10) { 
      System.out.println("values are not accepted, please insert again"); 
      System.out.println("insert number and how many times it will multiply itself over"); 
      n = in.nextInt(); 
      nReps = in.nextInt(); 
     } else { 
      System.out.println("" + Math.pow(n, nReps)); 
      break; 
     } 

    } 
İlgili konular