Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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:计算数组中的每个数字_Java_Arrays - Fatal编程技术网

Java:计算数组中的每个数字

Java:计算数组中的每个数字,java,arrays,Java,Arrays,我想计算数组中出现的每个数字的出现次数。我已经看到了其他答案,但我不明白为什么我的方法不起作用。我有一个随机数数组: int[] fält = new int[20] 这就是我所做的: public static String statistik(int[] fält) { String poäng[] = new String[20]; String output = ""; //Clear out the array: for (int i = 0; i

我想计算数组中出现的每个数字的出现次数。我已经看到了其他答案,但我不明白为什么我的方法不起作用。我有一个随机数数组:

int[] fält = new int[20]
这就是我所做的:

public static String statistik(int[] fält) {
    String poäng[] = new String[20];
    String output = "";

    //Clear out the array:
    for (int i = 0; i < poäng.length; i++) {
        poäng[i] = "";
    }

    //Add a star for each time a number appears
    for (int i = 0; i < fält.length; i++) {
        for (int t = 0; t < fält.length; t++) {
            if (fält[t] == i) {
                poäng[i] += "*";
            }
        }
    }

    //Print it out
    for (int i = 0; i < fält.length; i++) {
        output += (i + 1) + ": " + poäng[i] + "\n";
    }
    JOptionPane.showMessageDialog(null, output);
    return "";
}
公共静态字符串statistik(int[]fält){
字符串poäng[]=新字符串[20];
字符串输出=”;
//清除阵列:
for(int i=0;i
不是所有的数字都有一颗星,结果都很奇怪。为什么?

您正在检查
如果(fält[t]==i)
请将其更改为
如果(fält[t]==fält[i])
您正在检查
如果(fält[t]==i)
请将其更改为
如果(fält[t]==fält[i])
这一行:

output += (i + 1) + ": " + poäng[i] + "\n";
这将开始打印“1:”但从0开始计数,这就是为什么输出看起来很奇怪

public static String statistik(int[] fält) {
  String poäng[] = new String[fält.length];
  String output = "";

  //Clear out the array:
  for (int i = 0; i < poäng.length; i++) {
      poäng[i] = "";
  }

  //Add a star for each time a number appears
  for (int i = 0; i < fält.length; i++) {
    for (int t = 0; t < fält.length; t++) {
      if (fält[t] == i) {
        poäng[i] += "*";
      }
    }
  }

  //Print it out
  for (int i = 0; i < fält.length; i++) {
    output += i + ": " + poäng[i] + "\n";
  }
  System.out.println(output);
  return "";
}
公共静态字符串statistik(int[]fält){
字符串poäng[]=新字符串[fält.length];
字符串输出=”;
//清除阵列:
for(int i=0;i
此行:

output += (i + 1) + ": " + poäng[i] + "\n";
这将开始打印“1:”但从0开始计数,这就是为什么输出看起来很奇怪

public static String statistik(int[] fält) {
  String poäng[] = new String[fält.length];
  String output = "";

  //Clear out the array:
  for (int i = 0; i < poäng.length; i++) {
      poäng[i] = "";
  }

  //Add a star for each time a number appears
  for (int i = 0; i < fält.length; i++) {
    for (int t = 0; t < fält.length; t++) {
      if (fält[t] == i) {
        poäng[i] += "*";
      }
    }
  }

  //Print it out
  for (int i = 0; i < fält.length; i++) {
    output += i + ": " + poäng[i] + "\n";
  }
  System.out.println(output);
  return "";
}
公共静态字符串statistik(int[]fält){
字符串poäng[]=新字符串[fält.length];
字符串输出=”;
//清除阵列:
for(int i=0;i
1)嗨,@Habbo,这是因为平面[]数组只包含0 2) 只有在第一次迭代中,i值才会为0,然后它就再也不会为零了

if (fält[t] == i) {
     poäng[i] += "*";
  }
4) 所以这个“我”里面的poäng[i]只会为零,永远不会增加 5) 这就是为什么会出现奇怪的结果。

1)嗨,@Habbo,这是因为平面[]数组只包含0 2) 只有在第一次迭代中,i值才会为0,然后它就再也不会为零了

if (fält[t] == i) {
     poäng[i] += "*";
  }
4) 所以这个“我”里面的poäng[i]只会为零,永远不会增加
5) 这就是产生奇怪结果的原因

您应该更改输出消息

从输出+=(i+1)+“:“+poäng[i]+”\n”

输出+=i+“:“+poäng[i]+”\n”

我认为你可以优化你的代码 首先按排序,这将花费2个循环 然后像这样在排序的数组上循环

    int temp= fält[0];
    output = temp + ": *";
    for (int i = 1; i < fält.length; i++) {
        if(fält[i] >temp){
            temp = fält[i];
            output +="\n"+ temp + ": *";
        }
        else{
            output +="*";
        }
    }
int temp=fält[0];
输出=温度+“:*”;
for(int i=1;i温度){
温度=fält[i];
输出+=“\n”+温度+”:*”;
}
否则{
输出+=“*”;
}
}

代码中只有3个循环,而不是4个。您应该更改输出消息

从输出+=(i+1)+“:“+poäng[i]+”\n”

输出+=i+“:“+poäng[i]+”\n”

我认为你可以优化你的代码 首先按排序,这将花费2个循环 然后像这样在排序的数组上循环

    int temp= fält[0];
    output = temp + ": *";
    for (int i = 1; i < fält.length; i++) {
        if(fält[i] >temp){
            temp = fält[i];
            output +="\n"+ temp + ": *";
        }
        else{
            output +="*";
        }
    }
int temp=fält[0];
输出=温度+“:*”;
for(int i=1;i温度){
温度=fält[i];
输出+=“\n”+温度+”:*”;
}
否则{
输出+=“*”;
}
}

如果(fält[t]==fält[i]),代码中只有3个循环,而不是4个。虽然Java确实支持unicode变量名,但我强烈建议您坚持使用ASCII,因为这将避免平台特定的编码问题。至于具体问题-fält[t]==i。我把它作为一个练习留给你们去找出原因。我还要注意的是,首先对数组进行排序可以使代码更快—我还是让您自己决定。@BoristheSpider为什么它是错误的?我没能通过你的练习。@Habbo你需要学习,不要用勺子舀。拿一支铅笔和一张纸,在每一次
n^2
迭代中,用一个大小为3的数组准确地写出这段代码的作用。提示:不要在数组中使用小于3的任何数字。如果(fält[t]==fält[i]),请尝试使用if(fält[t]==fält[i])?虽然Java确实支持unicode变量名,但我强烈建议您坚持使用ASCII,因为这将避免平台特定的编码问题。至于具体问题-
fält[t]==i
是错误的。我把它作为一个练习留给你们去找出原因。我还要注意的是,首先对数组进行排序可以使代码更快—我还是让您自己决定。@BoristheSpider为什么它是错误的?我没能通过你的练习。@Habbo你需要学习,不要用勺子舀。拿一支铅笔和一张纸,在每一次
n^2
迭代中,用一个大小为3的数组准确地写出这段代码的作用。提示:不要在数组中使用小于3的任何数字。