方法中的操作不会保存到我的变量中

问题描述 投票:-1回答:1

这是我第一次使用stackoverflow。我不知道我是否做对了。所以无论如何,我正在尝试在Java上制作计算器。我不确定如何解释我的问题。方法中的操作不会保存。当我尝试添加数字时,它不适用于它的最后状态。它适用于我给的第一个数字。你能帮助我吗?

import java.util.Scanner;

public class gelismishesap
{
    public static void toplam(int k)
    {Scanner a = new Scanner(System.in);
        System.out.print(k + " + ");
        for(int i = 0; i<1; i++)
        {
            int b = a.nextInt();
            k += b;
            System.out.println(k);
        }
    }
    public static void cikarma(int k) {
        Scanner a = new Scanner(System.in);
        System.out.print(k + " - ");
        for(int i = 0; i<1; i++)
        {
            int b = a.nextInt();
            k -= b;
            System.out.println(k);
        }
    }
    public static void carpma(int k) {
        Scanner a = new Scanner(System.in);
        System.out.print(k + " x ");
        for(int i = 0; i<1; i++)
        {
            int b = a.nextInt();
            k *= b;
            System.out.println(k);
        }
    }
    public static void bolme(int k) {
        Scanner a = new Scanner(System.in);
        System.out.print(k + " / ");
        for(int i = 0; i<1; i++)
        {
            int b = a.nextInt();
            k /= b;
            System.out.println(k);
        }
    }
    public static void main(String[] args) {
        Scanner a = new Scanner(System.in);
        System.out.print("Sayı girin: ");
        int anasayi = a.nextInt();
        System.out.println(anasayi);
        while(true)
        {
           String b = a.nextLine();
        if(b.equals("q")) { break; }
        if(b.equals("a")) { toplam(anasayi); }
        if(b.equals("b")) { cikarma(anasayi); }
        if(b.equals("c")) { carpma(anasayi); }
        if(b.equals("d")) { bolme(anasayi); }
        }
    }
}
java
1个回答
0
投票

尝试将本节移至while循环内。这样,anasayi就会被重新分配

System.out.print("Sayı girin: ");
int anasayi = a.nextInt();
System.out.println(anasayi);

0
投票

您的操作方法未将操作结果返回到main方法。现在,您的返回值是void,这意味着当您的方法完成执行时,它只是将控制权交还给main方法,而不返回任何值。因此,您需要了解有关从方法返回值的信息。

如果要保存每个方法的操作结果,则必须定义方法以返回值,如下所示:

public static int toplam(int k)
    {Scanner a = new Scanner(System.in);
        System.out.print(k + " + ");
        for(int i = 0; i<1; i++)
        {
            int b = a.nextInt();
            k += b;
            System.out.println(k);
        }
    return k;
    }

然后回到main方法中,对您的方法的调用将看起来像这样:

...
int result;
while(true)
        {
           String b = a.nextLine();
        if(b.equals("q")) { break; }
        if(b.equals("a")) { result = toplam(anasayi); }
...

然后,您可以在下一个循环中决定如何处理result。祝你好运!


0
投票

像int这样的原始类型被传递给方法by value。这意味着您的方法将获得k变量的副本。为了使您的代码正常工作,请将k定义为共享变量,而不是通过以下方法将其传递:(尽管这是非常非常糟糕的做法,但是稍后您将学习如何做:))

public class gelismishesap {

    static int k = 0;

    public static void toplam() {
        // Your code ....
        k += b;
    }

    // Other methods ....

    public static void main(String[] args) {
         // Code ....
         k = a.nextInt(); // Instead of anasayi
    }

}

并且,请稍后用英语写您的问题,包括您的代码中的名称:)

© www.soinside.com 2019 - 2024. All rights reserved.