一个简单的java题目,但是报错我无法解决 报错提示里面有UTF-8 -classpath ,当我把整个while循环注释掉不会报错
题目描述
一个大V直播抽奖,奖品是现金红包,分别有(2,588,888,100e,1000五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
打印效果如下:(随机顺序,不一定是下面的顺序)
888元的奖金被抽出
588元的奖金被抽出
18080元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出
报错:/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=49288:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/xiaozheng/IdeaProjects/project/out/production/one two.redPacket
代码部分
package two;
import java.util.Random;
public class redPacket {
public static void main(String[] args){
int []a={2,588,888,1000,10000};
int []b=new int[5];
int count=0;
while(count!=5){
Random r=new Random();
int j=r.nextInt(5);
for (int i = 0; i <count; i++) {
if(b[i]==a[j]){
break;
}
b[count]=a[j];
count++;
}
}
for (int i = 0; i < b.length; i++) {
System.out.println(b[i]);
}
}
}
帮你重写了一个,如下:
public static void main(String[] args){
int [] a={2,588,888,1000,10000};
Random random = new Random();
Set<Integer> set = new HashSet<>();
int count=0;
while(count<5) {
int temp = random.nextInt(5);
if (!set.contains(temp)) {
System.out.println(a[temp]+"元的奖金被抽出");
set.add(temp);
count++;
}
}
}
通过上面的讲解,我们可以回味总结下:
反射常见的应用场景这里介绍3个:
Spring 实例化对象:当程序启动时,Spring 会读取配置文件applicationContext.xml并解析出里面所有的标签实例化到IOC容器中。
反射 + 工厂模式:通过反射消除工厂中的多个分支,如果需要生产新的类,无需关注工厂类,工厂类可以应对各种新增的类,反射可以使得程序更加健壮。
JDBC连接数据库:使用JDBC连接数据库时,指定连接数据库的驱动类时用到反射加载驱动类
我们再对上述场景进行一一讲解
对于遇到的Java编程问题,可以采取以下解决方案:
查看编译器报错信息,根据报错信息检查代码,看看有没有语法错误或者代码逻辑问题,进行相应的修正。
进行Debug调试,可以通过Debugger工具来进行调试,逐步检查每个变量的值和程序的执行流程,发现问题所在,进行修正。
使用一些工具来帮助排查问题,例如IDE中的代码检查、代码编辑、单元测试工具等,可以提供更直观的问题表现和解决方案。
对于常见的问题,例如可见性、线程同步等,可以学习相关知识,了解相应的解决方案,例如使用volatile关键字、使用锁等。
针对参考资料中提到的问题,如果无法连接到Redis数据库,可以按照以下步骤进行排查:
使用RedisDesktopManager等工具进行连接测试,看看是否能够正常连接到Redis数据库。
查看虚拟机中Redis是否成功开启,使用命令:ps -ef|grep redis。
如果Redis没有开启则启动Redis,使用命令:redis-server redis.conf (需要在redis.conf文件所在的目录使用,redis.conf是Redis的配置文件)。
在虚拟机端使用客户端测试,使用命令:redis-cli,然后输入ping,如果输出是pong,则表示正常状态。
查看Redis的端口6379(默认是否对外开放),使用命令:firewall-cmd --query-port=6379/tcp。
如果输出为no,则说明没有开放,使用命令进行开放,例如使用命令:firewall-cmd --zone=public --add-port=6379/tcp --permanent,使用命令使配置生效:firewall-cmd --reload。
如果防火墙开启也可能导致连接不成功,可以关闭虚拟机的防火墙,查看防火墙状态使用命令: systemctl status firewalld,关闭防火墙使用命令: systemctl stop firewalld。
修改Redis的配置文件,使用命令 vim redis.conf,快速找到bind 127.0.0.1 并注释掉,快速找到保护模式 protected-mode = yes 改为 protected-mode = no。快速找到的方法:进入vim后,先输入/,然后输入需要查找的内容,然后回车即可定位到需要查找的内容。
针对参考资料中提到的可见性问题,可以采取以下解决方案:
了解JAVA内存模型,了解主内存和工作内存的概念,了解线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量的原理。
了解相应的解决方案,例如使用volatile关键字来保证可见性,使用锁来进行同步等。
对于代码中出现的可见性问题,可以通过Debugger等工具来进行调试,逐步检查每个变量的值和程序的执行流程,寻找问题所在,进行修正。