2014-03-12 43 views
0

我想做一個簡單的程序,將顯示1到100之間的20個隨機數,然後打印出哪些數字可以被3整除,相當於1%3和2%3。它似乎工作得很好,但我注意到它只適用於列表中最後一個數字。我錯過了在搜索數學中包含所有數字的情況?提前感謝您的幫助,我可以得到!需要幫助使用隨機數和模

import java.util.Random; 


public class Lab5 { 

public static void main(String[] args) { 

    Random rnd = new Random(); 
    int repeat = 19; 
    int n = 0; 

    for(int i=0;i<=repeat;i++){ 
     n = rnd.nextInt(100)+1; 
     System.out.print(n+", "); 

    } 
    System.out.println(); 
    System.out.println("-------------------------------------"); 

    if(n % 3 == 0){ 
     System.out.println("Numbers divisible by three: "+n+(", ")); 

    }else{ 
     System.out.println("Numbers divisible by three: NONE"); 

    } 
    System.out.println("-------------------------------------"); 
    if(n == 1 % 3){ 
     System.out.println("Numbers equivalent to one modulo three: "+n+(", ")); 

    }else{ 
     System.out.println("Numbers equivalent to one modulo three: NONE"); 
    } 

    System.out.println("-------------------------------------"); 

    if(n == 2 % 3){ 
    System.out.println("Numbers equivalent to two modulo three: "+n+(", ")); 

    }else{ 
     System.out.println("Numbers equivalent to two modulo three: NONE"); 
    } 

} 

} 
+0

您正在執行'for'循環的20次迭代,每次計算n次。然後,在for循環終止之後,你執行'if'塊。你需要在for循環中執行數學運算。 – deanosaur

+0

或者,將數字存儲到數組(或集合)中,然後對數組中的值進行數學運算。 –

回答

1

模數的正確語法是n % 3 == 2。當前代碼n == 2 % 3意味着n == 0,因爲Java中的操作順序要求在平等之前評估模數。

2

它只打印最後一個數字,因爲檢查數字是否可以整除等等不在您頂部的for循環中。只需將其下面的所有代碼複製並粘貼到您的for循環中,並且它應該按照您的預期工作。

這裏還有一個錯誤:if (n == 1 % 3),它是合法的,但會檢查n是否等於1/3的餘數。我不認爲這是你想達到的目標,所以糾正它是這樣的:按照Ypnypn的建議,可以使用if (n % 3 == 1)

2

您的n被聲明在循環體的外部,所以它的值將會持續。但是,由於在每次循環迭代中覆蓋了n,因此只有最後一個值n將會持續存在,並且會被程序的其他部分使用。

正如Ypnypn說,糾正你的modulo使用,並作爲仲裁者和deanosaur建議,將程序邏輯的其餘內for loop

1

你把所有的輸出語句(System.out.println()你的循環,所以它只輸出最後一個值。

移動你的輸出語句,以便他們是你的循環中:

public static void main(String[] args) { 
    Random rnd = new Random(); 
    int repeat = 19; 
    int n = 0; 
    int[] numbers = new int[3]; // To hold how many numbers have modulo 0, 1 or 2 
    for(int i = 0; i <= repeat; i++) { 
     n = rnd.nextInt(100)+1; 
     System.out.print(n+", "); 
     if(n % 3 == 0) 
      System.out.println("The number " + n + " is divisible by 3"); 
     else 
      System.out.println("" + n + " modulo 3 = " + n % 3); 

     numbers[n % 3]++; 
    } 
    System.out.println("Numbers divisible by 3: " + numbers[0]); 
    System.out.println("Numbers with modulo 3 = 1: " + numbers[1]); 
    System.out.println("Numbers with modulo 3 = 2: " + numbers[2]); 
} 
0

嗯..你沒有計算在環路任何事情,所以你的報表打印工作n的最後一個值,你退出循環之後。嘗試類似

package com.example.modulo; 
import java.util.Random; 
public class Modulo { 
public static void main(String[] args) { 

    Random rnd = new Random(); 
    int repeat = 19; 
    int n = 0; 

    int[] nMod = new int[3]; 
    nMod[0] = 0; 
    nMod[1] = 0; 
    nMod[2] = 0; 
    for (int i = 0; i <= repeat; i++) { 
     n = rnd.nextInt(100) + 1; 
     nMod[n%3] = nMod[n%3] + 1; 
     System.out.print(n + " (" + n%3 + "), "); 
    } 
    System.out.println(); 
    System.out.println("-------------------------------------"); 

    System.out.println("Numbers divisible by three: " + nMod[0] + (", ")); 
    System.out.println("Numbers equivalent to one modulo three: " + nMod[1] + (", ")); 
    System.out.println("Numbers equivalent to two modulo three: " + nMod[2] + (", ")); 
} 
} 
+0

爲什麼要使用額外的模數包? – blueygh2

+0

這看起來不錯,但你的數學有問題。對於可以被3整除的數字,我得到的答案是「2」,而且每行只能得到一個結果。 – Bfrank

+0

嘗試修改循環中的打印語句以查看模數。看看顯示你的是什麼 – ErstwhileIII