在Chrome的JavaScript控制台中,如果我不使用import java.util.Random;
public class SearchBenchmark {
public static void main(String[] args) {
SearchBenchmark sBenchmark = new SearchBenchmark(); // I don't like the word 'static'. You can disregard all of
// this
sBenchmark.init(); // Execute the meat of the program
}
private void init() {
int maxAttempts = 10; // Set how many times we're doing this
long[] times = new long[maxAttempts]; // Create something to hold the times which we want to run this
int[] range = populateArray(10000000); // Initialise the array with the given range
Random rand = new Random(); // Create random integer generator
int[] target = new int[maxAttempts]; // Create an array filled with the target of our searches
// Populate target with random integers, since having preselected ones will bias your sample.
for (int x = 0; x < target.length; x++) {
target[x] = rand.nextInt((10000000 - 1) + 1) + 1;
}
// Execute the attempts
for (int attempt = 0; attempt < maxAttempts; attempt++) {
long startTime = System.nanoTime(); // Starting time
int result = search(range, target[attempt]); // Find it
if (result == 0) {
throw new RuntimeException("It's not in the range."); // Make sure we actually have it
}
long endTime = System.nanoTime(); // Ending time
long elapsed = endTime - startTime; // Difference
times[attempt] = elapsed; // Save the elapsed time
}
// ==== Summarisation section ====
// Print out times and produce a sum
int sum = 0;
for (int attempt = 0; attempt < maxAttempts; attempt++) {
sum = (int) (sum + times[attempt]);
System.out.println("Attempt " + attempt + " took " + times[attempt] + " nanoseconds");
}
// Print out average
int average = sum / maxAttempts;
System.out.println("Average time: " + average + " nanoseconds");
// Create and print the standard deviation
int sumSquares = 0;
for (int x = 0; x < maxAttempts; x++) {
sumSquares = (int) (sumSquares + Math.pow(times[x] - average, 2));
}
int std = (int) Math.sqrt(sumSquares / maxAttempts);
System.out.println("Standard deviation: " + std + " nanoseconds");
}
/**
* Searches for the target within a range of integers
*
* @param range to search within
* @param target to find
* @return the target if it exists, otherwise, 0
*/
private int search(int[] range, int target) {
for (int x : range) { // Iterate through the entire range
if (x == target) { return x; } // If you found it, return it and stop searching
}
return 0; // If we can't find it, return 0
}
/**
* Creates and populates an array from 0 to a variable <code>i</code>
*
* @param i the maximum amount to which the array should be populated
* @return an array with the range contained within
*/
private int[] populateArray(int i) {
int[] array = new int[i]; // Create an array of the size indicated
for (int x = 0; x < i; x++) { // Populate that array with the range desired
array[x] = x;
}
return array; // Give it back
}
}
,则会显示已分配的值。
var
如果我使用a = 2
// <- 2
,则不会显示该值。
var
为什么会有差异?