【问题标题】:Positive and Negative numbers in String字符串中的正数和负数
【发布时间】:2014-12-19 16:03:04
【问题描述】:

我必须制作一个程序,允许用户输入整数,直到他按下“0”。该程序必须打印: 1)输入数字的总数 2)正数 3)正数的平均值 4)负数 5) 负数之和

到目前为止,我所能做的就是“输入直到按下'0'”并找到输入的数字的数量,这对我和我的编程技能来说非常重要。我在试图找出这个数字是正数还是负数时遇到了麻烦。可能我没有正确比较它们,所以如果我能从高级的人那里得到一点帮助,我会很高兴。

到目前为止,这是我的代码:

import java.io.*; 

class Nums { 
  public static void main(String args[])  
    throws IOException 
  { 
    BufferedReader br = new BufferedReader(new 
                            InputStreamReader(System.in)); 
    String str;
    int EnteredNumbers = -1;
    int Positive = 0;
    int Negative = 0;
    int NegativeSum = 0;
    double AveragePositive = 0;

    System.out.println("Enter '0' to quit."); 
    System.out.println("Enter Numbers: "); 
    do { 
      EnteredNumbers++;
      str = br.readLine();

    } while(!str.equals("0")); 
      System.out.println("You have have entered "+EnteredNumbers+ " numbers!");
      System.out.println("You have have entered "+Positive+ " Positive numbers!");
      System.out.println("The Average of the Positive Numebers is "+AveragePositive+ "!");
      System.out.println("You have have entered "+Negative+ " Negative numbers!");
      System.out.println("The Sum of the Negative numbers is "+NegativeSum+ "!");
  } 
}

【问题讨论】:

  • boolean isNeg=false; if(str.startsWith("-")){ str=str.substring(1); isNeg=true; } int NUMBER=Integer.parseInt(str); if(isNeg) { NUMBER*=-1; } 这样的事情?
  • 顺便说一句,请注意命名变量的良好做法。他们不应该是资本

标签: java


【解决方案1】:

首先指出Integer.parseInt 在java 中用于将String 转换为int。 其次,您还需要一个额外的变量来存储和累积正数的总数。我添加了一个try-catch 异常块来处理错误。

这里有一个代码供参考。

import java.io.*; 

public class Nums { 
  public static void main(String args[])  
    throws IOException 
  { 
    BufferedReader br = new BufferedReader(new 
                            InputStreamReader(System.in)); 
    String str;
    int EnteredNumbers = -1;
    int Positive = 0;
    int Negative = 0;
    int NegativeSum = 0;
    int PositiveSum = 0; // Added extra variable
    double AveragePositive = 0;

    System.out.println("Enter '0' to quit."); 
    System.out.println("Enter Numbers: "); 
   try{
    do { 
      EnteredNumbers++;
      str = br.readLine();

    int num = Integer.parseInt(str);


    if (num>0)
      {
        Positive++;
        PositiveSum+=num;
      }
      else if (num<0)
      {
        Negative++;
        NegativeSum+=num;
      }
    } while(!str.equals("0")); 
    AveragePositive = (double)PositiveSum/(double)Positive;
      System.out.println("You have have entered "+EnteredNumbers+ " numbers!");
      System.out.println("You have have entered "+Positive+ " Positive numbers!");
      System.out.println("The Average of the Positive Numebers is "+AveragePositive+ "!");
      System.out.println("You have have entered "+Negative+ " Negative numbers!");
      System.out.println("The Sum of the Negative numbers is "+NegativeSum+ "!");
    }
    catch (java.lang.NumberFormatException e)
    {
        System.out.println("Wrong format");
    }  

} 
}

如果没有错误则输出

Enter '0' to quit.
Enter Numbers: 
1
5
5
-5
-5
0
You have have entered 5 numbers!
You have have entered 3 Positive numbers!
The Average of the Positive Numebers is 3.6666666666666665!
You have have entered 2 Negative numbers!
The Sum of the Negative numbers is -10!

