找到字符串中给出的变量的值

时间:2013-12-24 08:25:42

标签: java

给出一个等式:

433+4H8= 871

H可以是等式的。找到H的值并将其替换为给定的等式。

输出应为:

433+438=871

我已尝试过以下代码,但将字符串转换为int不起作用...

import java.util.Scanner;

import java.io.*;

class hole

{

    public static void main(String[] args) 

    {

        Scanner reader= new Scanner(System.in);

        int[] nums= new int[3];

        String str= reader.nextLine();

        String str_1= str.replaceAll("=","+");

        String[] split= str_1.split("[+]");

        for (int k=0; k<split.length; k++)
        {

            String ex= split[k];
            nums[k]= Integer.parseInt(ex);

        }

    }

}

5 个答案:

答案 0 :(得分:0)

为什么你不只是减去最后的答案减去第一个数字并建立第三个数字。拆分字符串是多余的,因为您可以使用简单的数学来求解x。

871-433 = 438
h=3



public static void main(String[] args) 

{
    int a = 433;
    int b = 871;
    int c = b - a;
    String s = "4H8";
    char x;
    int location = 0;

    for(int i = 0; i < s.length(); i++)
    {
      char d = s.charAt(i);
      if(d.isDigit()){

          }
      else{
        location = i;
        x = d;

        }
     }

    String solve = c.toString();

  System.out.println(x + "=" + solve.charAt(location) );
  }

答案 1 :(得分:0)

4H8不是整数,因此parseInt无效。

看起来你还有一些方法可以继续这样做,所以我不会通过给你代码,只是一些想法来破坏你的乐趣。

假设等式总是X + Y = Z,其中X,Y和Z是一些整数,其中一个可以包含H ......

你需要有几个案例:

  • 如果H位于X,您可以从X中减去Y来获得Z

  • 如果H位于Y,您可以从Y中减去X来获得Z

  • 如果H位于Z,您可以通过添加ZX来获得Y

但这仍然没有给你H。为此,您可以在我们的字符串中找到H的位置,并在上面计算的数字中提取该位置的数字。

因此,在调用parseInt之前,您应该查找H并简单地存储字符串,如果您找到它。

parseInt也不喜欢空格,所以你应该以某种方式删除它们。

如果方程并不总是X + Y = Z形式(即你也可以有减法,乘法,除法和/或多项),它会变得有点复杂。

答案 2 :(得分:0)

试试这个:

public static void main(String[] args)
{
    Scanner reader = new Scanner(System.in);

    int[] nums = new int[3];
    boolean[] isNum = new boolean[3];

    String str = reader.nextLine();

    // String str_1= str.replaceAll("=","+");

    String[] split = str.split("[+=]");
    int i = 0;
    for (int k = 0; k < split.length; k++) {

        try {
            String s = split[k];
            isNum[k] = true;
            nums[i] = Integer.parseInt(s);i++;
        } catch (NumberFormatException e) {
            // TODO: handle exception
            isNum[k] = false;
        }
    }
    int tot ;
    if(str.indexOf("H")>str.indexOf("=")){
        tot = nums[1] + nums[0];

    }else{
        tot = nums[1] - nums[0];
    }

    for (int k = 0; k < split.length; k++) {
        if(!isNum[k]){
            int indx = split[k].indexOf("H");
            String h = Integer.toString(tot).charAt(indx)+"";
            h = str.replace("H",h);
            System.out.println("New expression :"+h);
        }
    }
}

答案 3 :(得分:0)

尝试以下程序,这仅适用于输入a + b = c格式 以下程序提供正确的输出

import java.util.Scanner;

public class Hole {

    public static void main(String args[])
    {
        int hLocation = 0;
        int result;
        char hValue;
        Scanner in=new Scanner(System.in);
        String str=in.nextLine().replaceAll(" ", "");
        String[] split= str.split("[+=]");

        for(int i=0;i<split.length;i++){
            if(split[i].contains("H")){
                hLocation=i;
                }
        }
        if(hLocation==0){
            result=Integer.parseInt(split[2])-Integer.parseInt(split[1]);
        }else if(hLocation==1){
            result=Integer.parseInt(split[2])-Integer.parseInt(split[0]);
        }
        else{
            result=Integer.parseInt(split[0])+Integer.parseInt(split[1]);
         }

        hValue= String.valueOf(result).charAt(1);
        str=str.replace('H', hValue);
        System.out.println(str);
    }
}

答案 4 :(得分:0)

试试这个(评论是不言自明的):

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    int[] nums = new int[3];
    int varIndex = 0;
    int result = 0;

    String str = reader.nextLine();

    //remove spaces and split into 3 parts based on symbols
    String[] components = str.replaceAll(" ", "").split("\\+|=");
    for (int i = 0; i < components.length; i++) {
        try {
            nums[i] = Integer.parseInt(components[i]);
        } catch (Exception e) {
            varIndex = i; //this component contains "H"
        }
    }

    //Calculate the value of the number which has "H"
    switch (varIndex) {
    case 0:
        result = nums[2] - nums[1]; break;
    case 1:
        result = nums[2] - nums[0]; break;
    case 2:
        result = nums[0] + nums[1]; break;
    }
    nums[varIndex] = result;

    //Print the output
    System.out.println(nums[0] + " + " + nums[1] + " = " + nums[2]);
    System.out.println("H = " + (String.valueOf(result)).charAt(components[varIndex].indexOf('H')));
}