50分!请问个java基础问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了50分!请问个java基础问题相关的知识,希望对你有一定的参考价值。

就是看到别人定义方法的时候
在形参的那里打了3个... 是什么意思啊?
怎么用啊
能不能拜托谁给我说一下 关键是怎么用

有点像
public void method(Class... aaa)
(这个Class可以换成其他的吗? 是什么意思啊)

  这个是java中的不定长参数(Variable-length Argument),下面详细说明一下:

  不定长参数的由来:
  我们在调用某个方法的时候,如果事先无法决定参数的个数,例如最简单的输出语句:System.out.println();这里面是无法事先决定要给的参数的个数的,比如输出一个a1,就要写System.out.println(a1);如果输出两个,就要改为System.out.println(a1,a2);怎么解决这个问题呢?
  自J2se5.0之后开始支持不定长参数(Variable-length Argument),这样就可以直接解决上述问题,来看一个范例:

  public class Variable
  public static int sum(int... nums) //使用...声明参数
  int sum = 0;
  for(int num : nums)
  sum+=num;
  
  return sum;
  
  这个范例就介绍了不定长参数的用法,其中...就是它的标志,要加在类型关键词后面。其实仔细分析一下可知,nums就是一个数组,编译器会将参数行的(int... nums)解释为(int[] nums)。下面我们就来使用一下上面的这个使用了不定长参数的方法,代码如下:
  public class TestVariable
  public static void main(String[] args)
  int sum = 0;

  sum = Variable.sum(1,2);
  System.out.println("1+2="+sum);

  sum = Variable.sum(1,2,3);
  System.out.println("1+2+3="+sum);

  sum = Variable.sum(1,2,3,4,5);
  System.out.println("1+2="+sum);
  
  
  
  分析可知,编译器会将传递给方法的参数解释为int数组传入至sum()中,所以实际上不定长参数的功能也是自J2se5.0之后所提供的编译蜜糖(Compiler Sugar).

  现在来说一下你说的情况,你说的public void method(Class... aaa) ,这个是使用对象的不定长参数,这个Class当然可以换成其他的东西了,可以换成任何能够作为参数来传递的东西,相信看了上面的话,你也早就明白了,呵呵……
  最后我还要说明一下不定长参数使用时候的注意事项:
  1:在使用不定长参数时,记得必须声明的参数必须设置在参数行的最后一个,来具体看几个例子:

  public void someMethod(int arg1,int arg2,int... varargs) (正确的)

  public void someMethod(int... varargs,int arg1,int arg2) (错误的)

  2:不能使用两个以上的不定长参数,例如下面的方式是不合法的

  public void someMethod(int... varargs1,int... varargs2) (不合法)

  3:如果使用对象的不定长参数,声明的方法相同,例如:

  public void someMethod(someClass... somes)

  以上就是我所知道的不定长参数的相关知识,在这里献丑了……
  如果有高人了解的更多,我愿闻其详……
  最后,祝所有和我一样在自学java的兄弟们,早日出头……
参考技术A 没遇到过 期待 好的答案。。。 关注中。。。 参考技术B 应该是书上的示例代码吧,应该不能这么用的。只是举个例子说明前面是类名后面是引用而已。 参考技术C 可变参数列表
具体看参考资料吧,很详细

参考资料:http://www.blogjava.net/Carter0618/archive/2007/08/19/137889.html

请问用java从1-33个整数中随机抽取6个数字 且不重复 该怎么写?

public static void main(String[] args)
int[] x = new int[33]; //创建值为1-33的整数表, 初始化
for (int i = 0; i < x.length; i++)
x[i] = i+1;

// -------------------------------------------------
for (int i = 0; i < 6; i++) // 随机取值6次 (你可以把6改成33. 试试看会不会出现重复值)
int j = (int) (Math.random()*(33-i)); // 随机值依次递减1, 以保证不可能重复随机到33这个值
System.out.println("第" + (i+1) + "个随机数为: "+ x[j]);// 输出随机值(真正的随机值为整数表x中的数)
x[j] = x[33-i-1]; // 整数表x中已被随机到的值替换为表中最后一个数, 避免以后可能随机到

// -------------------------------------------------
// 整个思路你可以想象成是栈堆的出栈, 随机到的值出栈, 就不会随机到重复值


有问题欢迎继续提问, 希望能帮你解决问题!
参考技术A int[] n= 1,2,3.......32;//创建值为1-33的整数表, 初始化
int[] m =-1,-1,-1,-1,-1,-1;
int k=0;
main_loop:
while(k <6)
int x = (int)(Math.random()*100)%6;
for(int j=0;j <k;j++)
if(m[j]==x)continue main_loop;

m[k]=x;
k++;
System.out.println(n[x]);

以上是关于50分!请问个java基础问题的主要内容,如果未能解决你的问题,请参考以下文章

java 编程题集

Java基础50道经典练习题

Java基础50道经典练习题(23)——求岁数

Java基础50道经典练习题(23)——求岁数

2018.6.19 Java模拟考试(基础习题)

JAVA语言基础内部测试题(50道选择题)