java问题高手帮忙
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java问题高手帮忙相关的知识,希望对你有一定的参考价值。
package three;
/**
* 抽奖:从n个数值中抽取k个(例如:49选6)
*/
import java.util.*;
public class LotteryDrawing
public static void main(String[] args)
Scanner input=new Scanner(System.in);
System.out.println("How many numbers do you need to draw?");//抽奖需要的数字的数目
int k=input.nextInt();//输入需要的个数
System.out.print("What is the highest number you can draw?");//可能抽出的最高的数字
int n=input.nextInt();//输入可能抽出的最高数字
int[] numbers=new int[n];//定义一个数组存储抽奖所需的数字
int[] result=new int[k];//定义一个数组存储抽出的结果
for(int i=0;i<result.length;i++)//抽出k个数字并存入result数组中
int r=(int)(Math.random()*n);//产生小于n的数字
result[i]=numbers[r];
numbers[r]=numbers[n-1];
n--;
Arrays.sort(result);
System.out.println("Bet the following combination.It'll make you rich!");
for(int j=0;j<result.length;j++)
System.out.println(result[j]);
为什么得不到要输出的结果
为什么输不出来想要的结果
首先看你的题就有点不对:题说从n个数值中抽取k个,这里分两种:
1。n个数值为n个任意数值。假如n为5,则可以是1,2,3,4,5或者0,1,2,3,4或者8,10,15,70,300等。即这5个数是任意的,需要你手动输入。
2。n个数值为相应的自然数。就像你说的49选6应该是指从1-49共49个数而不应该是0-48,也不是0-49共50个数吧。
不知你问的是哪种,不过从你的题中我想应该是第2种吧,我就以第2种为例来回答吧,若为第1种也没关系改改就行了。
从“int[] numbers=new int[n];//定义一个数组存储抽奖所需的数字”这一句开始,因为你创建了一个数组则必须对数组的每一个元素初始化,可以用一个循环给其中的每一个元素赋值,否则它们会自动初始化为0所以在这一句后加上循环:
for(int i=0;i<n;i++)
numbers[i]=i+1;//初始化numbers数组中的元素。数组元素的值按从1-n排列。
接着“numbers[r]=numbers[n-1]; ”一句应该改成如下:
for(int j=r;j<n-1;j++)
numbers[j]=numbers[j+1];//因为上一句result[i]=numbers[r]以经提走了元素numbers[r]的值所以为了避免出现抽取到相同数的情况将numbers[r]替换成numbers[r+1]的数,后面的以此类推,即数组好像前移了一位,且后面一句n--;可以使每次产生随机数时r的范都保持在numbers数组的有效位内。
如果你想说的是第一种情况,则只需要在初始化numbers数组时改为你要用到的值就行了。
OK了! 参考技术A 楼主,下面错了
for(int i=0;i<result.length;i++)//抽出k个数字并存入result数组中
int r=(int)(Math.random()*n);//产生小于n的数字
result[i]=numbers[r];《---------这句改为result[i]=r;
numbers[]你都没赋值,里面所有元素肯定都是零
numbers[r]=numbers[n-1];
n--;
参考技术B for(int i=0;i<result.length;i++)//抽出k个数字并存入result数组中
int r=(int)(Math.random()*n);//产生小于n的数字
result[i]=numbers[r];
numbers[r]=numbers[n-1];
n--;
jiu zhe 参考技术C 同志,我说啊:
int[] numbers=new int[n];//定义一个数组存储抽奖所需的数字
int[] result=new int[k];//定义一个数组存储抽出的结果
这两行能编译通过么?
好像JAVA里不能动态决定一个数组的大小吧?
求高手帮忙快解决一道JAVA题目,麻烦用JAVA语言来写哦~~~拜谢哦~
密码破解
据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。而你要获得消息原文,也就是要将这个过程反过来。
密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z M
原文字母:V W X Y Z A BC D E F G H I J K L M N O P Q R S T U
(注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)
输入:最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成:
起始行:START
密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息.
结束行:END
在最后一个数据集之后,是另一行:ENDOFINPUT。
输出:
每个数据集对应一行,是凯撒的原始消息。
Sample Input
START
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQHFZXJX
END
START
N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFSXJHTSI NS WTRJ
END
START
IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFSMJ
END
ENDOFINPUT
Sample Output
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
I WOULD RATHER BE FIRST IN A LITTLE IBERIANVILLAGE THAN SECOND IN ROME
DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THANHE
char str[100]; //存放原文
char desc[100];//存放密文
加密算法:
desc[i]=str[(i+5)%str.len];
解密算法:
str[i]=desc[(i-5)%desc.len];
具体细节你自己处理下.
以上是关于java问题高手帮忙的主要内容,如果未能解决你的问题,请参考以下文章
急等!在做Struts+Spring+JPA开发时遇到数据库死锁的问题,求java高手帮忙!
急,请JAVA高手帮忙解决一下:Error finishing response java.lang.OutOfMemoryError: Java heap space
java写的通讯短链接客户端,老是会报端口被占用的错误,跪求高手帮忙分析下是啥问题?