Java 我如何正确使用“a”;ForEach“;环

Java 我如何正确使用“a”;ForEach“;环,java,loops,foreach,Java,Loops,Foreach,我在练习Java,这次我在制作一个程序, 1.将2个二进制数转换为十进制数 2.计算这两个十进制数之和 3.以二进制和十进制显示结果 我知道我在代码中没有采用有效的方法,但这是故意的。 (这样我就可以用一个项目进行更多练习) 但是我的代码中有一个问题,当它要从 二进制到十进制 它始终将第一个数字显示为“3”,第二个数字显示为“3” 作为“2”。 有人能告诉我我做错了什么吗?提前感谢。 (我已经试着在互联网上搜索答案,但找不到。 对不起,如果我把你的时间浪费在一个愚蠢的错误上。) packageb

我在练习Java,这次我在制作一个程序,
1.将2个二进制数转换为十进制数
2.计算这两个十进制数之和
3.以二进制和十进制显示结果
我知道我在代码中没有采用有效的方法,但这是故意的。
(这样我就可以用一个项目进行更多练习)
但是我的代码中有一个问题,当它要从 二进制到十进制
它始终将第一个数字显示为“3”,第二个数字显示为“3” 作为“2”。
有人能告诉我我做错了什么吗?提前感谢。
(我已经试着在互联网上搜索答案,但找不到。
对不起,如果我把你的时间浪费在一个愚蠢的错误上。)

packagebinary2decimal2binary;
导入java.util.Scanner;
导入java.util.ArrayList;
公共类二进制2细分2二进制{
私有静态长二进制1;
私有静态长二进制2;
private final static ArrayList powerso2=新的ArrayList();
private final static ArrayList SEPARATED2=新的ArrayList();
私有静态int temp1=0;
私有静态int result1=0;
私有静态int temp2=0;
私有静态int result2=0;
private final static ArrayList SEPARATED1=新的ArrayList();
静态void二进制文件2ArrayList(长二进制文件1,长二进制文件2){
String separating1=String.valueOf(binary1);
System.out.println(“调试器1:+separating1”);
for(int i=0;i
编辑:我添加了一些代码来检查我的循环发生了什么, 发生了一些奇怪的事情。
输入:
101
10
输出:
调试器1:101
调试器2:10
调试器3:1
调试器3:1
调试器3:1
调试器4:1
调试器4:1
转换的第一个数字:3
转换的第二个数字:2
即使我添加了
i+=1;和
k+=1;在循环中,值从不小于br>
上升。请帮帮我。

实际上这里有很多东西需要改进

  • 从Java1.5开始,就有了。尽可能使用它们(即
    ArrayList
    ,而不是原始类型
    ArrayList

  • 定义变量时,不要使用接口而不是实现(即
    List=new ArrayList();
    而不是
    ArrayList List=new ArrayList();

  • 不要过度使用
    static
    关键字。利用OOP概念,如类和封装。从长远来看,它可以防止你产生不必要的副作用

  • 尝试将
    private
    final
    添加到尽可能多的字段中。它防止重新分配和其他类在与这些值无关时访问这些值

  • 对于循环,您需要改进:
    for(Type element:Iterable)
    已经为您提供了该Iterable中的元素。在该循环中调用
    separated1.get(i)
    没有任何意义(特别是因为
    i
    总是
    0
    ),因为单个元素已经可以通过
    元素访问了

总而言之,您的代码应该如下所示:

....

private final List<Integer> separated2 = new ArrayList<Integer>();

....

for(Integer intValue : separated2) {
    // your logic using intValue
    ....
}
private final List<Integer> separated2 = new ArrayList<Integer>();

....

for(int i = 0; i < separated2.size(); i++) {
     Integer intValue = separated2.get(i);
     // your logic using intValue
    ....
}

要将二进制字符串转换为整数,请使用:

Integer.parseInt("binaryString",2);
这是工作代码

public static void main(String[] args) throws ParseException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Input first binary number.");
        String firstBinary = scanner.next("[0-1]+");
        System.out.println("Input second binary number.");
        String secondBinary = scanner.next("[0-1]+");

        int int1 = convertToInt(firstBinary);
        int int2 = convertToInt(secondBinary);

        int sum = calculateSum(int1, int2);

        display(firstBinary, secondBinary, int1, int2);

        System.out.println("sum is " + sum);
    }

    public static void display(String binary1, String binary2, int arg1, int arg2) {
        System.out.printf("%1s10 = %2d5\n%3s10 = %4d5", binary1, arg1, binary2, arg2);
    }

    public static int convertToInt(String binary) {
        return Integer.parseInt(binary, 2);
    }

    public static int calculateSum(int arg1, int arg2) {
        return arg1 + arg2;
    }

此程序首先要求您输入两个二进制文件。它将它们转换为整数并计算它们的和。最后,它将结果显示到控制台。

Integer已经是一个预定义的类,因此它是一个无效的变量名。@CardinalSystem这不是真的。试试看。Java将允许您声明名为
Integer
的变量。这是愚蠢的O.O
powerso2
separated1
separated2
应该声明为
ArrayList
,而不是
ArrayList
。如果只是将它们设置为
ArrayList
,那么编译器只知道列表中的元素是
对象
。它不知道它们是
整数
@ajb哦,我不知道。我认为当我编写“=new Arraylist”时,编译器会知道它是一个整数Arraylist。谢谢你的建议!谢谢你的建议。但我还需要知道一件事。你能告诉我“intValue”是什么吗?它只是一个刚刚初始化的int变量吗
public static void main(String[] args) throws ParseException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Input first binary number.");
        String firstBinary = scanner.next("[0-1]+");
        System.out.println("Input second binary number.");
        String secondBinary = scanner.next("[0-1]+");

        int int1 = convertToInt(firstBinary);
        int int2 = convertToInt(secondBinary);

        int sum = calculateSum(int1, int2);

        display(firstBinary, secondBinary, int1, int2);

        System.out.println("sum is " + sum);
    }

    public static void display(String binary1, String binary2, int arg1, int arg2) {
        System.out.printf("%1s10 = %2d5\n%3s10 = %4d5", binary1, arg1, binary2, arg2);
    }

    public static int convertToInt(String binary) {
        return Integer.parseInt(binary, 2);
    }

    public static int calculateSum(int arg1, int arg2) {
        return arg1 + arg2;
    }