【问题标题】:Print even char from a string- error non static method can not reference from static context [duplicate]从字符串打印偶数字符-错误非静态方法无法从静态上下文中引用[重复]
【发布时间】:2016-06-28 04:16:59
【问题描述】:

我是java 的新手,尝试弄清楚但找不到正确答案。该程序是在均匀的地方打印字母。

输入: 2 黑客 排名

输出 醋酸乙酯 Rn

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public char[] printeven(char[] arr1)
    {
      char[] result1;
      int index = 0;
      for(int i=1; i<arr1.length; i+=2)
        {
          result1[index] = arr1[i];
          index += 1; 
        }
      System.out.println(result1);
      return result1;

    }


    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
      Scanner scan = new Scanner(System.in);
      int T = scan.nextInt();
      String s1= scan.next();
      String s2= scan.next();
      scan.close();

      char[] array1 = s1.toCharArray();
      char[] array2 = s1.toCharArray();

      printeven(array1);
      printeven(array2);
    }
}

我的猜测是从 main 中删除静态,但我得到了错误,

Solution.java:15: error: variable result1 might not have been initialized
          result1[index] = arr1[i];
          ^
Solution.java:18: error: variable result1 might not have been initialized
      System.out.println(result1);
                         ^

2 个错误

【问题讨论】:

  • 你需要更多关于java的学习,你可以说java基础。
  • 由于未初始化的变量错误而投票重新开放。

标签: java string


【解决方案1】:

只需让你的方法 printeven 静态:

public static char[] printeven(char[] arr1).

即使 main 在同一个类中,您也处于静态上下文中,并且无法访问 Solution 类的非静态成员。

您也可以初始化一个解决方案并调用该方法:

Solution solution = new Solution();
solution.printeven(array1);
solution.printeven(array2);

最后,你需要在使用之前初始化你的数组:

char[] result1 = new char[arr1.length];

【讨论】:

    【解决方案2】:

    这是 JAVA 的一个基本概念。您不能从 JAVA 中的静态方法引用非静态方法。此外,您不能从 main 方法中删除 static,因为它是充当程序入口点的 main 方法,它应该保持为静态。

    为了访问您的非静态方法,只需初始化您的类的一个对象,然后按如下方式使用它。

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int T = scan.nextInt();
        String s1= scan.next();
        String s2= scan.next();
        scan.close();
    
        char[] array1 = s1.toCharArray();
        char[] array2 = s1.toCharArray();
    
        // initialize an object of your class
        Solution sol=new Solution();
        sol.printeven(array1);
        sol.printeven(array2);
    }
    

    【讨论】:

      【解决方案3】:

      printevenSolution 类的非静态成员函数。要访问类的非静态成员,您需要创建该类的对象并通过创建的对象访问该成员。像这样-

      MyClass myObject = new MyClass();
      myObject.callMyClassFunction();
      

      如果你想在不创建类的对象的情况下调用成员函数,那么你需要将成员声明为静态的。然后你可以简单地做

      MyClass.callMyClassFunction()
      

      不创建任何对象。

      关于错误信息-

      非静态方法不能从静态上下文中引用

      主函数是静态函数,静态函数只能访问其他静态成员。你可以在这里阅读更多关于static的信息-https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

      【讨论】:

        【解决方案4】:

        我有两种不同的解决方案,

        首先,

        import java.util.*;
        
        public class Solution {
        
            public static void main(String[] args) {
                Scanner scan = new Scanner(System.in);
                int testCases = scan.nextInt();
                for(int i = 0; i < testCases; i++){
                    char[] inputString = scan.next().toCharArray();
        
                    // Print even chars
                    for(int j = 0; j < inputString.length; j += 2){
                        System.out.print(inputString[j]);
                    }
                    System.out.print(" ");
        
                    // Print odd chars
                    for(int j = 1; j < inputString.length; j += 2){
                        System.out.print(inputString[j]);
                    }
                    System.out.println();
                }
                scan.close();
            }
        }
        

        第二,

        import java.util.*;
        
        public class Solution {
        
            public static void main(String[] args) {
                Scanner scan = new Scanner(System.in);
                int testCases = scan.nextInt();
                for(int i = 0; i < testCases; i++){
                    char[] inputString = scan.next().toCharArray();
                    StringBuilder oddString = new StringBuilder();
                    StringBuilder evenString = new StringBuilder();
        
                    for(int j = 0; j < inputString.length; j++) {
                        if( (j & 1) == 0) {
                            evenString.append(inputString[j]);
                        }
                        else {
                            oddString.append(inputString[j]);
                        }
                    }
        
                    System.out.println(evenString + " " + oddString);
                }
                scan.close();
            }
        }
        

        但是还是想用多种方法来解决这个问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-06
          • 2014-05-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多