Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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错误:for循环出现问题,该循环应将字符串数组的每个内容转换为浮点数组_Java_Arrays_For Loop - Fatal编程技术网

Java错误:for循环出现问题,该循环应将字符串数组的每个内容转换为浮点数组

Java错误:for循环出现问题,该循环应将字符串数组的每个内容转换为浮点数组,java,arrays,for-loop,Java,Arrays,For Loop,我正试图用java编写一个计算器。我应该可以让控制台中输入的一行同时计算。使用“.split”和regex,我将运算符和值分开 当我一次只转换数组中的一个元素时,这种方法不知何故有效。但是我需要针对每种情况(元素0、元素1、元素2等),所以我认为可以在循环中取一个变量,而不是一次取一个数字 这就是工作原理: zahl1 = Float.valueOf(Zeichenkette[0]); zahl2 = Float.valueOf(Zeichenkette[1]); 如果有人能在这方面给我一些建

我正试图用java编写一个计算器。我应该可以让控制台中输入的一行同时计算。使用“.split”和regex,我将运算符和值分开

当我一次只转换数组中的一个元素时,这种方法不知何故有效。但是我需要针对每种情况(元素0、元素1、元素2等),所以我认为可以在循环中取一个变量,而不是一次取一个数字

这就是工作原理:

zahl1 = Float.valueOf(Zeichenkette[0]);
zahl2 = Float.valueOf(Zeichenkette[1]);
如果有人能在这方面给我一些建议,我将不胜感激

但是下面代码的循环中的循环

package parserrechner;
import java.util.*;

public class ParserRechner
{
    public static String rechnung,
                         regexCheck = "(([\\+ \\- \\* \\/]))";
    public static float ergebnis;

    public static String[] Zeichenkette;
    public static float[] konventiert;

    public static Scanner eingabe = new Scanner (System.in);