【讨论】:

  • 你太棒了!只剩下一个问题 - 如果我输入双数字、一个字母或我只是按 Enter 程序应该给我一个无效格式消息...
  • 另外,如果你输入:1 5 5 你得到 3 作为平均正数,它应该是 3.66
  • 尝试输入 1 5 5 -5 -5 并检查平均值
  • @Monster 再次编辑。在计算平均值时进行了更改
  • 非常感谢!现在完美了!
【解决方案2】:

通过将 String 解析为 int 来检查

Integer.parseInt(str)>0  //positive number
Integer.parseInt(str)<0 //negative



do { 
      EnteredNumbers++;
      str = br.readLine();
      int number= Integer.parseInt(str);
      if(number>0){  //do positive stuffs}
      else if(number<0){//do negative stuffs}
    } while(!str.equals("0")); 

【讨论】:

  • 我已经尝试过这样做,但似乎我在弄乱代码,因为它不断给我错误......
【解决方案3】:

希望下面的代码实现你想做的事情

import java.io.*; 

class Nums { 
  public static void main(String args[])  
    throws IOException 
  { 
    BufferedReader br = new BufferedReader(new 
                            InputStreamReader(System.in)); 
    String str;
    int EnteredNumbers = -1;
    int Positive = 0;
    int Negative = 0;
    int NegativeSum = 0;
    double AveragePositive = 0;
    double PositiveSum = 0;

    System.out.println("Enter '0' to quit."); 
    System.out.println("Enter Numbers: "); 
    do { 
      EnteredNumbers++;
      str = br.readLine();
      if(Integer.parseInt(str) > 0){
          Positive++;
          PositiveSum = PositiveSum + Integer.parseInt(str);
          AveragePositive = PositiveSum/Positive;
      }
      if(Integer.parseInt(str) < 0){
          Negative++;
          NegativeSum = NegativeSum + Integer.parseInt(str);
      }

    } while(!str.equals("0")); 
      System.out.println("You have have entered "+EnteredNumbers+ " numbers!");
      System.out.println("You have have entered "+Positive+ " Positive numbers!");
      System.out.println("The Average of the Positive Numebers is "+AveragePositive+ "!");
      System.out.println("You have have entered "+Negative+ " Negative numbers!");
      System.out.println("The Sum of the Negative numbers is "+NegativeSum+ "!");
  } 
}

【讨论】:

    【解决方案4】:

    创建一个列表并继续将数字添加到列表中。你应该这样做:

    List<Integer> numberList = new ArrayList<Integer>();
    
    do { 
      str = br.readLine();
      int number = Integer.parseInt(str);
    } while(number != 0); 
    

    然后使用 for 循环进行计数:

    int negativeNumberSum = 0;
    int positiveNumberSum = 0;
    int positiveNumberCounts = 0;
    for (int i =0; i<numberList.size(); i++) {
        if (numberList.get(i) >= 0) {
            positiveNumberSum += numberList.get(i);
            positiveNumberCounts ++;
        } else {
            negativeNumberSum += numberList.get(i);
        }
    }
    
    //print average of positive as positiveNumberSum /(double) positiveNumberCounts if positiveNumberCounts != 0
    //print average of positive as negativeNumberSum / (double)(numberList.size() - positiveNumberCounts) same if (numberList.size() - positiveNumberCounts) != 0
    //print positive count as positiveNumberSum  and same for negative.
    //
    

    【讨论】:

      【解决方案5】:

      尝试使用Integer.parseInt() 从字符串str 中获取int,并检查整数是&lt; 0(负数)还是&gt; 0(正数)

      【讨论】:

        【解决方案6】:

        我添加了一个名为PositiveSum 的额外变量来协助AveragePositive 计算。

        为了执行这个计算,你需要确保值是Integer,所以我添加了解析语句。

        class Nums { 
          public static void main(String args[])  
            throws IOException 
          { 
            BufferedReader br = new BufferedReader(new 
                                InputStreamReader(System.in)); 
            String str;
            int EnteredNumbers = -1;
            int Positive = 0;
            int Negative = 0;
            int NegativeSum = 0;
            int PositiveSum = 0; 
            double AveragePositive = 0;
        
            System.out.println("Enter '0' to quit."); 
            System.out.println("Enter Numbers: "); 
            do { 
              EnteredNumbers++;
              str = br.readLine();
              int number = Integer.parseInt(str);
              if(number<0) {
                  Negative++;
                  NegativeSum += number;
              } else if(number>0) {
                  Positive++;
                  PositiveSum += number;
        
              }
        
            } while(!str.equals("0"));
              AveragePositive = PositiveSum / EnteredNumbers;
              System.out.println("You have have entered "+EnteredNumbers+ " numbers!");
              System.out.println("You have have entered "+Positive+ " Positive numbers!");
              System.out.println("The Average of the Positive Numebers is "+AveragePositive+ "!");
              System.out.println("You have have entered "+Negative+ " Negative numbers!");
              System.out.println("The Sum of the Negative numbers is "+NegativeSum+ "!");
          } 
        }
        

        【讨论】:

          【解决方案7】:

          更改您的do-while 循环:它使用的是字符串,而不是整数

          do { 
                EnteredNumbers++;
                num = sc.nextInt();
          
              } while(num != 0);
          

          另外,您需要import scanner 实用程序:

          import java.util.Scanner;
          

          不要使用BufferedReader,而是使用:

          static Scanner sc = new Scanner(System.in);
          

          此外,您可能希望在 do-while 循环中使用检查器检查正数和负数:

          if(Integer.parseInt(num)<0) { Negative++; }
          else { Positive++; }
          

          我还添加了一个try-catch 语句来处理如果有人没有输入int 的错误:

                try {
                num = sc.nextInt();
                }
                catch(Exception e) {System.out.println("Invalid integer"); System.exit(0); }
          

          我添加了一些代码,在打印数字时关闭0,因为我意识到当您输入退出时它将包含0。 将你的class 语句更改为public,这只是编程:

          public class Nums {
          

          另外,我在主代码中添加了一个负数计数器和一个平均值。 这是完整的代码,以避免混淆:

          import java.io.*; 
          import java.util.Scanner;
          public class prime { 
            static Scanner sc = new Scanner(System.in);
            public static void main(String args[])  
            { 
              int EnteredNumbers = 0;
              int Positive = 0;
              int Negative = 0;
              int NegativeSum = 0;
              double AveragePositive = 0;
              int num = 0;
              int PosTotal = 0;
              System.out.println("Enter '0' to quit."); 
              System.out.println("Enter Numbers: "); 
              do { 
                try {
                num = sc.nextInt();
                }
                catch(Exception e) {System.out.println("Invalid integer!"); System.exit(0); }
                if(num<0) { Negative++; NegativeSum += num; }
                if(num>0){ Positive++; PosTotal += num; }
                EnteredNumbers++;
              } while(num != 0); 
                AveragePositive = PosTotal / Positive;
                EnteredNumbers -= 1;
                System.out.println("You have have entered "+EnteredNumbers+ " numbers!");
                System.out.println("You have have entered "+Positive+ " Positive numbers!");
                System.out.println("The Average of the Positive Numbers is "+AveragePositive+ "!");
                System.out.println("You have have entered "+Negative+ " Negative numbers!");
                System.out.println("The Sum of the Negative numbers is "+NegativeSum+ "!");
            } 
          }
          

          希望对您有所帮助! 请注意,我已经对其进行了试用测试,并且效果很好。如果您对此有任何错误,请告诉我:)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-14
            • 2019-12-07
            • 2015-05-22
            • 1970-01-01
            • 2019-02-01
            • 2012-08-06
            相关资源
            最近更新 更多