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