【问题标题】:String of only even numbers and only odd numbers只有偶数和只有奇数的字符串
【发布时间】:2019-03-03 21:30:39
【问题描述】:

我知道已经有一些问题与我的问题类似,但尽管阅读了这些问题,但它们并没有完全按照我的意愿行事。 我正在创建一个代码,该代码需要用户输入 0-100(含)之间的数字。无论数字是什么,它都会打印出该数字和该数字之前的所有数字

EX:用户输入 = 25 输出 = 012345678910111213141516171819202122232425

我有那部分工作。现在我应该使用该字符串并创建两个新字符串,一个仅用于奇数,另一个用于偶数。

EX:用户输入 = 25 输出:奇数:135791113151719212325 & 偶数 = 024681012141618202224

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

import java.util.Scanner;

public class OddAndEven{
public String quantityToString() {
  Scanner number = new Scanner(System.in);
  int n = number.nextInt();
  String allNums = "";
  if ((n >= 0) && (n <= 100)) {
     for (int i = 0;i <= n; ++i)
     allNums = allNums + i;

     return allNums;
  }
  else {
     return "";
  }


}

  public void oddAndEvenNumbers(int num) {//Start of second method

     String allNums = ""; //String that quantityToString returns
     String odd = "";
     String even = "";

     if ((num >= 0) && (num < 10)) { //Looks at only single digit numbers
        for (int i = 0; i <= allNums.length(); i++) {
           if (Integer.parseInt(allNums.charAt(i))%2 == 0) { //trying to get the allNums string to be broken into individual numbers to evaluate
           even = even + allNums.charAt(i); //adding the even numbers of the string
           }
           else {
              odd = odd + allNums.charAt(i);
           }
        }
     }
     else { //supposed to handle numbers with double digits
        for (int i = 10; i <= allNums.length(); i = i + 2) {
           if (Integer.parseInt(allNums.charAt(i))%2 == 0) {
              even = even + allNums.charAt(i);
           }
           else {
              odd = odd + allNums.charAt(i);
           }
        }
     }
  System.out.println("Odd Numbers: " + odd);
  System.out.println("Even Numbers: " + even);

       }
public static void main(String[] args) {

System.out.println(new OddAndEven().quantityToString());
//System.out.println(new OddAndEven().oddAndEvenNumbers(allNums));
   //Testing     

  OddAndEven obj = new OddAndEven();
  System.out.println("Testing n = 5");
  obj.oddAndEvenNumbers(5);
  System.out.println("Testing n = 99");
  obj.oddAndEvenNumbers(99);

我知道我的问题在于它应该将字符串分开并评估各个数字,但我不知道该怎么做。 (我也尝试过 substring() & trim())另外我还没有学会如何使用数组,所以我没有尝试使用数组。

【问题讨论】:

  • 您是否刚刚将此代码复制到某个地方?因为需求不同,oddAndEvenNumbers中的代码也不同
  • 什么意思?我从我的工作中复制了这段代码,最后的代码是测试各个方法

标签: java string for-loop if-statement methods


【解决方案1】:

我认为你可以这样做:

    int x = 20;
    StringBuilder evenNumberStringBuilder = new StringBuilder();
    StringBuilder oddNumberStringBuilder = new StringBuilder();
    for(int i =0 ; i<x+1; i++){
        if(i % 2 == 0)evenNumberStringBuilder.append(i);
        else oddNumberStringBuilder.append(i);
    }

    System.out.println(evenNumberStringBuilder);
    System.out.println(oddNumberStringBuilder);

输出:

02468101214161820
135791113151719

【讨论】:

  • StringBuilder和普通String有什么区别?
  • StringBuilder 在连接方面要快得多。我进行了快速测试,10000 StringBuilder 的输入在 2 毫秒内完成,字符串在 160 毫秒内完成。对于 1000000,StringBuilder 需要 12 毫秒,String 需要超过 3 秒。你可以看到细微的差别。
  • 感谢您的解释。当我决定使用 String 与 StringBuilder 时,我会在未来对它们进行更多研究。
【解决方案2】:

您已经将输入作为整数,所以不要使用字符串。我建议使用这个循环;

    Scanner number = new Scanner(System.in);

    System.out.print("Even Numbers: ");
    for (int i = 0; i <= number; i=i+2) {
     System.out.print(i);
    }

    System.out.println("");

    System.out.print("Odd Numbers: ");
    for (int i = 1; i <= number; i=i+2) {
     System.out.print(i);
    }

【讨论】:

    【解决方案3】:

    您可以简单地评估数字,同时将它们存储在 allnumbers 字符串中,这是一个有效的代码:

        int x = 23; //user input
        String s=""; //contains all numbers from 0 to userinput
        String odd =""; //contains all odd numbers from 0 to userinput
        String even = ""; //contains all even numbers from 0 to userinput
    
        for(int i = 0 ; i< x+1 ; i++){
        s += i;
            if(i%2==0) //if i is an even number
                even += i;
            else //if i is an odd number 
                odd += i;
        }
    
        System.out.println(s); //displaying all numbers from 0 to user input
        System.out.println(odd); //displaying odd numbers from 0 to user input
        System.out.println(even); //displaying even numbers from 0 to user input
    

    【讨论】:

    • 为什么你不需要做两个循环来处理一位数和两位数?
    • @user85352 从 0 到用户输入的数字在连接到各自的字符串之前进行了评估。
    • 没问题的朋友!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多