关于#java#的问题,如何解决?

一个简单的java题目,但是报错我无法解决 报错提示里面有UTF-8 -classpath ,当我把整个while循环注释掉不会报错
题目描述
一个大V直播抽奖,奖品是现金红包,分别有(2588888100e,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]);
        }
    }
}

img

帮你重写了一个,如下:

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++;
            }
        }
    }

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7727565
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:java是什么?用来做什么的?
  • 同时,你还可以查看手册:java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-注释是元数据的一种形式,为编译器提供信息。本课介绍了在程序中有效使用注释的地方和方法。-重复注解 中的内容
  • 除此之外, 这篇博客: 什么是Java反射?中的 反射的应用场景 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 通过上面的讲解,我们可以回味总结下:

    反射常见的应用场景这里介绍3个:

    • Spring 实例化对象:当程序启动时,Spring 会读取配置文件applicationContext.xml并解析出里面所有的标签实例化到IOC容器中。

    • 反射 + 工厂模式:通过反射消除工厂中的多个分支,如果需要生产新的类,无需关注工厂类,工厂类可以应对各种新增的类,反射可以使得程序更加健壮。

    • JDBC连接数据库:使用JDBC连接数据库时,指定连接数据库的驱动类时用到反射加载驱动类

    我们再对上述场景进行一一讲解

  • 您还可以看一下 沙利穆老师的由浅入深学Java课程中的 删除重复元素版本一小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于遇到的Java编程问题,可以采取以下解决方案:

    1. 查看编译器报错信息,根据报错信息检查代码,看看有没有语法错误或者代码逻辑问题,进行相应的修正。

    2. 进行Debug调试,可以通过Debugger工具来进行调试,逐步检查每个变量的值和程序的执行流程,发现问题所在,进行修正。

    3. 使用一些工具来帮助排查问题,例如IDE中的代码检查、代码编辑、单元测试工具等,可以提供更直观的问题表现和解决方案。

    4. 对于常见的问题,例如可见性、线程同步等,可以学习相关知识,了解相应的解决方案,例如使用volatile关键字、使用锁等。

    针对参考资料中提到的问题,如果无法连接到Redis数据库,可以按照以下步骤进行排查:

    1. 使用RedisDesktopManager等工具进行连接测试,看看是否能够正常连接到Redis数据库。

    2. 查看虚拟机中Redis是否成功开启,使用命令:ps -ef|grep redis。

    3. 如果Redis没有开启则启动Redis,使用命令:redis-server redis.conf (需要在redis.conf文件所在的目录使用,redis.conf是Redis的配置文件)。

    4. 在虚拟机端使用客户端测试,使用命令:redis-cli,然后输入ping,如果输出是pong,则表示正常状态。

    5. 查看Redis的端口6379(默认是否对外开放),使用命令:firewall-cmd --query-port=6379/tcp。

    6. 如果输出为no,则说明没有开放,使用命令进行开放,例如使用命令:firewall-cmd --zone=public --add-port=6379/tcp --permanent,使用命令使配置生效:firewall-cmd --reload。

    7. 如果防火墙开启也可能导致连接不成功,可以关闭虚拟机的防火墙,查看防火墙状态使用命令: systemctl status firewalld,关闭防火墙使用命令: systemctl stop firewalld。

    8. 修改Redis的配置文件,使用命令 vim redis.conf,快速找到bind 127.0.0.1 并注释掉,快速找到保护模式 protected-mode = yes 改为 protected-mode = no。快速找到的方法:进入vim后,先输入/,然后输入需要查找的内容,然后回车即可定位到需要查找的内容。

    针对参考资料中提到的可见性问题,可以采取以下解决方案:

    1. 了解JAVA内存模型,了解主内存和工作内存的概念,了解线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量的原理。

    2. 了解相应的解决方案,例如使用volatile关键字来保证可见性,使用锁来进行同步等。

    3. 对于代码中出现的可见性问题,可以通过Debugger等工具来进行调试,逐步检查每个变量的值和程序的执行流程,寻找问题所在,进行修正。