    public static void main(String[] args)
    {
        System.out.println("Geben Sie Ihre Rechnung auf einer Zeile ein z.B. 4+7/8 [+, -, *, /]");
        rechnung = eingabe.next();

        Zeichenkette = rechnung.split(regexCheck);

        int i = 0;
        while(i <= Zeichenkette.length)
        {
            konventiert[i] = Float.parseFloat(Zeichenkette[i]);
            i++;
        }

        //float zahl1 = Float.valueOf(Zeichenkette[0]);  /////without loop
        //float zahl2 = Float.valueOf(Zeichenkette[1]);  /////

        if(rechnung.contains("+"))
        {
            for(int counter = 0; counter <= konventiert.length; counter++)
            {
                ergebnis = ergebnis + konventiert[counter];
            }
        }
 /*     else if(rechnung.contains("-")) /////
        {
            ergebnis = zahl1 - zahl2;
        }
        else if(rechnung.contains("*")) //////
        {
            ergebnis = zahl1 * zahl2;
        }
        else if(rechnung.contains("/"))  /////without loop, not finished
        {
            ergebnis = zahl1 / zahl2;    /////
        }
        else
        {
            System.out.println("Falsches Format."); //////
        }
*/
        System.out.println(ergebnis);
    }
}
包解析器;
导入java.util.*;
公共类解析器
{
公共静态字符串Rechng,
regexCheck=“([\\+\-\*\\\/])”;
公共静态浮点数;
公共静态字符串[]Zeichenkette;
公共静态浮动[]Konventert;
公共静态扫描仪eingabe=新扫描仪(System.in);
公共静态void main(字符串[]args)
{
System.out.println(“z.B.4+7/8[+,-,*,/”);
rechnung=eingabe.next();
Zeichenkette=rechnung.split(regexCheck);
int i=0;
而
每次出现“+”、“-”、“/”、“*”和“/strong>”和“,”时,它都会被拆分。因为德语中的浮点数会被表示为1,23等等,我想您的正则表达式会将它们拆分。试试看

regexCheck = "[\\+\\-\\*/]"; 
相反

下面是不同答案的组合(针对正则表达式、数组初始化、循环检查的修复)

Zeichenkette=rechnung.split(regexCheck);
Konventert=新浮点数[Zeichenkette.长度];
int i=0;
而(i
您甚至可以将其压缩为一个循环,并一起跳过konvertiert数组:

   if(rechnung.contains("+")) {
      for(int counter = 0; counter < Zeichenkette.length; counter++) {           
            ergebnis +=  Float.parseFloat(Zeichenkette[counter]);
        }
   }
if(rechnung.contains(“+”)){
对于(int counter=0;counter
从未初始化。当执行
konventert[i]=Float.parseFloat(Zeichenkette[i]);
时,它将尝试转到仍然是空指针的数组上的i索引

试一试

在循环之前

**也

int i = 0;
        while(i <= Zeichenkette.length)
        {
            konventiert[i] = Float.parseFloat(Zeichenkette[i]);
            i++;
        }
inti=0;

而(i由于以下原因,您正在获取和退出索引: 1.-您的数组从未初始化,并且
2-.你的条件是使用“你得到了什么错误?如果有?@jipr311”异常在线程“main”java.lang.ArrayIndexOutOfBoundsException:2在rechnerparser.rechnerparser.main(rechnerparser.java:32)“检查我的答案bite:)是的,这不对,但这不是我的问题。它在循环中不会从字符串[]转换Zeichenkette将float[]konvertiert。这就是问题所在。是的。把两个答案放在一起,我想你会没事的。我错过了在循环之前没有创建的数组。试图将答案组合成一段代码——你在循环中也犯了错误,使用“感谢所有人”“将包括对有用的答案进行投票-一旦有足够的声誉这样做;-)@Jan我想投票给你的答案,但我还需要2个声誉点:)太糟糕了-我想你有时需要问另一个问题:-)我尝试了所有答案,但仍然不起作用。仍然收到错误消息
   if(rechnung.contains("+")) {
      for(int counter = 0; counter < Zeichenkette.length; counter++) {           
            ergebnis +=  Float.parseFloat(Zeichenkette[counter]);
        }
   }
public static float[] konventiert;
konventiert = new float[Zeichenkette.length];
int i = 0;
        while(i <= Zeichenkette.length)
        {
            konventiert[i] = Float.parseFloat(Zeichenkette[i]);
            i++;
        }
int i = 0;
            while(i < Zeichenkette.length)
            {
                konventiert[i] = Float.parseFloat(Zeichenkette[i]);
                i++;
            }
for(int counter = 0; counter <= konventiert.length; counter++)
            {
                ergebnis = ergebnis + konventiert[counter];
            }
for(int counter = 0; counter < konventiert.length; counter++)
            {
                ergebnis = ergebnis + konventiert[counter];
            }
  public static void main(String[] args) {
    System.out.println("Geben Sie Ihre Rechnung auf einer Zeile ein z.B. 4+7/8 [+, -, *, /]");
    rechnung = eingabe.next();

    Zeichenkette = rechnung.split(regexCheck);
    konventiert = new float[Zeichenkette.length];
    int i = 0;
    while (i < Zeichenkette.length) {
        konventiert[i] = Float.parseFloat(Zeichenkette[i]);
        i++;
    }

    // float zahl1 = Float.valueOf(Zeichenkette[0]); /////without loop
    // float zahl2 = Float.valueOf(Zeichenkette[1]); /////

    if (rechnung.contains("+")) {
        for (int counter = 0; counter < konventiert.length; counter++) {
            ergebnis = ergebnis + konventiert[counter];
        }
    }
    /*
     * else if(rechnung.contains("-")) /////
     * {
     * ergebnis = zahl1 - zahl2;
     * }
     * else if(rechnung.contains("*")) //////
     * {
     * ergebnis = zahl1 * zahl2;
     * }
     * else if(rechnung.contains("/")) /////without loop, not finished
     * {
     * ergebnis = zahl1 / zahl2; /////
     * }
     * else
     * {
     * System.out.println("Falsches Format."); //////
     * }
     */
    System.out.println(ergebnis);
}