【问题标题】:Array sorting input [closed]数组排序输入
【发布时间】:2012-01-17 07:57:25
【问题描述】:

我请求有关数组排序输入的帮助。所以接下来的故事是我正在编写一个代码来输入候选人的投票数(其中有 5 个)并输出每个候选人的投票数。输入-1时也需要终止。我已经弄清楚了所有的排序和交换功能,但实际输入代码存在问题。到目前为止我所拥有的并不正确,但它可能会给你一个想法。

import java.util.*;

public class VoteCount {

    public static void main(String[] args) {
        //create empty array
        int[] votes = new int[5];

        //input data
        input(votes);

    }

    public static void input(int[] votes) 
    {
        Scanner kybd = new Scanner(System.in);
        System.out.println("Enter vote number of the candidate results: ");
        int votecount = kybd.nextInt();

        while (votecount !=-1) 
        {
            votes[votecount]++;  
            System.out.println("Candidate" + votes +"Has" +votecount + "votes");        
        }

    }
}

【问题讨论】:

  • votecount = kybd.nextInt(); 你需要在循环的最后也这样做。也使用votes[index++] = votecount 而不是votes[votecount]++;
  • 输出应该是什么样的?候选人编号 = 按票数排序的票数

标签: java arrays sorting


【解决方案1】:

您似乎创建了一个无限循环,原因是 votecount 永远不会等于 -1,因为您永远不会在循环内更改它。

您需要做的是将代码移动到您要求的位置并在循环中记录投票。但在执行votes[votecount]++ 之前,请检查以确保用户没有输入-1,因为这将导致ArrayOutofBoundsException。所以你可以永远循环,当用户输入 -1 时你可以break 循环。

【讨论】:

    【解决方案2】:

    您可以通过以下方式从控制台读取并填充 votes 数组:

    public static void main (String[] args){
    
        String line = null;
        int val = 0;
        BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
        do{
            System.out.println("Usage: Enter votes. Enter -1 to exit");
            int voteNumber = 0; 
            while(voteNumber<5){ 
                  try {
                    line = is.readLine();
                    val = Integer.parseInt(line);
                    votes[voteNumber] = val;
                    voteNumber++;
                  } catch (NumberFormatException ex) {
                    System.err.println("Not a valid number: " + line);
                    System.out.println("Usage: Enter votes. Enter -1 to exit");
                  } 
            }
        }while(val != -1);
    }
    

    【讨论】:

      【解决方案3】:

      我会这样做:

      import java.util.Scanner;
      
      public class VoteCount {
      
          public static void main(String[] args) {
              //create empty array
              int[] votes = new int[5];
              //initialise with 0
              for (int i=0; i<5; i++){
                  votes[i] = 0;
              }
      
              //input data
              input(votes);
      
          }
      
          public static void input(int[] votes) 
          {
              System.out.println("Enter vote number of the candidate results: ");
              Scanner kybd = new Scanner(System.in);
              int votecount = kybd.nextInt();
              while (votecount !=-1) {
                  votes[votecount]++;  
                  System.out.println("Candidate " + votecount +" Has " +votes[votecount] + " votes");
                  System.out.println("Enter vote number of the candidate results: ");
                  votecount = kybd.nextInt();
              }
      
          }
      }
      

      现在你必须添加不允许用户输入任何高于 4 和低于 -1 的功能,否则你会得到一个异常。祝你好运!

      【讨论】:

      • 这好像是功课……如果是这样的话,向OP扔代码不会让他学习。此外,当用户输入 -1 时,您的代码将抛出 ArrayOutofBoundsException。
      • 忘记要求用户输入要投票的候选人号码。事实上,用户将有一个空白控制台......这可能会导致混乱。
      • 是的,刚刚看到了,谢谢……现在已经完成了……我相信他会学会的;)
      • 你的很接近,这正是我在输入后才需要的 - 1 我需要查看 5 名候选人的名单(还没有名字,因为第 2 名尚未设置)和票数对于每个候选人 1 - 有 2 票可以 2 - 有 4 票等等等等。你能帮忙吗?
      【解决方案4】:

      使用此代码,您正在创建一个无限循环。

      相反,你应该写:

      votecount = kybd.nextInt(); // in the Loop and At End..
      

      古龙是对的..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多