目前在写一提很老的题目但爬了文还是不太懂我的代码要怎么改不重复
并希望最好能以1个回圈解决当然2个回圈也可以其实我爬了很多文章还是不知道怎么下手(没有想法)
完全不会写我的理解能力其实很差
我只会产出乱数不会不重复也不太会用阵列有人会写嬷?
import java.util.*;
public class RandomMath{
public static void main(String[] args){
System.out.println("請輸入數字");
Scanner sc = new Scanner(System.in);
int n = 10;
for (int i=0;i<n;i++){
int num = (int)(Math.random()*9)+(1);
System.out.println(num);
}
}
}
后来我试着这样也能!因为你的帮助有了想法
public static void main(String args[])
{
final int n = 8;
int[] numbers = new int[n];
// builds
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i + 1;
}
// generates
for (int i = 0; i < numbers.length; i++) {
int pos = new Random().nextInt(n);
int temp = numbers[i];
numbers[i] = numbers[pos];
numbers[pos] = temp;
}
System.out.println(Arrays.toString(numbers));
}
or
import java.util.Scanner;
import java.util.Random;
public class perm {
public static void main(String[] arg){
Scanner s = new Scanner(System.in);
int N = s.nextInt(),i;
int[] seq = new int[N];
for(i=N-1;i>=0;--i)seq[i]=1+i;
for(i=0;i<N;++i) System.out.printf(" "+seq[i]);
System.out.printf("\n random permutation \n");
Random rg = new Random();
for(i=N*N*N;0<i;--i) {
int n0 = rg.nextInt(N);
int n1 = rg.nextInt(N);
if(n0 != n1) {
int t = seq[n0];
seq[n0] = seq[n1];
seq[n1] = t;
}
}
for(i=0;i<N;++i) System.out.printf(" "+seq[i]);
System.out.printf("\n");
System.exit(0);
}
}
如果可以交换的话, 那么可以这么写:
import java.util.* ;
public class Main
{
public static void shuffle(int[] arr)
{
Random rand = new Random(System.currentTimeMillis()) ;
for(int i=0 ; i<arr.length ; i++)
{
int pos = i + rand.nextInt(arr.length-i) ;
swap(arr , i , pos) ;
}
}
public static void swap(int[] arr , int i , int j)
{
int x = arr[i] ;
arr[i] = arr[j] ;
arr[j] = x ;
}
public static void main(String args[])
{
Scanner sc = new Scanner(System.in) ;
int n = sc.nextInt() ;
int[] arr = new int[n] ;
for(int i=0 ; i<n ; i++)
{
arr[i] = i ;
}
Main.shuffle(arr) ;
System.out.println(Arrays.toString(arr)) ;
}
}
但是题主题目明确说不能更换, 我没办法啦╮(╯▽╰)╭