Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何查找数组中的最长运行,并在其周围加上括号,以及数组中的所有其他运行?APCSA_Java_Computer Science - Fatal编程技术网

Java 如何查找数组中的最长运行,并在其周围加上括号,以及数组中的所有其他运行?APCSA

Java 如何查找数组中的最长运行,并在其周围加上括号,以及数组中的所有其他运行?APCSA,java,computer-science,Java,Computer Science,任务是:编写一个程序,生成20个随机掷模序列(值1-6)。用户将被询问是否要查看所有运行或最大的运行。然后,通过将数组包含在括号中来打印指定运行的数组 我已经尽了最大的努力来制作方法来完成这项任务,但是我不知道如何在找到运行和查找长度大于2的运行之后添加括号。我还试图在网上找到其他程序,比如我的程序,但是我无法在我的问题上找到帮助,比如能够在跑步和查找所有跑步的时候用括号括起来 查找所有运行的示例:1 2(5 5)3 1 2 4 3(2 2 2)3 6(5 5 5)6 3 1 查找最长运行的示例

任务是:编写一个程序,生成20个随机掷模序列(值1-6)。用户将被询问是否要查看所有运行或最大的运行。然后,通过将数组包含在括号中来打印指定运行的数组

我已经尽了最大的努力来制作方法来完成这项任务,但是我不知道如何在找到运行和查找长度大于2的运行之后添加括号。我还试图在网上找到其他程序,比如我的程序,但是我无法在我的问题上找到帮助,比如能够在跑步和查找所有跑步的时候用括号括起来

查找所有运行的示例:1 2(5 5)3 1 2 4 3(2 2 2)3 6(5 5 5)6 3 1 查找最长运行的示例:1 2 5 5 3 1 2 4 3(2 2 2)3 6 5 5 5 6 3 1

以下是我目前的代码:

导入java.util.*; 公共类RunGenerator{

Scanner s = new Scanner(System.in);
static int max = 6;
static int min = 1;


public static void randomNumbers(int[]array)// generates the 20 random numbers from the die tosses using Math.random
{
    for(int i = 0; i <= 20; i++)
    {
        array[i] = (int)Math.random()* (max-min +1) + min;
    }
}

public static int findRun(int[]array)// finds runs among the array and returns the run surrounded by parentheses
{

    for(int i = 0; i <= array.length; i++)
    {
        int count = 0;
        int currentValue = array[i++];
        int lastValue = array[i];
        if(array[i] == array[i+1]) //checks to see if the element is equal to _____
        {
            System.out.println("(");
            
            while(lastValue == currentValue) //while the two elements are equal, we do not close the parentheses
            {
                count++; //what do I do in here to check for further length??
            }
        
            System.out.println(")");
        }
        else
        {
            System.out.println(i + " " + (i+1) );
        }
    
    }
    
    
}

public static int findLargestRun(int[]array)
{
    for(int i = 0; i <= array.length; i++)
    {
        if(array[i] == array[i++]) //checks to see if the element is equal to the adjacent element
        {
            
            while(array[i] == array[i++]) //while the two elements are equal, we do not close the parentheses
            {
                
            }
            System.out.println("(" + i);
        }
        else
        {
            System.out.println(i + " " + (i+1) );
        }
    }
    
}
Scanner s=新的扫描仪(System.in);
静态int max=6;
静态int min=1;
publicstaticvoidrandomnumbers(int[]数组)//使用Math.random从掷骰中生成20个随机数
{
对于(int i=0;i一些要修复的错误:

  • 您的代码需要一个程序启动的入口点。java不会从程序的顶部开始。java实例化所有空闲*静态变量(在类中的函数之外),并从
    公共静态void main(String[]args){/*here*/}中的第一行开始执行
    函数。如果您在类的实例(您不在这里)中工作,则非静态自由*变量将在该实例中实例化。TLDR:使扫描器
    也是静态的,并添加
    静态void main(String[]args)
    函数。
  • 在for循环中,
    for(int i=0;我将
    函数randomNumbers(int[]数组)
    更改为
    函数randomNumbers()
    ,例如,使用静态全局数组
还有一个警告:

  • Math.random()
    是一个介于0.000…和0.999…之间的伪随机数生成器。请为安全和科学函数选择其他实/安全随机数生成器

我希望这有助于您开始。我不认为一个工作代码在这一点上会对您有多大帮助。一旦您了解了java概念,您肯定可以这样做。

提供不同的方法来查找运行,打印
之间的运行(
,并使用助手类
Run
打印最长跑步记录,以存储有关跑步记录的数据:
start
length
value

静态类运行{
int启动;
整数长度=1;
int值;
}
静态列表findRuns(int…arr){
列表结果=新建ArrayList();
运行=新运行();
run.start=0;
run.value=arr[0];
int max=1;
对于(int i=1;i
打印方法使用流API+
集合.nCopies
构建运行

静态字符串打印运行(列表运行){
返回runs.stream()
.map(r->r.length>1
(“+String.join(“,Collections.nCopies(r.length,Integer.toString(r.value)))+”)
:Integer.toString(r.value)
)
.collect(收集器。连接(“”);
}
最长运行时间的类似打印(可以是多个)

静态字符串printLongestRuns(列表运行){
int max=runs.stream().mapToInt(r->r.length.max().orElse(-1);
返回runs.stream()
.map(r->r.length>1
?(r.length==max?(“:”)
+String.join(“,Collections.nCopies(r.length,Integer.toString(r.value)))
+(r.length==max?”):“”)
:Integer.toString(r.value)
)
.collect(收集器。连接(“”);
}
测验

System.out.println(printRuns(findRuns(1));
系统输出println(printRuns(findRuns(2,2,5,5,3,1,2,4,3,2,2,2,3,6,5,5,5,5,6,3,1));
系统输出println(printLongestRuns(findRuns(2,2,5,5,3,1,2,4,3,2,2,2,2,3,6,5,5,5,6,3,1));
输出

Longest run: 1
1
Longest run: 4
(2 2) (5 5) 3 1 2 4 3 (2 2 2 2) 3 6 (5 5 5 5) 6 3 1
Longest run: 4
2 2 5 5 3 1 2 4 3 (2 2 2 2) 3 6 (5 5 5 5) 6 3 1

很抱歉,我没有包括我的整个程序。我有主方法和代码来提示上面代码下面的用户。我在同一个类中形成这些方法,因为它们是静态的,因此不需要运行对象。我只需要一个工作代码…我在eclipse中形成了其余的。谢谢你的提示,我将遵循它们。开始吧od.您需要确定地修复for循环问题。可能会将您的比较封装在另一个if子句中,该if子句检查
if(i+1),在我考虑它时,删除for循环中的所有
i++
,并将其替换为
i+1
,因为您以这种方式更改周期值(并跳过一些数字).
i++
i=i+1
的缩写。好的,明白了。谢谢:程序运行了!我解决了循环中的问题并提交了它。谢谢大家的帮助!谢谢。我还没有学会如何在课堂上使用流API,所以我会看看你做了什么,看看我能用什么编辑:程序运行了!我解决了问题在循环中起诉并提交感谢大家的帮助!