本文介绍了如何转换java至C ++?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

import java.util.Random;
import java.util.Scanner;

public class Main {
	public static Color[][] memory;
	public static Color[] cache;

	public static void main(String[] args) {
		shmain();
	}

	public static void shmain() {

		int N, M, K;
		Scanner s = new Scanner(System.in);

		int AMAT = 0, hit_time = 0, miss_rate = 0, miss_penalty = 1, common_strikes = 0;

		do {
			System.out.println("Enter N (should be power of 2):");
			N = s.nextInt();
		} while (isPowerOfTwo(N));

		do {
			System.out.println("Enter M (should be power of 2):");
			M = s.nextInt();
		} while (isPowerOfTwo(M));

		memory = new Color[N][M];

		do {
			System.out.println("Enter K (should be power of 2 and less than  NxM / 4) :");
			K = s.nextInt();
		} while (isPowerOfTwo(K) || K > (N * M / 4));

		cache = new Color[K];
		Random rand = new Random();

		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				memory[i][j] = new Color();
				memory[i][j].c = Math.abs(rand.nextInt() % 2);
				memory[i][j].m = Math.abs(rand.nextInt() % 2);
				memory[i][j].y = Math.abs(rand.nextInt() % 2);
				memory[i][j].k = Math.abs(rand.nextInt() % 2);
			}
		}

		for (int i = 0; i < K; i++) {
			cache[i] = new Color();
		}

		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				for (int c = 0; c < K; c++) {
					common_strikes++;
					if (cache[c] == null) {
						miss_rate++;
					} else if (memory[i][j] == cache[c]) {
						hit_time++;
					} else {
						miss_rate++;
						changeCache(N, M, K, i, j);
					}
				}
			}
		}

		System.out
				.println("Hit times: " + hit_time + " " + " \nmiss times: " + miss_rate + " \nnall checks:" + common_strikes
						+ "\nhit rate: " +((double)hit_time/(double)common_strikes) + "\nmiss rate: " +((double)miss_rate/(double)common_strikes)
						);
	}

	public static void changeCache(int n, int m, int k, int mi, int mj) {

		if (m == k) {
			for (int i = 0; i < k; i++) {
				cache[i] = memory[mi][i];
			}
		} else if (m > k) {

			if (mj + k <= m) {
				int z = 0;
				for (int j = mj; j < mj + k; j++) {
					if (j <= k)
						cache[z] = memory[mi][j];
					z++;
				}
			}

			if (mj + k > m) {
				int z = 0;
				for (int i = mj; i < m; i++) {
					cache[z] = memory[mi][i];
					z++;
				}
				z = 0;
				
			}
		} else {

			Color[] mass_odnom = new Color[n * m];
			int ka = 0;
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < m; j++) {
					mass_odnom[ka] = memory[i][j];
					k++;
				}
			}

			ka = 0;
			for (int i = mj * mi + mj; i < mj * mi + mj + k; i++) {
				cache[k] = mass_odnom[i];
				ka++;
			}

		}

	}

	public static boolean isPowerOfTwo(int x) {
		return !((x != 0) && ((x & (~x + 1)) == x));
	}
}





我的尝试:



请帮帮我,亲爱的人们

怎么解决这个代码?





What I have tried:

Help me please, dear kind people
how to solve this code?

cache = new Color[K];
		Random rand = new Random();

		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				memory[i][j] = new Color();
				memory[i][j].c = Math.abs(rand.nextInt() % 2);
				memory[i][j].m = Math.abs(rand.nextInt() % 2);
				memory[i][j].y = Math.abs(rand.nextInt() % 2);
				memory[i][j].k = Math.abs(rand.nextInt() % 2);
			}
		}

		for (int i = 0; i < K; i++) {
			cache[i] = new Color();
		}

		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				for (int c = 0; c < K; c++) {
					common_strikes++;
					if (cache[c] == null) {
						miss_rate++;
					} else if (memory[i][j] == cache[c]) {
						hit_time++;
					} else {
						miss_rate++;
						changeCache(N, M, K, i, j);
					}
				}
			}
		}

		System.out
				.println("Hit times: " + hit_time + " " + " \nmiss times: " + miss_rate + " \nnall checks:" + common_strikes
						+ "\nhit rate: " +((double)hit_time/(double)common_strikes) + "\nmiss rate: " +((double)miss_rate/(double)common_strikes)
						);
	}

推荐答案


这篇关于如何转换java至C ++?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 19:31